打印

stm32 SPI方式读写SD卡

[复制链接]
6255|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟碰到了这样的一个问题很是纠结。
写写SD卡20个block,然后读SD卡20个block,发现读问题,问题主要卡死在不返回0xFE。简单代码示意如下:
但是我直接对SD卡进行读多块操作,则不会有问题。
我在想是不是在读写之间要加一个中间的状态,比如发送命令让SD卡进入空闲状态。
请各位不吝指导,谢谢!
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)
        {

沙发
airwill| | 2013-5-23 12:30 | 只看该作者
写之后有没有留足够的延迟让 SD 卡有空完成写操作呢

使用特权

评论回复
板凳
h0610001210|  楼主 | 2013-5-26 10:06 | 只看该作者
airwill 发表于 2013-5-23 12:30
写之后有没有留足够的延迟让 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卡写操作之后,要给足够的时间让内部完成写操作。

使用特权

评论回复
地板
hawksabre| | 2013-5-26 14:58 | 只看该作者
问题解决了就好  楼主   不错   精神可嘉   呵呵

使用特权

评论回复
5
lin34337151| | 2013-7-1 09:39 | 只看该作者
楼主,你好,这几天在弄SD卡,程序能发我一份吗?感激不尽  QQ1732158020

使用特权

评论回复
6
lin34337151| | 2013-7-1 09:41 | 只看该作者
我随便问一下,我要我MCU要读取SD卡里面的HEX文件,再写MCU的FLASH,之后从写的这段FLASH开始运行,要怎么做。意思就是用SD卡可以对程序进行升级。

使用特权

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

本版积分规则

17

主题

133

帖子

2

粉丝