SDIO (Secure Digital input and output),安全数字输入输出接口是一种扩展SD卡接口的协议,他不仅支持传统的存储功能,还允许通过SD卡槽连接多种外设设备。可以控制MMC,SD卡,SD i/o卡。
卡时钟(SDIO_CK)每个时钟周期在命令和数据线上传输一位命令或数据。时钟频率可以在0Mhz-25Mhz.
SDIO适配器时钟(SDIOCLK):该市镇用于驱动SDIO适配器,可用于产生SDIO_CK时钟。SDIOCLK来自PLL(48Mhz)
SDIO_CK计算方式:SDIO_CK = SDIOCLK/(2+CLKDIV)
在初始化时,SDIO_CK不可以超过400Khz,初始化完成后,可以设置为最大频率。(不可超过SD卡最大频率)
1.SD卡硬件结构

SD卡:1-data3,2-cmd,3-vss,4-vdd,5-clk,6-vss,7-data0,8=data1,9-data2
TF卡(SD模式):1-data2,2-data3,3-cmd,4-vdd,5-clk,6-vss,7-data0,8-data1
TF卡(SPI模式):1-rsv,2-cs,3-di,4-vdd,5-sclk,6-vss,7-do,8-rsv

1张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分,见图 SD卡物理结构

SD卡总共有8个寄存器,用于设定或表示SD卡信息,参考下表,这些寄存器只能通过对应的命令访问, 对SD卡进行控制操作并不是像操作控制器GPIO相关寄存器那样一次读写一个寄存器的,它是通过命令来控制, SDIO定义了64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后, 根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。

1.1.身份识别类寄存器
CID
128bit:卡唯一身份证:包含厂商ID、产品名称、序列号、生产日期等,
这个 CID 寄存器有 16 字节长,如下表所示,它包含了本卡的特别识别码(ID 号)。 这些信息是在卡的生产期间被编程(烧录),主控制器不能修改它们的内容。

RCA
16bit:动态临时地址:初始化由卡随机生成,主机核准后用于多卡系统中快速寻址。
主机通过CMD2读取CID区分不同卡,通过CMD3分配RCA实现多卡切换(CMD7+RCA选中某张卡)
1.2.配置与状态类寄存器
CSD:
128 bit 卡能力说明书:定义容量,块大小,读写速度,擦除超时等操作参数。此寄存器包含了访问该卡数据时的必要配置信息。
SCR:
64bit SD卡专属配置:支持的命令集(总线宽度)
OCR:
32bit 电压与状态窗口:Bit 31= 1卡初始化完成,bit[23:0]显示支持的电压范围
初始化CMD9读取CSD卡容量
通过ACMD51读取SCR确认是否支持4线模式
1.3.实时状态类寄存器
SSR
512bit SD卡实时状态(包含写保护状态,当前总线宽度,速度模式等)
CSR
32 bit 命令执行反馈:记录最近命令的错误码(CRC失败,地址超限),通过CMD13读取
- 写数据前检查SSR的写保护位(WP_VIOLATION),避免写入被保护的卡。
- 命令失败时读取CSR定位问题(如OUT_OF_RANGE表示地址无效)
1.4.驱动控制寄存器
DSR
16bit 信号驱动强度:调节卡输出信号的驱动电流
通过CMD4配置DSR优化长距离或高干扰环境下的通信稳定性。
2.SDIO命令
SDIO总线都是HOST端发起请求,Device端回应请求,其中请求和回应种会包含数据信息:
Command:用于开始传输的命令,由Host端发往Device端的,其中命令由CMD信号线传送的;
Response:回应是Device 返回的HOST命令作为Command 的回应,也是通过CMD 线传送的;
DATA:数据是双向的传送的,可以设置1线模式,4线模式,数据通过DATA0-DATA3 信号线传输。
SDIO协议,其中包含“无数据传输的一般命令”,“有数据传输的写命令”,“有数据传输的读命令”。
2.1.无数据传输的一般命令
主机发送命令到卡在CMD线上,设备响应主机响应数据也在CMD线上。

2.2 有数据传输的写命令
写数据的传输是分块进行的。数据块后面总是跟着CRC位。定义了单块和多块操作。多块操作模式更适合更快的写入操作。当CMD线路上出现停止命令时,多块传输终止。主机可以将数据传输配置为使用单条或多条数据线
SDIO 数据块写操作

SDIO连续写操作

2.3.有数据传输的读命令
SDIO数据块读操作

当有Busy(繁忙)信号时, SDIO(SDIO_D0被拉低)将不会发送任何数据。
SDIO连续读操作:

3.SDIO功能描述
SDIO包含2个部分:
3.1SDIO适配器模块
:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的传送。
AHB总线接口:操作SDIO适配器模块中的寄存器,并产生中断和DMA请求信号。

复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。
SDIO_D0 单独使用:单线模式(兼容SPI模式,贷款最低)。
SDIO_D[3:0]四线使用:4位并行模式(SDIO协议标准,带宽提升4倍)。
SDIO适配器是多媒体/加密数字存储卡总线的主设备,用于连接一组多媒体卡或加密数字存储卡,包含以下5个部分:
适配器寄存器模块
3.1.1 控制单元
包含电源管理功能和为存储器卡提供的时钟分频。共有三种电源阶段:电源关闭,电源启动,电源开,时钟管理子单元产生和控制SDIO_CK信号。 SDIO_CK输出可以使用时钟分频或时钟旁路模式。电源关闭和电源启动阶段,电源管理子单元会关闭卡总线上的输出信号。

3.1.2 命令通道
命令通道单元向卡发送命令并从卡接收响应。当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机(CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志

在时钟控制寄存器中可以配置卡的数据总线宽度。如果选择了
4位总线模式,则每个时钟周期四条数据信号线(SDIO_D[3:0])上将传输4位数据;如果选择了
8位总线模式,则每个时钟周期八条数据信号线(SDIO_D[7:0])上将传输8位数据;如果没有选择宽总线模式,则每个时钟周期只在SDIO_D0上传输
1位数据。
发送: DPSM进入Wait_S状态。如果发送FIFO中有数据,则DPSM进入发送状态,同时数据通道子单元开始向卡发送数据。
接收: DPSM进入Wait_R状态并等待开始位;当收到开始位时, DPSM进入接收状态,同时数据通道子单元开始从卡接收数据。
数据通道状态机(DPSM)
DPSM工作在SDIO_CK频率,卡总线信号与SDIO_CK的上升沿同步。 DPSM有6个状态

数据FIFO
适配器寄存器和FIFO使用AHB总线一侧的时钟(HCLK/2),控制单元、命令通道和数据通道使用SDIO适配器一侧的时钟(SDIOCLK)。

3.1.3 数据通道
数据通道子单元在主机与卡之间传输数据。下图是数据通道的框图。

4.命令格式
SD命令是一个6字节组成的命令包
起始位(1bit):固定为0 标志帧开始,同步时钟
传输标志(1bit):指示数据传输方向(1:主机发送命令,0:卡返回响应)
命令+地址(6+32位):
Command Index (6bit) + Argument (32bit) Command Index:如CMD0(0x00)复位、CMD17(0x11)读单块,Argument:地址或参数(如扇区号)。
CRC7校验(7位)
CRC7校验码
终止位(1,1位):
标志帧结束。

命令:命令是用于开始一项操作,主机向一个指定的卡或所有的卡发出带地址的命令或广播命令(广播命令知识和在MMC V3.31或之前的版本)。命令在CMD线上串行传送。所有命令的长度固定48位。

响应:响应是由一个被指定地址的卡发送到主机(对于MMCV3.31以前的卡同时发送响应;响应是对先前接受的命令的一个应答)
SDIO支持两种响应类型,都有CRC错误检测
短响应

长响应格式








响应数据:





6.SD卡的操作模式
SD卡系统(包括主机和SD卡)定义了两种操作模式:卡识别模式和数据传输模式。在系统复位后,主机处于卡识别模式, 寻找总线上可用的SDIO设备;同时,SD卡也处于卡识别模式,直到被主机识别到,即当SD卡接收到SEND_RCA(CMD3)命令后, SD卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。
6.1 卡识别模式
在卡识别模式下,主机会复位所有处于“卡识别模式”的SD卡,确认其工作电压范围,识别SD卡类型, 并且获取SD卡的相对地址(卡相对地址较短,便于寻址)。在卡识别过程中,要求SD卡工作在识别时钟频率FOD的状态下
SD卡初始化阶段:
6.1.1. CMD0 go_idle_status
发送
CMD0 (0x00000000)
,强制卡进入空闲状态

6.1.2.CMD8 send_if_cond

发送
CMD8 (0x000001AA)
,参数包含支持的电压范围(
有效响应为
R7
,包含电压信息
主机发送的指令帧:
start :
通信帧起始标志
DIR:Host
方向标识,表示当前帧由主机
cmd:SEND_IF_COND 指令码CMD8的别名,用于检测卡支持的电压范围(2.7-3.6V)和协议版本。
ARG:0x000001AA • Bit[7:0] = 0xAA(检查模式,卡需原样返回此值)
• Bit[11:8] = 0x1(请求2.7-3.6V电压)。
CRC:0x43
End
从机的响应帧:
Start D:响应起始位(对应表格中的起始位=0)。
- R7 - 8:可能表示R7响应的数据长度(8字节)或信号分段。
- ARG::0x000001AA:
- 对应表格中的接收电压([19:16])和检测模式([15:8])字段,具体值需转换为二进制分析。
- 包含设备支持的电压和回显校验值:
-
0x1AA
→
000110101010
-
0001
([11:8]):电压范围(2.7-3.6V)
-
10101010
([7:0]):回显主机的检查模式(固定值
0xAA
)
- CRC:0x09:响应数据的CRC校验值(对应表格中的CRC7字段)。
- E:终止位(对应表格中的终止位=1)

6.1.3. AMD 0x55 app_cmd

主机发送的指令帧:

从机的响应帧:

状态验证(R1响应): ARG:0x00000120 的二进制 0000000000000000000100100000 中: bit8=1:设备