分类:
2009-02-21 12:19:05
一、前言
这些笔记是笔者阅读SD卡规范时所作的一些笔记。只是摘录SPI模式部分,因为用SPI模式操作SD卡是最常见的方法,这些仅仅是笔者阅读规范的个人理解,也不全面。但可以算是SD卡的入门笔记。更多详细说明,请参阅SD卡规范。
二、引脚
1、引脚
引脚如图1所示。
图
1 、SD卡引脚2、SPI模式针脚定义
定义如下:
针脚 |
名称 |
类型 |
描述 |
1 |
CS |
I |
片选(负有效) |
2 |
DI |
I |
数据输入 |
3 |
Vss |
S |
地 |
4 |
Vcc |
S |
供电电压 |
5 |
CLK |
I |
时钟 |
6 |
Vss2 |
S |
地 |
7 |
DO |
O |
数据输出 |
8 |
RSV |
-- |
|
9 |
RSV |
-- |
|
注:S:电源供电,I:输入O:输出
注意:SPI模式时,这些信号需要在主机端用10~100K欧的电阻上拉。即引脚2、5、7、8、9脚。
3、SPI模式总线拓扑图
拓扑图如图2:
图
2、SPI模式总线拓扑图三、命令
1、 命令格式
命令格式如图3所示,6字节共48位,传输时最高位(MSB)先传输。7位CRC计算如图4所示。
Byte 1 |
Bytes 2-5 |
Byte 6 | |||
7 |
6 |
5 0 |
31 0 |
7 |
0 |
0 |
1 |
Command |
Command Argument |
CRC |
1 |
图3、SPI模式下命令格式
图
4、7位CRC的计算2、 命令分类
各个命令说明见图5、图6,命令的索引值即为命令的值(如CMD39即为100111)。SPI Mode栏为Yes的命令支持SPI模式,Argument为参数栏,Resp为响应的类型,Abbreviation为命令的缩写,最后一栏为说明文字。
图
5、命令一览表
图
6、命令一览表(续)3、 R1响应
SD卡中的响应有许多种,R1为标准响应,最为常用。与R1响应相似的还有R1b、R2和R3。R1响应在除SEND_STATUS外其它命令后发送,也是最高位先发送,共1个字节。R1的格式如图7所示。响应说明如下:
0x01:空闲状态
0x02:擦除错误
0x04:命令错误
0x08:CRC通信错误
0x10:擦除次序错误
0x20:地址错误
0x40:参数错误
其它响应略去不谈,详见SD卡规范。
图
7、R1响应格式4、 数据响应(Data Response)
写数据区都要有一个数据记号来响应,该数据响应共1字节,格式如图8所示。其中XXX者可设置为0,这样高4位即为0,Status处定义如下: (其中括号即为该字节的16进制数)
010:数据接收 (0x05)
101:CRC错误,拒绝接收 (0x0b)
110:写错误,拒绝接收 (0x0d)
图
8、数据响应格式5、 数据记号(Data Token)
数据传输都是通过数据记号的,共4至515字节,同样是最高位先传输。对于单块的读写和多块读,第一个字节为0xfe(开始标志),接下来的2至513字节(视数据块长度而定)为用户数据。最后两字节为16位的CRC。而对于多块的写,第一字节有两种标志,开始标志为0xfc(数据是发送的),停止标志为0xfd(要求停止)。
6、 数据错误记号(Data Error Token)
如果读操作失败,SD卡则会发送数据错误记号,格式如图9,定义如下:
0x01:错误
0x02:CC错误
0x04:ECC错误
0x08:范围错误
0x10:卡被锁了
图
9、数据错误记号四、结语
这些可以说是SD卡的一些最基本的知识了,其它关于卡的电气特性等等的就不写了。一般来说,写程序来操作SD卡,拥有这些知识,再加上阅读别人写的程序,应该会对SD卡理解更深一点的。推荐Pascal Stang、ZhengYanbo和Qibo Zhang他们的程序。
欢迎一起交流,。