打印
[应用相关]

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

[复制链接]
5212|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通信被中断了 也是在字节和字节之间
什么中断能占用那么长时间
应该主要看看代码重入和变量访问冲突吧

路过 看看..

使用特权

评论回复
5
seawwh| | 2009-2-16 09:01 | 只看该作者

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


  我使用过的SDIO的Demo 只能作参考。

使用特权

评论回复
6
zeropower| | 2009-2-16 09:51 | 只看该作者

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

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

使用特权

评论回复
7
海阔天空001|  楼主 | 2009-2-16 10:58 | 只看该作者

多谢指点!

多谢!我再继续调试

使用特权

评论回复
8
skyler| | 2009-2-16 13:10 | 只看该作者

重点分析硬件冲突

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

使用特权

评论回复
9
laotong| | 2009-2-19 09:05 | 只看该作者

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

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

使用特权

评论回复
10
海阔天空001|  楼主 | 2009-2-22 17:56 | 只看该作者

多谢指点!

多谢指点!

使用特权

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

本版积分规则

5

主题

13

帖子

0

粉丝