stm32 SPI方式读写SD卡

[复制链接]
6738|5
 楼主| h0610001210 发表于 2013-5-23 11:41 | 显示全部楼层 |阅读模式
小弟碰到了这样的一个问题很是纠结。
写写SD卡20个block,然后读SD卡20个block,发现读问题,问题主要卡死在不返回0xFE。简单代码示意如下:
但是我直接对SD卡进行读多块操作,则不会有问题。
我在想是不是在读写之间要加一个中间的状态,比如发送命令让SD卡进入空闲状态。
请各位不吝指导,谢谢!
  1. if(SD_WriteMultiBlocks(1960, NULL, 512, 20) != 0)                 
  2.         {
  3.       Debug_Info_Char(&ASCII[Ascii_Cycle]);
  4.       Debug_Info("__Write MutiBlock Failed!\n");
  5.         }
  6.         if(SD_ReadMultiBlocks(1960, test_buf, 512, 20) != 0)
  7.         {

airwill 发表于 2013-5-23 12:30 | 显示全部楼层
写之后有没有留足够的延迟让 SD 卡有空完成写操作呢
 楼主| h0610001210 发表于 2013-5-26 10:06 | 显示全部楼层
airwill 发表于 2013-5-23 12:30
写之后有没有留足够的延迟让 SD 卡有空完成写操作呢

根本原因是如楼上所述,直接原因是:
1.jpg
  1. r1 = SPI_SD_ReadWriteByte(0, 0xFD);                //发结束传输令牌0xFD
  2.     if(r1==0x00)                                       
  3.     {
  4.         count =  0xfe;
  5.     }
  6.         SPI_SD_ReadWriteByte(0, 0xFF);        //这句话必须要加,这个函数的返回值为0x80,不知道这个值是什么意思,按照上面的
  7.                                                             //的时序图,应该进入busy状态,返回的是0x00。
  8.     if(SD_WaitDataReady() != 0)              //等待准备好,SD_WaitDataReady() 这个函数的作用就是查询数据引脚是否一直被拉低
  9.         {                                                         //一直拉低表明处于busy状态
  10.                 SPI_CS_HIGH();
  11.                 return 1;  
  12.         }
总之,个人觉得在SD卡写操作之后,要给足够的时间让内部完成写操作。
hawksabre 发表于 2013-5-26 14:58 | 显示全部楼层
问题解决了就好  楼主   不错   精神可嘉   呵呵
lin34337151 发表于 2013-7-1 09:39 | 显示全部楼层
楼主,你好,这几天在弄SD卡,程序能发我一份吗?感激不尽  QQ1732158020
lin34337151 发表于 2013-7-1 09:41 | 显示全部楼层
我随便问一下,我要我MCU要读取SD卡里面的HEX文件,再写MCU的FLASH,之后从写的这段FLASH开始运行,要怎么做。意思就是用SD卡可以对程序进行升级。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

133

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部