一、前言
这些笔记是笔者阅读SD卡规范时所作的一些笔记。只是摘录SPI模式部分,因为用SPI模式操作SD卡是最常见的方法,这些仅仅是笔者阅读规范的个人理解,也不全面。但可以算是SD卡的入门笔记。更多详细说明,请参阅SD卡规范。
二、引脚
1、SPI模式针脚定义
定义如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
针脚 | 名称 | 类型 | 描述 |
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 | -- |
|
图1、引脚
注:S:电源供电,I:输入O:输出
注意:SPI模式时,这些信号需要在主机端用10~100K欧的电阻上拉。即引脚2、5、7、8、9脚。
三、命令
1、 命令格式
命令格式如图2所示,6字节共48位,传输时最高位(MSB)先传输。
Byte 1 | Bytes 2-5 | Byte 6 | |||
7 | 6 | 5 0 | 31 0 | 7 | 0 |
0 | 1 | Command | Command Argument | CRC | 1 |
图2、SPI模式下命令格式
2、 命令分类
各个命令说明见规范说明,--这里不能贴图片,因而没有贴出来。命令的索引值即为命令的值(如CMD39即为100111)。SPI Mode栏为Yes的命令支持SPI模式,Argument为参数栏,Resp为响应的类型,Abbreviation为命令的缩写,最后一栏为说明文字。
3、 R1响应
SD卡中的响应有许多种,R1为标准响应,最为常用。与R1响应相似的还有R1b、R2和R3。R1响应在除SEND_STATUS外其它命令后发送,也是最高位先发送,共1个字节。R1的格式如图3所示。响应说明如下:
0x01:空闲状态
0x02:擦除错误
0x04:命令错误
0x08:CRC通信错误
0x10:擦除次序错误
0x20:地址错误
0x40:参数错误
其它响应略去不谈,详见SD卡规范。
7 0
0 |
|
|
|
|
|
|
|
7 6 5 4 3 2 1
1、In Idle State
2、Erase Reset
3、Illegal Command
4、Com CRC Error
5、Erase_Seq_Error
6、Address Error
7、Parameter Error
图3、R1响应格式
4、 数据响应(Data Response)
写数据区都要有一个数据记号来响应,该数据响应共1字节,格式如图4所示。其中XXX者可设置为0,这样高4位即为0,Status处定义如下: (其中括号即为该字节的16进制数)
010:数据接收 (0x05)
101:CRC错误,拒绝接收 (0x0b)
110:写错误,拒绝接收 (0x0d)
7 6 5 4 0
X | X | X | 0 | Status | 1 |
图4、数据响应格式
5、 数据记号(Data Token)
数据传输都是通过数据记号的,共4至515字节,同样是最高位先传输。对于单块的读写和多块读,第一个字节为0xfe(开始标志),接下来的2至513字节(视数据块长度而定)为用户数据。最后两字节为16位的CRC。而对于多块的写,第一字节有两种标志,开始标志为0xfc(数据是发送的),停止标志为0xfd(要求停止)。
6、 数据错误记号(Data Error Token)
如果读操作失败,SD卡则会发送数据错误记号,格式如图5,定义如下:
0x01:错误
0x02:CC错误
0x04:ECC错误
0x08:范围错误
0x10:卡被锁了
7 0
0 | 0 | 0 |
|
|
|
|
|
5 4 3 2 1
1、Error
2、CC Error
3、Card ECC Failed
4、Out of Range
5、Card is Locked
图5、数据错误记号
四、结语
这些可以说是SD卡的一些最基本的知识了,其它关于卡的电气特性等等的就不写了。一般来说,写程序来操作SD卡,拥有这些知识,再加上阅读别人写的程序,应该会对SD卡理解更深一点的。推荐Pascal Stang、ZhengYanbo和Qibo Zhang他们的程序。
PS:可参见另一相同版本:http://blog.chinaunix.net/u1/58951/showart_1837451.html
文章评论(0条评论)
登录后参与讨论