目录
1. 概述
SD卡是基于flash的存储卡。
SD卡和MMC卡的区别在于初始化过程不同。
SD卡的通信协议包括SD和SPI两类。
1.1 总线接口
针脚 1 2 3 4 5 6 7 8 9
SDIO模式 CD/DAT3 CMD VSS VCC CLK VSS DAT0 DAT1 DAT2
SPI模式 CS MOSI VSS VCC CLK VSS MISO NC NC
2. 寄存器描述
2.1 CID寄存器
CID寄存器是128位宽。它包含在卡片识别阶段使用的卡片识别信息。每个读/写(RW)卡应该有一个唯一的识别号码。
2.2 RCA 寄存器
卡的相对地址,该16位卡地址寄存器保存了卡在识别过程中发布的地址。该地址用于在主机识别卡后,利用该地址与卡进行通信。该寄存器只有在SD模式下才有效。
2.3 DSR 寄存器
它可以选择性地用于改善扩展工作条件下的总线性能(取决于总线长度、传输速率或卡数等参数)。CSD寄存器携带有关DSR寄存器使用情况的信息。DSR寄存器的默认值为Ox404。
2.4 CSD 寄存器
2.5 SCR 寄存器
SD配置寄存器提供SD卡的特殊特性信息,其大小为64位。该寄存器由厂商编程,主机不能对它进行编程。
2.6 OCR 寄存器
保存有卡支持的工作电压,支持的话相应的位置 1,否则为 0
3. 命令
有四种命令定义来控制SD存储卡:
- 广播命令(bc),无响应-广播特性仅在主机中的所有CMD行连接在一起时才会出现。如果它们是分开的,那么每一张牌将轮流单独接受它。
- 广播命令与响应(bcr)响应同时来自所有卡-由于SD存储卡中没有Open Drain模式,这种类型的命令只能在所有CMD行分开时使用-命令将被每个卡单独接受和响应。
- 寻址(点对点)命令(ac)在DAT上没有数据传输
- 地址(点对点)数据传输命令(adtc)数据在DAT上传输
所有命令和响应都通过SD存储卡的CMD行发送。命令传输总是从与命令码字对应的位串的左位开始。
3.1 命令格式
所有命令均遵守上图中的格式,总共 48 位.首先是 1 个起始位 0, 接着是 1 个方向位(主机发送位 1),6 个命令位(0-63),32 位参数(有些命令需要),CRC7 位校验,1 个停止位.
3.2 命令分类
系统的命令集分为几类,如下表所示。每个类都支持一组卡片功能。表4-17根据卡支持的命令进行设置。一个CCC位对应一个支持的命令号,设置为1。cCC中包含强制命令的类总是被设置为1。具有特定功能的卡可能需要支持一些可选命令。例如,Combo Card应该支持CMD5。
等级0、2、4、5、7和8是强制性的,所有SD存储卡都应支持。其他类是可选的。支持的卡命令类(CCC)被编码为每个卡的卡特定数据(CSD)寄存器中的参数,为主机提供如何访问卡的信息。
3.3 命令描述
3.3.1 基本命令
3.3.2 块读命令
3.3.3 块写命令
3.3.4 擦除命令
4. 响应
所有响应都是通过 MCCMD 命令线 SDIO_CMD 来发送。响应传输始终从对应于响应代码字的位字符串的左侧位开始。代码长度取决于响应类型。
响应始终从起始位(始终为 0)开始,后跟用于指示传输方向的位 (card = 0)。下表中标有 x的值表示变量项。除 R3 响应类型之外的所有响应均受 CRC 保护。每个命令代码字由结束位(始终为 1)来终止。
4.1 R1(正常响应命令)
代码长度 = 48 位。 45:40 位用于指示待响应命令的索引,该值被解释为二进制编码的数字(介于 0 和 63 之间)。卡的状态采用 32 位进行编码。
4.2 R1b
同 R1,并且有一个可选的繁忙信号在数据线上传输。根据卡在接收命令之前所处的状态,卡在接收到这些命令之后可能会变为繁忙状态。
4.3 R2( CID 和 CSD 寄存器)
代码长度 = 136 位。发送 CID 寄存器的内容以响应 CMD2 和 CMD10 命令。发送 CSD 寄存器的内容以响应 CMD9。仅传输 CID 和 CSD 的位 [127...1],这些寄存器的保留位 [0] 将被替换为响应的结束位。卡通过将 MCDAT 保持低电平来指示擦除正在进行中。实际擦除时间可能很长,主机可以发出 CMD7 来取消选择卡。
4.4 R3( OCR 寄存器)
代码长度: 48 位。OCR寄存器的内容作为对ACMD41的响应发送。
4.5 R6 (RCA 响应)
码长为48位。位45:40表示要响应的命令的索引——在这种情况下,它将是'000011'(与状态位中的位5一起表示= CMD3)。
4.6 R7 (卡接口状态)
码长为48位。卡支持电压信息由CMD8的响应发送。19:16表示卡支持的电压范围。接受供电电压的卡返回R7响应。在响应中,卡回显参数中设置的电压范围和校验模式。
5. SD Bus
SD总线上的通信基于命令和数据比特流,这些比特流由起始位发起,由停止位终止。
- 命令:命令是启动一个操作的令牌。命令从主机发送到单个卡(寻址命令)或发送到所有连接的卡(广播命令)。命令在CMD行上串行传输。
- 响应:响应是一个令牌,从一个地址卡或(同步)从所有连接的卡发送到主机,作为对先前收到的命令的回答。响应在CMD行上串行传输。
- 数据:数据可以从卡传输到主机,反之亦然。数据通过数据线进行传输
5.1 无响应或者无数据模式
5.2 多块读模式
5.3 多块写模式
5.4 数据传输格式
6. 工作流程
6.1 工作电压范围验证
在主机与卡通信之前,主机不清楚卡支持的电压范围,并且卡也不知道是否支持主机提供的供电电压,主机会发送CMD0让SD卡处于IDLE State
为了验证SD卡接口的操作条件,主机通过发送SEND_IF_COND (CMD8)命令,去获取SD卡支持的工作电压范围
SD卡通过检测CMD8的参数部分来检查主机使用的工作电压,主机通过分析卡CMD8的response参数来确认SD卡是否可以在所给电压下工作,如果SD卡可以在指定电压下工作,则它的response里面会包含cmd8参数里面提供的电压 ;如果不支持所给电压,则SD卡不会给出任何响应信息,并继续处于IDLE状态。
SD_SEND_OP_COND (ACMD41)命令来识别或者拒绝不匹配host主机供电电压范围的卡。如果SD卡在主机规定的电压范围内不能实现数据传输,卡将放弃下一步的总线操作而进入不活动状态(Inactive State)。
主机发送ACMD41命令时,可以通过将该命令所带的OCR参数设置为0,用来查询卡支持的工作电压范围。当ACMD41被用于查询时,卡将忽略掉ACMD41里面的HCS参数。主机在查询到卡的工作电压后,也许会将该电压作为接下来发送的ACMD41命令的参数。
在整个初始化过程中,主机不允许改变正在操作的电压范围。
6.2 卡识别过程
1. 激活总线。
2. SDIO 卡主机广播 SD_APP_OP_COND (ACMD41)。
3. 卡以其运行条件寄存器的内容进行响应。
4. 不兼容的卡将被置于无效状态。
5. SDIO 卡主机向所有有效卡广播 ALL_SEND_CID (CMD2)。
6. 这些卡将发回其唯一的卡识别号 (CID) 并进入识别状态。
7. SDIO 卡主机向某个地址的有效卡发出 SET_RELATIVE_ADDR (CMD3)。这一新地址称为相对卡地址 (RCA) ;它比 CID 更短,可对卡进行寻址。分配的卡变为待机状态。SDIO 卡主机可以重新发出此命令以更改 RCA。卡的 RCA 是最后分配的值。