打印
[应用相关]

不返回0xFE

[复制链接]
894|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卡进入空闲状态。

使用特权

评论回复
5
wenfen| | 2014-10-30 11:30 | 只看该作者
代码看看吧

使用特权

评论回复
6
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)

        {

使用特权

评论回复
7
zhuhuis| | 2014-10-30 11:33 | 只看该作者
写之后有没有留足够的延迟让 SD 卡有空完成写操作呢

使用特权

评论回复
8
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卡写操作之后,要给足够的时间让内部完成写操作。

使用特权

评论回复
9
tian111| | 2014-10-30 11:35 | 只看该作者
我随便问一下,我要我MCU要读取SD卡里面的HEX文件,再写MCU的FLASH,之后从写的这段FLASH开始运行,要怎么做。

使用特权

评论回复
10
tian111| | 2014-10-30 11:35 | 只看该作者
意思就是用SD卡可以对程序进行升级。

使用特权

评论回复
11
happy_10|  楼主 | 2014-10-30 11:37 | 只看该作者
母**啊。。。

使用特权

评论回复
12
happy_10|  楼主 | 2014-10-30 11:37 | 只看该作者
你新开一帖吧,我结贴啦

使用特权

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

本版积分规则

744

主题

7973

帖子

6

粉丝