微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机SPI模块读写SD卡

单片机SPI模块读写SD卡

时间:10-02 整理:3721RD 点击:
最近在研究用飞思卡尔MC9S12XEP100单片机研究SPI读取SD卡,在SD卡初始化时,往SD卡发送一个字节,程序如下:
byte SPI_Byte(byte value)
{
        while (!SPI0SR_SPTEF); //等待发送
        SPI0DR = value;
        while(!(SPI0SR_SPIF)); //等待接收
        return SPI0DR;
}
程序一直停在“while(!(SPI0SR_SPIF)); //等待接收”这一步,跳不出来;SD卡是好使的,是Kingston的2G SD卡;目前还未找到原因

我现在解决了此问题,把问题的过程总结给大家,希望有帮助:
之前分别怀疑SD卡和飞思卡尔(现在叫恩智浦)XEP100单片机SPI的问题,我首先利用万用表测试XEP100开发板的SD卡硬件电路,没有发现问题,再使用SPI1模块替代SPI0模块,结果还是出现“一直卡在while(!(SPI0SR_SPIF)); //等待接收”的问题,怀疑是SPI的问题,后使用XS128的开发板,并借用XEP100开发板的SD卡硬件模块,调试后能正常读写SD卡;最后将XS128的SPI初始化移植给XEP100,也能够实现正常读写SD卡。
比较2种单片机SPI初始化程序,问题出在“SPI0CR2 = 0x10;”之前一直是“SPI0CR2 = 0x00;”所以其中MODFEN位要置1,SSOE也要置1。此外,此处用单步调试不行,会导致程序一直卡在“while(!(SPI0SR_SPIF)); //等待接收”处,至于为什么还不是很清楚。
最后,谢谢大家给我的建议和讨论。

能否共享你的读写程序

不错,
很有帮助

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top