采用英蓓特的例程,SYSTICK和UART的中断都会造成连续读写失败,进入死循环。请大家注意。除了关中断,我还没找到其他合适的方法。
你查查看,SD卡的读写操作是否有超时控制
如果有超时控制,连续读写时被中断则可能造成操作失败。
如果没有超时控制,则要检查你的程序,是否有代码重入的问题和/或变量访问冲突的问题。
谢谢香版提供的思路
SD卡是按块来操作的,一块通常是512字节。在读操作时,通过SPI发送读命令,然后SD卡发送一块数据(512)字节。问题是,如果这512字节还没发送完,SPI通信已经被打断,这样也会造成数据接受错误。不知分析的对否,请大家斧正!
..
没看见SD卡有超时控制
就算是SPI通信被中断了 也是在字节和字节之间
什么中断能占用那么长时间
应该主要看看代码重入和变量访问冲突吧
路过 看看..
建议可使用SPI的DMA方式访问SD卡
我使用过的SDIO的Demo 只能作参考。
直接原因并不是中断引起的
SPI模式下读写SD卡,SD作为设备,工作时钟由SPI控制,中断过来, 顶多会使SD卡的工作时钟中断, SD卡进入待机状态而已,当时钟恢复, SD也就会回到正常状态. 由于SPI是硬件自动发送并接受一个数据, 所以其他中断只会是在字节和字节之间,所以很明显,直接原因并不是中断引起的
重点分析硬件冲突
使用spi访问sd卡过程中,是否有其他中断修改了硬件设置,如关闭了spi外设时钟,导致读spi函数死循环。
这个问题和置顶的I2C属同一性质
我想应当还有写FLASH,也会有这样的问题发生。
例程给出的都是单一工作状态,都能通过。各种外设一起开动,问题就来了。
楼主,您是否已经解决了这个问题,我也遇到同样的问题呀?麻烦告知呀!
我的也是,增加了网口的操作函数后写SD卡就乱了,注释掉网口函数就正常,我觉得是DM9000A中断的原因,但是也还没解决