SDIO的全称是安全数字输入/输出接口,一般都是用来SD卡,SD I/O 卡,MMC卡进行通讯。
SDIO总线拥有9根线,一个CLK时钟线,四条DATA双向数据线,一条双向指令线CMD,
VDD,VSS1,VSS2电源和地信号线。
SCL线: 时钟信号由主机产生,主机通过时钟线的一个时钟周期,与从机的数据和指令线进行同步传输,时钟以上升沿为有效
CMD线: 主机通过CMD卡给SD卡发送指令,SD卡接收到指令后如果主机要求SD提供应答,SD卡通过CMD线返回应答信息。
DATA0-3线: 主机通过该线进行与SD卡进行数据读/写,SD卡可以将DATA0拉低表示此时SD卡位忙状态。
VDD.VSS1-2: 电源和地信号线。
SD卡操作过程会以两种不同的时钟进行数据通过,一种为FOD时钟频率,最高为400KHz,用来识别卡阶段。另一种为数据传输模式下时钟频率FPP,默认最高为25MHz,用来数据传输。时钟的配置由STM32专门寄存器配置
拥有8个寄存器,由于设定表示SD卡的信息,这些寄存器只能通过对应的命令进行访问,SDIO定义了64个命令,每个命令都有特殊的意义,可以实现某一特定功能
OCR寄存器:32 bit宽度的操作条件寄存器(OCR)存储了卡的VDD 电压描述。
CID寄存器:125bit宽度 卡的识别号,用来识别卡的个体号码(唯一的)
RCA寄存器: 16bit宽度 给卡的进行分配相对地址,缩短ID号的长度,为每张卡进行标号。
DSR寄存器 : 16bit宽度 是可选的,可以用来在扩展操作条件中,提高
总线性能(受总线长度,传输速率和卡数目的影响)。
SCR寄存器:64bit宽度 作为CSD 寄存器的补充,另一个配置寄存器称为SD 卡配置寄存器(SCR)
SD卡的传输数据过程:
指令:主机向SD卡发送48bit指令包分别为:起始位1bit,方向位1bit和指令+地址信息/参数6+32bit和CRC检验7bit和终止位1bit。
数据:主机向SD卡发送读/写指令,SD卡会返回应答信息,然后会以数据块+crc写/读此时SD卡会返回忙状态(如果是读的话,SD卡不会返回忙状态)告诉主机此时忙,不可继续写/读。主机可控制使用单线传输还是4线传输。(以块的形式,有单块或者多块,两种传输的命令是不一样的,如果多块写/读,主机需要发送停止写/读指令)
SD卡的数据包传输形式:
当主机选择以4数据线进行传输时,每次传输4Bit数据,每个数据线都会有起始位,终止位,CRC位,CRC位会对每个数据线进行检查,并把检查结果汇总返然后在数据传输完后通过DATA0线返回给主机。
SD卡数据包有两种常规:
数据8bit宽度:会以低字节开始发送再发高字节,每个字节都会先发送高位,然后在发送低位。
数据包格式: 主机通过CMD线给SSR寄存器发送指令,然后通过数据线给SSR寄存器发送数据,会以512bit的形式发送/接收,如图所示
SD卡的指令类型
bc 无响应广播命令 主机发送给所有的SD卡,不返回任务应答
bcr 带响应广播命令 主机发送给所有的SD卡,同时返回所有卡的应答信息
ac 寻址命令 发送给SD卡 选定的某一张卡,DATA线无数据传输
adtc 寻址数据传输命令 发送给SD卡选定的某一张卡,DATA线有数据传输
SD卡的响应结构(SD卡返回)
R1 :正常响应命令 起始位1bit+传位1bit+命令号6bit+卡状态32bit+CRC位7bit+终止位1bit
R2 :CID,CSD寄存器 起始位1bit+传输位1bit+保留[133:128]6bit+CID/CSD寄存器值127bit+终止位1bit
R3 :OCR寄存器 起始位1bit+传输位1bit+保留[45:40]6bit+OCR寄存器32bit+CRC位7bit+终止位1bit
R6 :RCA寄存器 起始位1bit+传输位1bit+CMD3指令6bit+RCA寄存器的值16bit+SD卡状态16bit+CRC位7bit+终止位1bit
R7: RCA寄存器(SD卡内部的电压信息) 起始位1bit+传输位1bit+CMD8指令6bit+保留[39:20]20bit+接收电压4bit+检测模式8bit+ CRC位7bit+终止位1bit
SDIO主机的指令写/读流程
发送:当主机需要发送指令时,会控制SDIO把CMD寄存器里存放的指令和数据发送给移位寄存器,然后移位寄存器一位一位的发出到每个数据都会经过CRC校验发出到SD卡,此时主机通过控制单元会是写状态 。发送完后主机会检查状态标志位,看是否发送完成。
接收:当主机需要接收数据时,数据从SDIO_CMD线进入到移位寄存器,然后移位寄存器会一位一位的发送到响应寄存器,会把接收到的数据分别放好位置,然后主机可以通过AHB总线读取响应寄存器读取数据。
SDIO主机的数据写/读流程
发送:当主机需要发送数据时,会通过指令单元发送写指令,发送完后会把数据放到FIFO,然后FIFO会把数据搬运到移位寄存器,然后移位寄存器会一位一位的发出,每个数据位都会经过CRC校验发出,此时主机状态为写状态,发送完后主机会检查状态标志位,看是否发送完成。
接收:当主机需要接收数据时,会通过指令单元发送读指令,发送指令后,SD卡会通过SDIO_DATA0-3线发送给主机,主机接收到数据后会把数据放到移位寄存器,然后通过移位寄存器一位一位的发送FIFO,然后主机通过FIFO读取到数据。
FIFO:数据存储缓冲器