打印

STM32 DIY“古老”U盘

[复制链接]
7892|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qinshi1208|  楼主 | 2009-7-7 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做一个STM32的USB,看到古道热肠AT45DB161搞成了一个“古老的U盘”,手头有几片那样的SPI FLASH,也想搞搞,但是遇到了些问题,如下:
    移植的是STM32的USB库Mass Storage,读写AT45DB161的用了古道热肠的,读写都可以。也能格式化。
https://bbs.21ic.com/upfiles/img/20097/20097717936608.jpg
打开做的U盘,有:
 https://bbs.21ic.com/upfiles/img/20097/200977171022425.jpg
按文件名以及在WinHex中看到的
 https://bbs.21ic.com/upfiles/img/20097/200977171038923.jpg
发现是offset 0中的数据
在U盘里建立一个文本文档
 https://bbs.21ic.com/upfiles/img/20097/200977171052287.jpg
保存后,U盘里多了很多东西
 https://bbs.21ic.com/upfiles/img/20097/20097717115984.jpg
很奇怪,其中的文件名称和在WinHex中看到的数据一样,怀疑就是读了那数据出来的。比如那个文件夹any key.to就是
 https://bbs.21ic.com/upfiles/img/20097/200977171121313.jpg
1E0的内容
本应是FAT12字符的部分,在建立文本文档后也变成了
 https://bbs.21ic.com/upfiles/img/20097/200977171135913.jpg

我个人认为可能是USB读写FLASH过程中出了点问题
这是读函数
void Read_Memory(void)
{

  if (!Block_Read_count)  //块读计数不为0
  {
  #ifdef _USE_MSD
    MSD_ReadBlock(Data_Buffer, Memory_Offset, 512);
  #else 
    printf("Read_Memory Block_offset:0x%x ",Memory_Offset);
    DataFlash_ReadSector(Memory_Offset,Data_Buffer );
  #endif
    UserToPMABufferCopy(Data_Buffer, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE);
    Block_Read_count = 512 - BULK_MAX_PACKET_SIZE;
    Block_offset = BULK_MAX_PACKET_SIZE;
    
  }
  else
  {
    UserToPMABufferCopy(Data_Buffer + Block_offset, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE);
    Block_Read_count -= BULK_MAX_PACKET_SIZE;
    Block_offset += BULK_MAX_PACKET_SIZE;
  }

  SetEPTxCount(ENDP1, BULK_MAX_PACKET_SIZE);
  SetEPTxStatus(ENDP1, EP_TX_VALID);


  Memory_Offset += BULK_MAX_PACKET_SIZE;
  Transfer_Length -= BULK_MAX_PACKET_SIZE;

  CSW.dDataResidue -= BULK_MAX_PACKET_SIZE;
  Led_RW_ON();

  if (Transfer_Length == 0)
  {
    Block_Read_count = 0;
    Block_offset = 0;
    Memory_Offset = 0;
    Bot_State = BOT_DATA_IN_LAST;
    Led_RW_OFF();
  }
}

这个是写函数
void Write_Memory(void)
{
  u32 temp =  Counter + 64;


  i = 0;
  for (; Counter < temp; Counter++)
  {
    Data_Buffer[Counter] = Bulk_Data_Buff;
    i++;
  }
  Memory_Offset += Data_Len;
  Transfer_Length -= Data_Len;

  if (!(Transfer_Length % 512))
  {
    Counter = 0;
#ifdef _USE_MSD
    MSD_WriteBlock(Data_Buffer, Memory_Offset - 512, 512);
#else
    DataFlash_WriteSector(Memory_Offset - 512,Data_Buffer);
    printf("Write_Memory: Memory_Offset0x%x- 0x200=0x%x ",Memory_Offset,(Memory_Offset -512));
#endif
  }

  CSW.dDataResidue -= Data_Len;
  SetEPRxStatus(ENDP2, EP_RX_VALID); /* enable the next transaction*/

  Led_RW_ON();

  if ((Transfer_Length == 0) || (Bot_State == BOT_CSW_Send))
  {
    Counter = 0;
    Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
    Led_RW_OFF();
  }
}

帮忙看看这个问题,好想我这个也类似古老的U盘也能跑起来,希望得到指点。特别是搞出来过的古道热肠  !

相关帖子

沙发
xwj| | 2009-7-7 17:22 | 只看该作者

目录表错位了

使用特权

评论回复
板凳
qinshi1208|  楼主 | 2009-7-7 17:41 | 只看该作者

谢谢楼上

头一次发这么多图片上来,不知道怎么搞的图片没了,哎~~ 以后多发帖~~

谢谢楼上,哪么该如何修改呢?

使用特权

评论回复
地板
古道热肠| | 2009-7-7 17:41 | 只看该作者

注意写扇区一定要写成功

AT45DB161D写扇区一定要等待的.
可以先等它写完后再返回主调函数.
也可以在下次读或写之前查忙.
您先用每一种方式调,效率较低,但很可靠.

使用特权

评论回复
5
qinshi1208|  楼主 | 2009-7-7 17:45 | 只看该作者

谢过

我借鉴的是您的读写函数,里面有查忙的函数呀。

使用特权

评论回复
6
古道热肠| | 2009-7-8 10:11 | 只看该作者

您再用BusHound跟踪一下通讯过程.

您离成功只有一步之遥了,自己多试试吧.

使用特权

评论回复
7
qinshi1208|  楼主 | 2009-7-8 16:44 | 只看该作者

奇怪

今天看了看,发现格式化成功后只有FAT12的引导扇区,FAT1里面也是和引导扇区的内容一样的。
  古道热肠是否能帮忙将你的引导扇区和文件分配表等截图上来看看。谢谢

使用特权

评论回复
8
qinshi1208|  楼主 | 2009-7-9 15:05 | 只看该作者

谢谢各位

谢谢各位的帮助~!
慢慢摸索,总于将其搞定~~~
呵呵

使用特权

评论回复
9
古道热肠| | 2009-7-9 15:18 | 只看该作者

什么原因,害得我忙着给您截图呢.

使用特权

评论回复
10
古道热肠| | 2009-7-9 15:19 | 只看该作者

FAT区截图

使用特权

评论回复
11
古道热肠| | 2009-7-9 15:20 | 只看该作者

Boot Directory区

使用特权

评论回复
12
古道热肠| | 2009-7-9 15:20 | 只看该作者

使用特权

评论回复
13
古道热肠| | 2009-7-9 15:21 | 只看该作者

不好意思,贴错了.

使用特权

评论回复
14
古道热肠| | 2009-7-9 15:23 | 只看该作者

调试过程要重视调试信息的输出,只要将待写入Flash的数据送

并将送往USB的数据都送串口来监视,应该能分清究竟问题出在哪儿的.

使用特权

评论回复
15
qinshi1208|  楼主 | 2009-7-10 14:20 | 只看该作者

恩 谢谢

谢谢古道热肠,你真是一个热心人,是读写的时候,地址指向错了。呵呵,你贴上的图也很漂亮呀!
 再次感谢~~

使用特权

评论回复
16
小智若愚| | 2009-7-21 00:28 | 只看该作者

12楼的贴图真漂亮

使用特权

评论回复
17
lpcfans| | 2009-7-21 12:41 | 只看该作者

女朋友????很漂亮。。。

使用特权

评论回复
18
古道热肠| | 2009-7-21 16:29 | 只看该作者

哈哈,回楼上

那有把自己的女友照到处贴的呀,显摆呀,网上Down的.

使用特权

评论回复
19
l404807906| | 2009-11-9 17:19 | 只看该作者
怎么加入这个组啊

使用特权

评论回复
20
zhaoxb| | 2010-3-17 22:06 | 只看该作者
能把AT45DB161搞成了一个“古老的U盘”的程序发给我吗?非常感谢,邮箱zhaoxbcari@126.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

60

帖子

0

粉丝