SDIO学习(2)--SD 2.0协议

目录

1. SD卡简介

1.1 SD卡概念

1.2 SD卡外形和接口

2. SD 2.0主要特性

3. SD 卡系统概念

3.1 读写属性

3.2 总线拓扑结构

3.2.1 SD模式 

3.2.2 SPI模式

3.3 SD 2.0总线协议

3.3.1 命令(Command)

3.3.1.1 命令分类

3.3.1.2 命令格式

 3.3.1.3 命令详细描述

3.3.2  响应(Response)

3.3.2.1 R1(正常响应命令)

3.3.2.2 R1b

3.3.2.3 R2(CID,CSD 寄存器)

3.3.2.4 R3(OCR 寄存器)

3.3.2.5 R6(发布的 RCA 寄存器响应)

3.3.2.6 R7(卡接口条件)

3.3.3 数据(Data)

4. SD卡功能描述

4.1 SD卡状态和操作模式

4.2 SD卡识别模式

4.2.1 卡复位

4.2.2 操作条件确认

 4.2.3 SD卡初始化

4.3 SD卡数据传输模式

4.3.1 宽总线选择/取消

4.3.2 2GB 卡

4.3.3 读数据

​编辑4.3.4 写数据

4.3.5 擦除

4.3.6 写保护管理

4.3.7 卡锁定/解锁操作

4.4 SD卡寄存器

4.4.1 OCR寄存器

4.4.2 CID 寄存器

4.4.3 CSD 寄存器 

4.4.3.1 CSD结构

4.4.3.2 CSD寄存器 (CSD Version 2.0)

4.4.4 RCA寄存器 

4.4.5 DSR 寄存器(可选择)

4.4.6 SCR 寄存器


本文参考文档:

《SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00》 
 

1. SD卡简介

1.1 SD卡概念

除了 SD 卡外,还有 SDIO 卡。SDIO 卡可以包含存储功能,以及 IO 功能。SDIO 卡的存储部分应该完全兼容SD 卡规范。

SD 规范分为几个文件,如下图1-1:

音频规范(Audio Specification)
这个规范,以及其他应用规范(Other Application Documents),描述了音频应用的规范以及实施需求。

● 文件系统规范(File System Specification)
这个规范描述了存储在 sd 卡上的数据的文件格式化结构(保护和非保护区域)。

● 安全规范(Security Specification)
这个规范描述了内容保护机制和支持的特殊应用命令。

● 物理层规范(Physical Layer Specification,即本文档)
这个规范描述了 sd 卡使用的物理接口和命令协议。这篇文档被分为了几个部分:
第 3 章是关于系统概念的概述
第 4 章描述了常见 SD 卡特点。这种描述定义了卡的整体性能。
第 5 章描述了 sd 卡寄存器。
第 6 章定义了 sd 卡的硬件接口的电气参数。
第 8 章描述了 sd 卡的物理和机械性能。

● Mc-EX 接口规范(Mc-EX Interface Specification)
SD 卡规范的 A1 部分作为 SD 卡物理层规范的扩展,提供了所有移动商务扩展传输(MC-EX)
命令包的定义。

1.2 SD卡外形和接口

SD 卡通信是基于 9-pin 接口(时钟,命令,数据 x4,电源 x3),通信频率最大 50MHz ,支持低电压下工作。

Clk:时钟线,由SDIO主机产生

CMD:命令控制线,SDIO主机通过改线发送命令控制SD卡,如果命令要求SD卡提供应答,SD卡也是通过该线传输应答信息。

DAT0-3:数据线,SD卡可将DAT0拉低表示忙状态,上电后,SD 卡默认只使用 DAT0 来传输数据。初始化之后,主机可以改变总线宽度(使用的数据线数目)。

SD卡和MMC卡接口引脚对比:

2. SD 2.0主要特性

下面基于SD 2.0协议,对SD 2.0主要特性进行概述:

● 存储容量:
标准容量 SD 卡(SDSC):最高达到 2GB
高容量 SD 卡(SDHC):大于 2GB(SD2.0版本规格最高 32GB)

● 电压范围:
高电压 SD 卡-工作电压范围:2.7 -3.6V
双电压 SD 卡-工作电压范围:低电范围(待定) 和 2.7-3.6V

● 工作模式:
默认模式:可变时钟频率 0-25MHz,最高12.5MB/s 的接口速度(使用 4 条并行数据线)
高速模式:可变时钟频率 0-50MHz,最高25MB/s 的接口速度(使用 4 条并行数据线)

● 支持机械开关的写保护功能和卡检测功能(插入/拔出)

● 速度等级分类:定义了 4 个速度等级,来表示卡的最小速率:(实际上目前最高 Class10)
Class 0 – 这种卡不定义具体性能,代表了这个规范出来之前的所有卡;
Class 2 – 最小 2MB/s 的性能;
Class 4 – 最小 4MB/s 的性能;
Class 6 – 最小 6MB/s 的性能。

3. SD 卡系统概念

3.1 读写属性

以读写属性来说,有两种 SD 卡:
● 读写卡(闪存,一次可编程-OTP,多次可编程-MTP)
这些卡一般是空白媒体卡卖出,用于存储数据,例如终端用户视频,音频或者数字图像。

● 只读卡(ROM)
这些卡是只读的,内部的数据是固定内容不可更改。

3.2 总线拓扑结构

SD 卡系统定义了两种通信协议:SD 和 SPI。主机系统可以选择任意一种。当收到 reset 命令的时候,SD 卡通过主机的信息来决定使用何种模式,并且之后的通讯都会使用相同的模式。

3.2.1 SD模式 

SD 卡总线支持一主多从(卡),拓扑结构如下图 3-2所示,其中时钟,电源和地信号是所有卡都有的,命令(CMD)和数据(DAT0-3)信号是点对点连接到所有卡。

在初始化时,处理命令会单独发送到每个卡,允许应用程序检测卡以及分配逻辑地址。数据总是单独发送(接收)到(从)每张卡。但是,为了简化卡的堆栈操作,在初始化过程结束后,所有的命令都是同时发送到所有卡。地址信息包含在命令包中。

SD 总线允许数据线的动态配置。上电后,SD 卡默认只使用 DAT0 来传输数据。初始化之后,主机可以改变总线宽度(使用的数据线数目)。

SD 总线包含下面的信号:
CLK: 时钟信号
CMD: 双向命令/响应信号
DAT0-DAT3: 双向数据信号
Vdd,Vss1,Vss2: 电源和地信号

3.2.2 SPI模式

SD 卡的 SPI 通信模式是用来同 SPI 信道通信,主要是应用在市场上的各种微处理器。模式选择是在上电后的第一次 reset 命令期间决定,并且只要不断电就不能改变。

SPI 标准只是定义了物理连接,没有完成数据传输协议。SD 卡的 SPI 实现使用了 SD 模式相同的命令。从应用的角度来说,SPI 模式的优点是使用现成主机的能力,从而减小设计压力,缺点是性能的损失。

SD 卡 SPI 接口同市场上现有的 SPI 主机兼容。同其他 SPI 设备一样,SD 卡的 SPI 信道有以下 4 个信号,其拓扑结构如下图3-3所示:
CS: 主机到卡的片选(chip select)信号
CLK: 主机到卡的时钟信号
DataIn: 主机到卡的数据信号
DataOut: 卡到主机的数据信号

SPI 的另一个 特点是字节传输,这也是卡的实现。所有的数据都是字节(8 bit)的整数倍,并且直接总是对齐 CS 信号。

3.3 SD 2.0总线协议

SD总线的通信基于命令和数据流的,包含三个要素:命令(Command),响应(Response)和数据(Data)。

命令:命令是启动操作的令牌。命令从主机发送到卡(寻址命令)或所有连接的卡(广播命令),命令在CMD行上串行传输。

响应:响应是卡发送到主机,作为对先前接收到的命令的响应,响应在CMD线上串行传输。

数据:数据可以从卡传输到主机,反之亦然。

3.3.1 命令(Command)

3.3.1.1 命令分类

SD协议定义了 4 种命令类型:
(1) 广播命令(bc),无响应 : 广播命令只有当所有的 CMD 线都一起连到主机上时才会用。如果CMD 线是分开的,那么每张卡单独处理命令。
(2) 广播命令,带响应(bcr) :所有卡同时响应,因为 SD 卡没有开漏模式,所以使用这种命令时,CMD 线都是分开的,每张卡也会单独接收和响应命令。
(3)寻址命令(ac,点对点): 没有数据在 DAT 线上。
(4)寻址数据传输命令(adtc) : 有数据在 DAT 线上。

所有的命令都有一个固定的长度 48bit,在 25MHz 的频率下需要 1.92us,在 50Mhz 的频率下需要 0.96us。

3.3.1.2 命令格式

命令总是以起始位开始(固定0),第 2bit 是传输方向(host=1),之后 6bit 是命令的序号,这是个二进制的数(0~63),有些命令需要参数(比如地址),这个是 32bit,因具体命令而不同,所有的命令都用CRC进行保护,最后是结束位(固定1)。

 3.3.1.3 命令详细描述

下表4-19详细描述了 SD 卡的基础命令。

下表4-20详细描述了 面向块读的命令。

 

下表4-21详细描述了 面向块写的命令。 

 下表4-22详细描述了 面向块写保护的命令。 

 下表4-23详细描述了擦除命令。  

下表4-24详细描述了 加锁命令。  

下表4-25详细描述了特定应用命令。 

下表4-26详细描述了I/O模式命令。 

下表4-27SD 卡使用和保留的特定应用的命令。 

下表4-28详细描述了切换功能命令。 

3.3.2  响应(Response)

SD卡只支持5种响应:R1,R1b,R2,R3,R6,R7。所有的响应都是通过 CMD 线发送的,响应的长度取决于响应的类型。,其中 R1,R1b,R3,R4,R5,R6,R7 长度为48bit ,只有 R2 比较特殊,长度为 136bit。

3.3.2.1 R1(正常响应命令)

长度 48bit。bit [45:40]代表响应的命令码(0-63),卡的状态存储在 bit [39:8]。注意:如果有传输到卡的数据,那么每个块传输完成后,数据线上会有 busy 信号。主机在发送完数据后,应该检查 busy 信号。

3.3.2.2 R1b

R1b 就是 R1 响应命令,同时数据线上有 busy 信号。卡在收到这些命令后可能会变为busy,主机应该在响应中检查 busy位。
 

3.3.2.3 R2(CID,CSD 寄存器)

长度为 136bit。CID 寄存器的内容作为 CMD2 和 CMD10 的响应发送。CSD 寄存器的内容
作为 CMD9 的响应发送。只传输 CID 和 CSD 寄存器的[127:1]位,这些寄存器的第[0]位被响
应的结束位替代了。

3.3.2.4 R3(OCR 寄存器)

长度 48bit,OCR 寄存器的值作为 ACMD41 的响应发送。

3.3.2.5 R6(发布的 RCA 寄存器响应)

长度 48bit。[45:40]是响应的命令号,这里就是‘000011’,即 CMD3。参数中的 16 位MSB 用于产生 RCA 号。

3.3.2.6 R7(卡接口条件)

长度 48bit。卡支持的电压信息通过 CMD8 的响应发送。Bit[19:16]表明卡支持的电压范围。卡接受提供的电压范围就返回 R7 响应。卡会在响应的参数中返回电压范围和检查模式。

3.3.3 数据(Data)

 SD主机与SD存储卡之间的数据传输按块进行。数据块的后面总是CRC位。SD协议定义了单个和多个块操作,多块操作模式更适合大量数据的写入操作。当CMD线上出现停止命令时,多块传输终止。主机可以将数据传输配置为使用单个或多个数据线。

无论数据线的数量如何,块写入操作都使用DAT0数据线返回busy信号(见图3-4)。

1线和4线模式的数据结构如下图所示。

更多关于命令(Command),响应(Response)和数据(Data)的介绍,可参考上一篇文章。

4. SD卡功能描述

4.1 SD卡状态和操作模式

SD卡系统(主机和卡)定义了两种操作模式:

卡识别模式
重置后,SD主机将处于卡识别模式,同时在总线上查找新的SD卡,SD卡在复位后将处于此模式,直到接收到SEND_RCA(CMD3)命令。

数据传输模式
当SD卡发布RCA后,SD卡将进入数据传输模式。主机在识别总线上的所有卡之后将进入数据传输模式。

下表4-1显示了SD操作模式和SD卡状态之间的关系。SD卡中的每个状态都与一种操作模式有关系:

下表是表4-1的中文版描述。  

4.2 SD卡识别模式

在卡识别模式下,SD主机将重置所有处于卡识别模式的SD卡,验证SD卡操作电压范围,识别SD卡并要求它们发布相对卡地址(RCA)。卡识别模式下,这些操作是在每个SD卡的CMD line进行的,此时不会使用到Data line。在卡识别过程中,SD卡的时钟频率应在满足识别时钟速率fOD:小于等于400KHz。

4.2.1 卡复位

GO_IDLE_STATE(CMD0)是软复位命令,不管当前是什么状态,CMD0用于设置每张卡进入“Idle”状态。“Inactive”状态的卡不受这个命令的影响。

主机控制SD卡上电后,所有的卡进入“Idle”状态,包括“Inactive”状态的卡。

在“上电”或者“CMD0”后,所有卡的 CMD 线都是输入模式,等待下个命令的起始位(Start bit)。卡初始化的时候,会有一个默认的相对地址(RCA=0x000)和一个默认的驱动能力寄存器(包含最低速度,最高驱动电流等级等参数)。

4.2.2 操作条件确认

在SD卡初始化之前,主机可不知道SD卡支持的工作电压,卡也可能不知道是否支持当前的电压。主机会先假设 SD 卡支持某个电压,并以这个电压发送一个复位命令 CMD0。为了验证这个电压,“Physical Layer Specification V2.0”又定义了一个新的命令SEND_IF_COND(CMD8)。

CMD8用于验证 SD 卡接口操作条件。卡会通过分析 CMD8 的参数来检测操作条件的正确性。而主机会通过分析 CMD8 的响应来检查操作电压正确性。支持的电压是由参数里的 VHS 区指定的,卡会假设 VHS 里面指定的电压是当前支持的电压,每一次命令VHS 里面只有 1 位能被设置为 1。主机会通过 CRC 和检查模式来确认通信的有效性。

如果SD卡能够在当前VHS 区指定的电压下工作,则CMD8的响应会传回命令参数里设置的支持的电压和检测模式。如果SD卡不能支持当前VHS的电压,就不会发送响应,并保持在“idle”状态。

强制要求:
(1)在发送第一个 ACMD41 之前要先发送 CMD8,以便初始化高容量 SD 卡。SD 卡如果收到 CMD8,就会知道主机支持 V2.0,就可以使能新的功能。见下图4-1。

(2)低电压主机在发送 ACMD41 之前,也要发送 CMD8。如果双电压卡没有收到 CMD8,那么卡就会作为单独的高电压卡来工作,并且如果低电压主机不发送 CMD8 的话,卡在收到ACMD41 后会进入“inactive”状态。

SD_SEND_OP_COND(ACMD41)给主机一种机制用于识别和拒绝那些不匹配它期望的 VDD 范围的卡。主机通过发送需求的 VDD 电压范围来完成这个命令,这个范围作为命令的参数。不能支持指定电压范围的卡应该自动放弃后续的总线操作,并且进入“inactive”状态。

注意:ACMD41 是应用特定命令,因APP_CMD(CMD55)应该永远在 ACMD41 之前发送。“idle”状态下用于 CMD55的 RCA 寄存器应该是默认的 RCA=0x0000。

SD主机发送复位命令(CMD0)复位卡,主机应该在 ACMD41 之前发送 CMD8 重新初始化 SD 卡。


通过设置 ACMD41 的参数里面 OCR(工作电压范围)的值为 0,主机可以查询每张卡,并且确定通用电压范围,进而通知超出范围的卡进入 Inactive 状态(查询模式)。但这种查询,要求主机能够选择一个通用的电压范围或者应用得到了堆栈中的不可用卡的信息。如果ACMD41 是作为查询命令发送的,卡无法启动初始化。之后,主机可以选择一个工作电压,并重新发送 ACMD41,带着这个电压参数,这样就可以让不兼容的卡进入 Inactive 状态。

 4.2.3 SD卡初始化

卡初始化流程总结

1.SD卡上电后是处于idle状态;
2.发送CMD0,对SD卡复位;
3.发送CMD8,发送SD卡接口条件,包含了主机支持的电压信息,并询问卡是否支持。
4.等待R7响应;
 (1) 没有R7响应,此时判断为非2.0卡,即可能是1.x卡或者mmc卡;或者该卡是2.0或者2.0以后的卡但是不支持这个电压范围(只有2.0版本以后的卡才会响应CMD8,MMC卡和1.x的卡不支持该命令)。
        a.发送CMD55,等待R1响应; 
        b.若R1响应异常,则SD卡异常,表示该卡为不可用卡;
        c.若R1响应返回为1,再发送ACMD41参数HCS=0(这种情况SD卡肯定不是高容量卡,故参数HCS设置为0),等待R3响应;
        e.若R3响应异常,则SD卡异常,表示该卡为不可用卡;
           若R3响应正常,则示这是SD1.x卡,跳到步骤5;
           若没有R3响应,则确定为mmc卡(非SD卡);
 (2) R7响应异常:表示该卡为不可用SD卡,电压不兼容或者检查模式不正确;
 (3) R7响应正常,SD卡将响应R7并将参数部分原本返回给主机,此时可以判断为2.0卡或2.0以后的SD卡。
         a.发送CMD55,等待R1响应;
         b.若R1响应异常,则SD卡异常,表示该卡为不可用卡;
         c.若R1响应返回为1,再发送ACMD41参数HCS=1,告诉SD卡,主机支持SDHC,等待R3响应;
         d.若R3响应异常,则SD卡异常,表示该卡为不可用卡;
         e.若R3响应正常,返回的OCR寄存器的CCS位为1,说明SD卡是SDHC卡;若CCS位为0,说明SD卡是SDSC卡。跳到步骤5。
5.确定为SD卡后(不管是SD1.x还是SD2.0),发送CMD2,等待R2响应,取得CID;
6.发送CMD3命令,等待R6响应,获取卡RCA
7.发送CMD9命令,获取CSD;

4.3 SD卡数据传输模式

4.3.1 宽总线选择/取消

宽总线(4Bit 宽)操作模式可以通过命令 ACMD6 来选定和取消。上电或者 GO_IDLE(CMD0)命令
后,默认的总线宽度是 1Bit。如果想要改变总线宽度,需要具备下面两个条件:
a) 卡处于 transfer 状态;
b) 卡没有被锁定 (锁定的卡会认为 ACMD6 是无效命令);

4.3.2 2GB 卡

对于2GByte容量以上的SD卡,最大块长度(READ_BL_LEN=WRITE_BL_LEN)可设置为1024字节。但是对于小于等于2GByte卡,CMD16命令设置的块长度最大是512字节,对应512字节的最大块长度。

4.3.3 读数据

当没有数据传输的时候,DAT 总线电平被拉高。传输的“数据块”包含了起始位(1bit或者 4bit 低),和后面连续的数据流,数据流包含了有效数据(如果用了卡外 ECC,还有错误修正位),数据流后面是结束位(1bit 或者 4bit 高电平)。数据传输是和时钟信号同时进行的,数据传输的有效性是由 1bit 或者 4bit 的 CRC 校验值来保证。

从 SD 卡读数据的操作有可能被断电中止,即使突然断电或者移除,SD 卡都会确保数据不被损坏,但是主机发起的写操作和擦除操作时不行。如果发生BLOCK_LEN_ERROR 或者 ADDRESS_ERROR 且没有数据传输,则拒绝读命令。

块读
块读取是面向块的数据传输。数据传输的基本单位是一个块,最大为 512 Byte,当起始地址和结束地址所包含的数据量小于512时,也是可以发送的。

无论READ_BL_LEN如何,CMD16设置的块长度最多可设置为512字节。CRC被附加到每个块的末尾,以确保数据传输的完整性。

CMD17(READ_SINGLE_BLOCK)用于启动块读取,完成传输后,卡返回传输状态。
CMD18(READ_MULTIPLE_BLOCK)用于开始开始几个连续块的传输。块将被连续传输,直到发出STOP_TRANSMISSION命令(CMD12)。由于串行命令传输,停止命令具有执行延迟。数据传输在停止命令的结束位之后停止。

如果主机使用的部分块累积长度没有块对齐且不允许块不对齐,则卡应在第一个不对齐块的开始的时候检测到块没有对齐,在状态寄存器中设置ADDRESS_ERROR错误位,中止传输并在数据状态下等待停止命令。

表4-2定义了启用部分块访问时的卡行为。如果未对齐的块是命令的第一个数据块(即对命令的实际响应中报告了ADDRESS_ERROR),则不传输任何数据,并且卡仍处于Transfer状态。

SD卡单块数据读取

SD卡多块数据读取


4.3.4 写数据

数据传输格式类似于数据读取格式。对于面向块的写入数据传输,CRC校验位被添加到每个数据块。在写入操作之前,卡对每个接收到的数据块执行1或4位CRC奇偶校验。通过这种机制,可以防止错误传输的数据的写入。

如果发生BLOCK_LEN_ERROR或ADDRESS_ERROR且未执行数据传输,则拒绝写入命令。

在块写入期间,一个或多个数据块从主机传输到卡,主机在每个块的末尾附加1或4位CRC。支持块写入的卡应要求CMD16设置的块长度为512字节,即使write_BL_LEN设置为1k或2k字节。

表4-3定义了禁用部分块访问时的卡行为(WRITE_BL_partial=0)。

如果允许WRITE_BL_PARTIAL(=1),那么从 1-512Byte 都可以使用。如果CRC校验失败,卡应在DAT线上显示故障;传输的数据将被丢弃并且不被写入,并且后续传输的块将被忽略。 

 SD卡单块数据写入流程

SD卡多块数据写入流程

4.3.5 擦除

同时擦除多块写入的数据块有助于提高数据的吞吐量,这些待擦除的写入数据块的标识是通过ERASE_WR_BLK_START(CMD32),ERASE_WR_BLK_END(CMD33)命令来完成的。

主机应该遵循下面的命令序列:CMD32 - > CMD33 -> CMD38(ERASE),如果顺序不对,SD卡就会设置状态寄存器的 ERASE_SEQ_ERROR 位,并且重启整个序列。

如果收到序列外的命令(除了 SEND_STATUS),卡会设置状态寄存器的 ERASE_RESET 状态位,
重置擦除序列并执行最后一个命令。

如果擦除范围包含了写保护的部分,写保护的部分不会动,而只擦除非保护的部分,并且设置状态寄存器中的 WP_ERASE_SKIP 位。

对于块写入,卡会拉低DAT0 来表明正在进行擦除操作。真正的擦除时间可能会很长,主机可能发送 CMD7 来取消卡的选定或者使卡进入 disconnect 状态。

擦除操作后,卡上的数据为“0”或“1”,具体取决于SD卡的制造商,这个可以通过读取SCR寄存器的DATA_STAT_AFTER_ERASE (bit55)确定。

4.3.6 写保护管理

SD存储卡支持三种写保护方法。
 

机械写保护开关(仅由主机负责)

卡的侧面有一个物理滑片被用来标记卡是否被写保护。如果物理滑片的窗口打开,则表示该卡受到写保护。如果窗口关闭,则卡不受写保护。写保护开关的位置对于卡的内部逻辑电路来说是未知的。

卡内部写保护(卡的责任)

卡的数据可以被写保护,以免被擦除或者覆盖。整个卡可能被厂家或者内容提供者通过设置 CSD 的永久或临时写保护位。

密码保护卡锁定操作

见4.3.7 卡锁定/解锁操作。

4.3.7 卡锁定/解锁操作

密码保护功能使主机能够在提供密码的同时锁定卡,这个密码也可以用来解锁。密码及其大小分别保存在128位的PWD和8位的PWD_LEN寄存器中,这些寄存器是非易失性的,因此掉电不会丢失。

已经锁定的卡只会响应和执行基础命令类(class0)、ACMD41、CMD16和“锁定卡”命令类中,因此主机只能重置、初始化、选择、查询SD的状态,不能访问卡上的数据。如果先前设置了密码(PWD_LEN的值不为0),则通电后卡将自动锁定。

与现有CSD寄存器写入命令类似,锁定/解锁命令仅在“传输状态”下可用。这意味着它不包括地址参数,并且在使用之前必须已经选定卡。

卡锁定/解锁命令具有常规单块写入命令的结构和总线事务类型。传输的数据块包括命令所需的所有信息(密码设置模式、密码本身、卡锁定/解锁等)。表4-4描述了命令数据块的结构。请注意,符合SD 2.0协议的主机在发出CMD42时应将保留位(Bit7-4)设置为0。

  • 擦除:1=强行擦除。设置为 1 的时候,其他位都是 0,
  • 加锁/解锁:1=加锁卡;0=解锁卡;可以和设置密码同时发送,但不能和清除密码一起发送。
  • 清除密码:1=清除密码
  • 设置密码:1=设置新密码到 PWD
  • 密码长度:定义了后面密码的长度(单位 byte)。如果是修改密码,那么包含了新旧密码总体的长度。密码最长 16 个字节,所以这个值最大 32。
  • 密码数据:如果设置新密码,就只有新密码。如果是修改,就是旧密码+新密码。
     

主机在发送加锁/解锁命令钱,应该确定数据块的大小。数据块的长度应该大于或等于请求的加锁/解锁命令的数据结构体。
 

4.4 SD卡寄存器

SD卡接口中定义了六个寄存器:OCR、CID、CSD、RCA、DSR和SCR。这些只能通过相应的命令访问。OCR、CID、CSD和SCR寄存器携带卡/内容特定信息,而RCA和DSR寄存器是存储实际配置参数的配置寄存器。

4.4.1 OCR寄存器

OCR寄存器是一个32bit的操作条件寄存器,存储了卡支持的VDD电压描述,支持的电压如下表5-1所示,当对应的bit为0时表示SD卡不支持该电压。

Bit 31表示卡的上电状态信息位,如果卡上电完成,该位会置1,如果卡是busy状态,该位会置0。

Bit 30表示卡容量状态位(CCS),在上电完成后,读取该位可以获取卡的容量状态,若果CCS=1,则表示是高容量卡(2~32G),如果CCS=0,则表示是标准容量卡(0~2G)。

Bit 7是为双电压卡新定义的,默认设置为0。如果双电压卡没有接收到CMD8,则响应中的OCR位7指示0,并且接收到CMD 8的双电压卡将该位设置为1。

下表是中文版本: 

4.4.2 CID 寄存器

卡识别(CID)寄存器是一个 128 位的寄存器。包含了卡的识别信息,用于卡识别解析。每个读/写卡都有一个特殊的识别号。CID 寄存器的结构如下:

下表是中文版本: 

4.4.3 CSD 寄存器 

卡特定数据寄存器提供关于访问卡内容的信息。CSD 定义了卡的数据格式,错误修改类型,最大数据访问时间等参数。

4.4.3.1 CSD结构

CSD 寄存器的结构体因SD协议版本和卡容量的不同而不同。CSD 寄存器中的CSD_STRUCTURE 表明了结构体版本。表5-3显示了相关CSD结构的版本号

4.4.3.2 CSD寄存器 (CSD Version 2.0)

表5-16显示了大容量SD存储卡的CSD定义(CSD 2.0版)。以下部分介绍了大容量SD存储卡的CSD字段和相关数据类型。CSD 2.0版仅适用于大容量SD存储卡。括号中的字段名称设置为固定值,表示主机不必引用这些字段。固定值使引用这些字段的主机能够保持与CSD 1.0版的兼容性。Cell Type字段编码如下:R=可读,W(1)=一次可写,W=多次可写。

下表是中文版: 

4.4.4 RCA寄存器 

可写的 16 位卡相对地址寄存器,在卡的初始化期间,由卡向外发布的卡地址。这个地址用于卡初始化进程之后,主机同卡之间的交互寻址。默认的 RCA 寄存器值是 0x0000,这个值保留着,用来通过 CMD7 设置所有卡到 stand-by 状态。

4.4.5 DSR 寄存器(可选择)

这是一个16位驱动器级寄存器。它可以选择性地用于提高总线性能(取决于总线长度、传输速率或卡的数量等参数)。CSD寄存器携带有关DSR寄存器使用情况的信息。DSR寄存器的默认值为0x404

4.4.6 SCR 寄存器

除了CSD寄存器外,SD卡的另一个配置寄存器称为SD卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的信息。SCR寄存器的大小为64位,此寄存器由SD存储卡制造商将设置。下表介绍了SCR寄存器内容。

下面是中文版: 

下面是每个域段的介绍: 

能看到这里,你真是个狠人,相信你已经很累了吧,那就扫个码吧,让你放松一下。

  • 47
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原海青木

你的鼓励将是我创作的最大动力.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值