因为自己也在运用SD卡,运用的进程中也遇到了一些问题,下面是在EDN论坛上zxb1717高手的经历,期望能够协助我们
调试要害点:
1. 上电时要延时满足长的时刻给SD卡一个预备进程,在我的程序里是5秒,依据不同的卡设置不同的延时时刻。SD卡初始化第一步在发送CMD指令之前,在片选有用的情况下首先要发送至少74个时钟,不然将有或许呈现SD卡不能初始化的问题。
2. SD卡发送复位指令CMD0后,要发送版别查询指令CMD8,回来状况一般分两种,若回来0x01表明此SD卡承受CMD8,也便是说此SD卡支撑版别2;若回来0x05则表明此SD卡支撑版别1。因为不同版别的SD卡操作要求有不一样的当地,所以必须查询SD卡的版别号,不然也会呈现SD卡无法正常作业的问题。
3. 理论上要求发送CMD58取得SD卡电压参数,但实践进程中因为事前都知道了SD卡的作业电压,因而可省掉这一步简化程序。协议书上也主张尽量不要用这个指令。
4. SD卡读写超时时刻要依照协议说明书书上的给定值(读超时:100ms;写超时:250ms),这个值要在程序中精确计算出来,不然将会呈现不能正常读写数据的问题。我自己界说了一个计算公式:超时时刻=(8/clk)*arg。
5. 2GB以内的SD卡(规范卡)和2GB以上的SD卡(大容量卡)在地址拜访方式上不同,这一点特别要注意,不然将会呈现无法读写数据的问题。如规范卡在读写操作时,对读或写指令令牌傍边的地址域符初值0x10,表明对第16个字节今后的地址单元进行操作(条件是此SD卡支撑偏移读写操作),而对大容量卡读或写指令令牌傍边的地址域符初值0x10时,则表明对第16块进行读写操作,并且大容量卡只支撑块读写操作,块巨细固定为512字节,对其进行字节操作将会犯错。
6. 对某一块要进行写操作时最好先履行擦出指令,这样写入的速度就能大大进步。进行擦除操作时不管是规范卡仍是大容量卡都按块操作履行,也便是一次擦除至少512字节。
7. 对规范卡进行字节操作时,开始和中止必须在一个物理扇区内,不然将不能进行读写操作。实践操作进程中主张用块操作以进步功率。不管是规范卡仍是大容量卡一个读写指令只能对一个块进行操作,不允许跨物理层地址操作。
8. 在写数据块前要先写入若干个dummy data字节,写完一个块数据时,主机要监测MISO数据线,假如从机处于忙状况这根数据线会坚持低电平,这样主机就能够依据这根数据线的状况以决议是否发送下一个指令,在从机没有开释MISO数据线之前,主机肯定不能履行其他指令,不然将会导致写入的数据犯错,并且从机也不会呼应主机的指令。
9. 在SPI方式下,CRC校验是被疏忽的,但仍然要求主从机发送CRC码,仅仅数值能够是恣意值,一般主机的CRC码一般设为0x00或0xFF。
读多块操作和写多块操作的传输中止方式不一样,读多块操作时用用指令CMD12中止传输,而写多块操作时用Stop Tran Token(中止传输令牌,值为0xFD)中止传输。
学习STM32之SD卡总结
由于自己也在使用SD卡,使用的过程中也遇到了一些问题,下面是在EDN论坛上zxb1717高手的经验,希望可以帮助大家调试关键点:1.上电时要…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/266952.html