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

[复制链接]
6530|9
 楼主| 海阔天空001 发表于 2009-2-12 17:39 | 显示全部楼层 |阅读模式
采用英蓓特的例程,SYSTICK和UART的中断都会造成连续读写失败,进入死循环。请大家注意。除了关中断,我还没找到其他合适的方法。
香水城 发表于 2009-2-12 17:48 | 显示全部楼层

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

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

如果没有超时控制,则要检查你的程序,是否有代码重入的问题和/或变量访问冲突的问题。
 楼主| 海阔天空001 发表于 2009-2-12 21:34 | 显示全部楼层

谢谢香版提供的思路

SD卡是按块来操作的,一块通常是512字节。在读操作时,通过SPI发送读命令,然后SD卡发送一块数据(512)字节。问题是,如果这512字节还没发送完,SPI通信已经被打断,这样也会造成数据接受错误。不知分析的对否,请大家斧正!
jueju300 发表于 2009-2-15 23:42 | 显示全部楼层

..

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

路过 看看..
seawwh 发表于 2009-2-16 09:01 | 显示全部楼层

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


  我使用过的SDIO的Demo 只能作参考。
zeropower 发表于 2009-2-16 09:51 | 显示全部楼层

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

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

多谢指点!

多谢!我再继续调试
skyler 发表于 2009-2-16 13:10 | 显示全部楼层

重点分析硬件冲突

使用spi访问sd卡过程中,是否有其他中断修改了硬件设置,如关闭了spi外设时钟,导致读spi函数死循环。
laotong 发表于 2009-2-19 09:05 | 显示全部楼层

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

我想应当还有写FLASH,也会有这样的问题发生。
例程给出的都是单一工作状态,都能通过。各种外设一起开动,问题就来了。
 楼主| 海阔天空001 发表于 2009-2-22 17:56 | 显示全部楼层

多谢指点!

多谢指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

0

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