文章目录
- 1 标准/非标准SDIO规范
- 2 SDIO引脚定义
- 3 SDIO初始化流程
- 3.1 由不支持I/O的主机初始化
- 3.2 由支持I/O的主机初始化
- 3.3 CMD5(IO_SEND_OP_COND)
- 3.4 R4(CMD5的回复)
- 4 总结
1 标准/非标准SDIO规范
如下图所示,SDIO总线规范由物理层规范和SDIO规范定义。组合卡(包含存储和其它功能,如WIFI/蓝牙等)的存储部分由物理层规范指定。有两种SDIO功能规范:标准SDIO规范和非标准SDIO规范。
(1)标准SDIO规范:如相机、蓝牙卡和GPS接收器,具有标准的寄存器接口、共同的操作方法和标准的CIS(Container Interface Specification
)扩展。通过为特定功能定义标准的寄存器接口。
(2)非标准SDIO规范:SD卡厂商可以选择遵循标准SDIO规范,也可以不遵守。若不遵守,则设备制造商需要提供相关驱动程序。
2 SDIO引脚定义
1、SDIO卡类型
本规范定义了两种类型的SDIO卡。
(1)全速
支持SPI,1位SD和4位SD传输模式,时钟范围为0-25MHz,数据传输速率超过100Mb/s
(2)低速
该卡仅有SPI和1位SD传输模式,4位支持是可选的。低速SDIO卡应支持0-400 KHz的时钟范围。低速卡的预期用途是在使用较少引脚的情况下支持低速I/O功能,如调制解调器,条形码扫描器,GPS接收器等。
2、SDIO卡模式
SD卡的三种总线模式也适用于SDIO卡:
- SPI模式(强制,SDIO 2.0规范开始不强制要求支持SPI)
- 1位SD数据传输模式(强制)
- 4位SD数据传输模式(高速卡强制,低速可选)
如下是SD主机与两个4位SDIO卡的连接引脚图:
3 SDIO初始化流程
3.1 由不支持I/O的主机初始化
SDIO规范要求SDIO卡插入时不应导致不支持I/O的主机出现故障。为了防止在不支持I/O的主机上执行I/O功能,需要更改SD卡识别模式流程图。为了通过I/O感知主机进行SDIO初始化,添加了一个新的命令IO_SEND_OP_COND
(CMD5
)来替代ACMD41
指令。
在复位或上电后,卡上的所有I/O功能都被禁用,卡的I/O在CS为低的情况下,不能执行除CMD5
或CMD0
外的操作。如果卡上有SD内存(组合卡),该内存应正常响应所有强制性内存命令。仅支持I/O的卡不会响应ACMD41命令,主机应该放弃并禁用这张卡。
因此,不支持I/O的主机不会从I/O卡获得任何响应,从而将其迫使进入非活动状态。不支持I/O的主机与I/O卡的操作如下图所示,实线表示实际路径,虚线表示未执行的路径。
3.2 由支持I/O的主机初始化
对于支持SDIO的主机,在执行CMD55
/ACMD41
命令之前,会发送CMD5
命令,从而在CMD5
的R4
响应中获得有效的OCR
(操作条件寄存器),并继续初始化SDIO卡。下图展示了在SD模式下操作的SDIO感知主机的运行过程。
- SPI模式下操作SDIO感知主机的运行过程请参考手册
如果卡的I/O部分没有收到CMD5
命令,I/O部分将保持不活动状态,不会对除CMD5
之外的任何命令作出响应。组合卡将保持在仅内存模式。如果卡上没有SD内存,则卡不会对任何内存命令作出响应。如果支持I/O的主机向卡发送CMD5
,卡将以R4
响应的形式作出响应。主机然后读取R4的值,并了解可用的I/O功能数量以及是否存在任何SD内存。
支持UHS-I的主机在CMD5
的参数中将S18R
设置为1,以请求信号电压变更为1.8V。如果卡支持UHS-I
且当前的信号电压为3.3V,R4
响应中将设置S18A
为1。如果信号电压已经为1.8V,则卡将设置S18A
为0,以使主机保持当前的信号电压。UHS-I
支持SD模式,而SPI模式不支持UHS-I
,S18A
始终为0。
主机在初始化卡的I/O部分后,通过发出读取命令,从I/O功能0的地址00h开始,读取卡的通用信息区域(CIA
)。CIA
包含卡通用控制寄存器(CCCR
)和功能基本寄存器(FBR
)。CIA
还包括指向卡的通用卡信息结构(CIS
)和每个个别功能的CIS
的指针。CIS
包括有关电源、功能、制造商和主机需要确定I/O功能是否适合上电的其他信息。如果主机确定卡应该被激活,CCCR
区域中的寄存器启用卡和每个个别功能。此时,I/O卡的所有功能都可以完全使用。此外,主机可以逐个功能控制功耗和启用/禁用中断。这种对I/O的访问不会干扰对卡的内存访问(如果存在)。
当接收到参数为0的CMD5
时,SDIO卡会返回R4
响应,但不会启动I/O功能的初始化。Version 3.00的SDIO卡应该通过接收不等待WV=0
的CMD5
来启动初始化序列。
组合卡可以接受带有RCA(相对卡地址)=0000
的CMD15
,如物理层规范所述,但仅内存卡有一个例外。仅内存卡在主机发出CMD15
之前需要一个非零的RCA
。因此,在ACMD41
的情况下,它应该接受RCA=0000h
。
3.3 CMD5(IO_SEND_OP_COND)
下图显示了IO_SEND_OP_COND
命令(CMD5
)的格式。对于SDIO卡,CMD5
的功能类似于ACMD41
对于SD内存卡的操作。它用于查询I/O卡所需的电压范围。CMD5
的正常响应是R4
,SD或SPI格式各不相同。
SDIO 2.00版本的卡应支持操作电压范围为2.7-3.6V,不需要支持2.0-2.7V的电压范围进行基本通信。支持SDIO 2.00版本的主机不能使用2.0-2.7V的电压范围进行基本通信。
3.4 R4(CMD5的回复)
SDIO卡在接收CMD5命令后,应该用SDIO独有的响应R4进行回应。R4的格式适用于SD和SPI模式,如下:
一旦SDIO卡接收到CMD5
,该卡的I/O部分将被启用,以正常响应所有后续命令。这种I/O启用状态将一直保持,直到卡接收到重置、电源循环或CMD52
写入I/O复位的命令。
注意,仅支持SD内存的卡可能会响应·CMD5·。仅内存卡的适当响应应为Memory Present = 1
和Number of I/O Functions = 0
。SD内存卡将CMD5
视为非法命令,不予响应。需要注意的是,与类似的内存命令ACMD41
不同,CMD5
的SPI响应包含了卡中的OCR
值。
I/O感知主机将发送CMD5
。如果卡在物理层规范中定义的Ncr
超时值内以R4
响应,主机将根据R4
中包含的数据确定卡的配置。
4 总结
本文对SDIO的协议和初始化流程做了一个大致的介绍,实际上对于SDIO协议还增加了几个特定的命令,与SD协议也有一定的区别,详细参考:SDIO Simplified Specification Version 3.00。