2.6 基于SPI总线的SD卡驱动总结 ,at91

来自:http://blog.chinaunix.net/u1/58780/showart_673609.html

 

最近粗略的看了SD的Specifications,结合网上前人的代码,把SD卡跑通了。处理器是AT91SAM7X256,用SPI接口挂SD卡。 SD卡的协议我看了两个版本,1.7和2.0。2.0版本比1.x多了支持HCSD(High Capacity SD),且多了些操作命令(CMD8),下图说明普卡和高容量卡的硬件使用区别:

 

图上说要想使用 HCSD Host 必须支持才行,而普卡是被兼容的。在初始化的时候,也要用 CMD8 检查卡的类型是否为 HCSD ,其他的基本一样, Spec 上给的初始化流程如下图:

 

 

SD 卡的驱动主要有初始化、读、写、擦除等。

1、 初始化 步骤:

(1)      延时至少 74clock

(2)      发送 CMD0 ,需要返回 0x01 ,进入 Idle 状态

(3)      循环发送 CMD55+ACMD41 ,直到返回 0x00 ,进入 Ready 状态。

如果是 MMC ,此步应发送 CMD1

2、 步骤:

(1)      发送 CMD17 (单块)或 CMD18 (多块)读命令,返回 0x00

(2)      接收数据开始令牌 0xfe (或 0xfc + 正式数据 512Bytes + CRC 校验 2Bytes

默认正式传输的数据长度是 512Bytes ,可用 CMD16 设置。

3、 步骤:

(1)      发送 CMD24 (单块)或 CMD25 (多块)写命令,返回 0x00

(2)      发送数据开始令牌 0xfe (或 0xfc + 正式数据 512Bytes + CRC 校验 2Bytes

4、 擦除 步骤:

(1)      发送 CMD32 ,跟一个参数来指定首个要擦出的扇区号( SD 手册上说是块号)

(2)      发送 CMD33, ,指定最后的扇区号

(3)      发送 CMD38 ,擦除指定区间的扇区

3 步顺序不能颠倒。

还要注意发送 CMD 命令时,后面要跟一个字节的 CRC 校验数据,总之要保证每次发送的数据包长度符合协议要求,命令、数据符合时序要求。

 

以上是我对 SD 卡驱动的一点总结,不当之处请指正,欢迎交流。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值