[应用相关] 不返回0xFE

[复制链接]
1128|11
 楼主| happy_10 发表于 2014-10-30 11:27 | 显示全部楼层 |阅读模式
写写SD卡20个block,然后读SD卡20个block,发现读问题,问题主要卡死在不返回0xFE。
 楼主| happy_10 发表于 2014-10-30 11:27 | 显示全部楼层
但是我直接对SD卡进行读多块操作,则不会有问题。
冰清玉洁 发表于 2014-10-30 11:28 | 显示全部楼层
是不是在读写之间要加一个中间的状态
 楼主| happy_10 发表于 2014-10-30 11:29 | 显示全部楼层
是啊,我也觉的比如发送命令让SD卡进入空闲状态。
wenfen 发表于 2014-10-30 11:30 | 显示全部楼层
代码看看吧
 楼主| happy_10 发表于 2014-10-30 11:31 | 显示全部楼层
if(SD_WriteMultiBlocks(1960, NULL, 512, 20) != 0)                 

        {

      Debug_Info_Char(&ASCII[Ascii_Cycle]);

      Debug_Info("__Write MutiBlock Failed!\n");

        }

        if(SD_ReadMultiBlocks(1960, test_buf, 512, 20) != 0)

        {
zhuhuis 发表于 2014-10-30 11:33 | 显示全部楼层
写之后有没有留足够的延迟让 SD 卡有空完成写操作呢
 楼主| happy_10 发表于 2014-10-30 11:34 | 显示全部楼层
的延迟让 SD 卡有空完成写操作呢
根本原因是如楼上所述,直接原因是:



  • r1 = SPI_SD_ReadWriteByte(0, 0xFD);                //发结束传输令牌0xFD
  •     if(r1==0x00)
  •     {
  •         count =  0xfe;
  •     }
  •         SPI_SD_ReadWriteByte(0, 0xFF);        //这句话必须要加,这个函数的返回值为0x80,不知道这个值是什么意思,按照上面的
  •                                                             //的时序图,应该进入busy状态,返回的是0x00。
  •     if(SD_WaitDataReady() != 0)              //等待准备好,SD_WaitDataReady() 这个函数的作用就是查询数据引脚是否一直被拉低
  •         {                                                         //一直拉低表明处于busy状态
  •                 SPI_CS_HIGH();
  •                 return 1;
  •         }


总之,个人觉得在SD卡写操作之后,要给足够的时间让内部完成写操作。
tian111 发表于 2014-10-30 11:35 | 显示全部楼层
我随便问一下,我要我MCU要读取SD卡里面的HEX文件,再写MCU的FLASH,之后从写的这段FLASH开始运行,要怎么做。
tian111 发表于 2014-10-30 11:35 | 显示全部楼层
意思就是用SD卡可以对程序进行升级。
 楼主| happy_10 发表于 2014-10-30 11:37 | 显示全部楼层
母**啊。。。
 楼主| happy_10 发表于 2014-10-30 11:37 | 显示全部楼层
你新开一帖吧,我结贴啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

744

主题

7973

帖子

6

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