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为低的情况下,不能执行除CMD5CMD0外的操作。如果卡上有SD内存(组合卡),该内存应正常响应所有强制性内存命令。仅支持I/O的卡不会响应ACMD41命令,主机应该放弃并禁用这张卡。

因此,不支持I/O的主机不会从I/O卡获得任何响应,从而将其迫使进入非活动状态。不支持I/O的主机与I/O卡的操作如下图所示,实线表示实际路径,虚线表示未执行的路径。

在这里插入图片描述

3.2 由支持I/O的主机初始化

对于支持SDIO的主机,在执行CMD55/ACMD41命令之前,会发送CMD5命令,从而在CMD5R4响应中获得有效的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-IS18A始终为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=0CMD5来启动初始化序列。

组合卡可以接受带有RCA(相对卡地址)=0000CMD15,如物理层规范所述,但仅内存卡有一个例外。仅内存卡在主机发出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 = 1Number 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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐