SPI模式下连续读写SD卡,会被其他外设中断干扰,造成死循环

good969   2009-2-12 17:39 楼主
                                 采用英蓓特的例程,SYSTICK和UART的中断都会造成连续读写失败,进入死循环。请大家注意。除了关中断,我还没找到其他合适的方法。

回复评论 (11)

你查查看,SD卡的读写操作是否有超时控制

如果有超时控制,连续读写时被中断则可能造成操作失败。

如果没有超时控制,则要检查你的程序,是否有代码重入的问题和/或变量访问冲突的问题。
点赞  2009-2-12 17:48

谢谢香版提供的思路

                                 SD卡是按块来操作的,一块通常是512字节。在读操作时,通过SPI发送读命令,然后SD卡发送一块数据(512)字节。问题是,如果这512字节还没发送完,SPI通信已经被打断,这样也会造成数据接受错误。不知分析的对否,请大家斧正!
点赞  2009-2-12 21:34

..

没看见SD卡有超时控制
就算是SPI通信被中断了 也是在字节和字节之间
什么中断能占用那么长时间
应该主要看看代码重入和变量访问冲突吧

路过 看看..
点赞  2009-2-15 23:42

建议可使用SPI的DMA方式访问SD卡


  我使用过的SDIO的Demo 只能作参考。
点赞  2009-2-16 09:01

直接原因并不是中断引起的

                                 SPI模式下读写SD卡,SD作为设备,工作时钟由SPI控制,中断过来, 顶多会使SD卡的工作时钟中断, SD卡进入待机状态而已,当时钟恢复, SD也就会回到正常状态. 由于SPI是硬件自动发送并接受一个数据, 所以其他中断只会是在字节和字节之间,所以很明显,直接原因并不是中断引起的
点赞  2009-2-16 09:51

多谢指点!

                                 多谢!我再继续调试
点赞  2009-2-16 10:58

重点分析硬件冲突

                                 使用spi访问sd卡过程中,是否有其他中断修改了硬件设置,如关闭了spi外设时钟,导致读spi函数死循环。
点赞  2009-2-16 13:10

这个问题和置顶的I2C属同一性质

我想应当还有写FLASH,也会有这样的问题发生。
例程给出的都是单一工作状态,都能通过。各种外设一起开动,问题就来了。
点赞  2009-2-19 09:05

多谢指点!

                                 多谢指点!
点赞  2009-2-22 17:56
楼主,您是否已经解决了这个问题,我也遇到同样的问题呀?麻烦告知呀!
点赞  2011-7-20 20:22
我的也是,增加了网口的操作函数后写SD卡就乱了,注释掉网口函数就正常,我觉得是DM9000A中断的原因,但是也还没解决
点赞  2012-10-28 21:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复