SD卡的驱动

这几天一直在调大容量SDHC卡的驱动,期间遇到一些问题,现在只调好一张4G容量的卡,8G容量的卡还不行。

不得不感叹SD卡协议的混乱和兼容性之差。特别是命令响应这部分,看了很多文档,还是云里雾里。期间参考正点原子的SPI驱动SDHC的例子,那例子里判断CMD17的正确响应应该是0x00,然而在Verilog代码里一直不起作用,最后参考了特权的代码应该为0xfe,我查了些文档,也没查出个所以然。

  还有SD卡的逻辑地址和物理地址一定要分清楚,而且2GB以内的标准卡和2GB以上的HC卡在地址访问形式上是不同的。这一点很重要:标准卡在读写操作时,命令中的地址参数是以字节为单位寻址的,而HC则是以块为单位进行寻址的。

在SPI模式CRC校验是被忽略的,但仍然要求主从机发送CRC码,数值可以为任意值。读多块操作和写多块操作的传输停止形式也不一样,读多块时用命令CMD12终止传输,写多块操作时用Stop Tran Token(停止传输令牌,值为0xFD)来终止传输。

在ACMD41命令响应无效时,应重复多次发送CMD55+ACMD41命令,直到响应超时(这时应该检查硬件问题和之前的初始化步骤(比如上电等待SD卡就绪的延时是不是足够等等,我这里设置为2ms))。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值