SDIO 接口
简介
SDIO(SecureDigital I/O)故名思义,就是 SD 的 I/O 接口(interface)的意思。SD 本来是记忆卡的接口标准,但是现在也可以使用该接口连接其他外围设备,这样的技术便是 SDIO。
因此,现在的 SDIO 就是一种相当单纯的技术,通过 SD 的 I/O 引脚来连接外围设备,并且通过 SD 上的 I/O 数据线与这些外围设备传输数据。而且 SD 协会会员也推出很完整的 SDIO stack 驱动程序,使得 SDIO 外围(我们称为 SDIO 卡)的开发与应用变得相当热门。目前常见的 SDIO 外围(SDIO 卡)有:
- Wi-Fi card(无线网络卡)
- CMOS sensor card(照相模块)
- GPS card
- GSM/GPRS modem card
- Bluetooth card
- Radio/TV card(很好玩)
SDIO 的应用将是未来嵌入式系统最重要的接口技术之一,有取代目前 GPIO 式的 SPI 接口的可能。
总线连接
SDIO 总线和 USB 总线类似,SDIO 总线也有两端,其中一端是主机(Host)端,另一端是设备端(Device)。采用Host-Device(主从模式)这样的设计是为了简化 Device 的设计,所有的通信都是由 Host 端发出命令开始的。在 Device 端只要能解析 Host 的命令,就可以同 Host 进行通信了,SDIO 的 Host 可以连接多个 Device(一主多从)。
SDIO 主机和设备端的连接方式如下图所示(连接了两个 SDIO 卡):
传输模式
SD 传输模式有以下 3 种:
- SPI mode(required)
- 1-bit mode
- 4-bit mode
SDIO 同样也支持以上 3 种传输模式。依据 SD 标准,所有的 SD(记忆卡)与 SDIO(外围)都必须支持 SPI mode,因此 SPI mode 是「required」。此外,早期的 MMC 卡(使用 SPI 传输)也能接到 SD 插糟(SD slot),并且使用 SPI mode 或 1-bit mode 来读取。
在 SPI 模式中,第 8 脚位被当成中断信号。其它脚位的功能和通信协定与 SD 记忆卡的标准规范一样。在 SDIO 总线定义中,DAT1 信号线复用为中断线。在 SDIO 的 1BIT 模式下 DAT0 用来传输数据,DAT1 用作中断线。在 SDIO 的 4BIT 模式下 DAT0-DAT3 用来传输数据,其中 DAT1 复用作中断线。
SDIO 的每个脚位在不同信号模式下的定义如下图:
协议标准
SDIO1.0 标准定义了两种类型的 SDIO 卡:
- 全速的 SDIO 卡,传输率可以超过 100Mbps;
- 低速的 SDIO 卡,支援的时脉速率在 0 至 400KHz 之间。
SDIO 协议是由 SD 卡的协议演化升级而来的,很多地方保留了 SD 卡的读写协议,同时 SDIO 协议又在 SD 卡协议之上添加了 CMD52 和 CMD53 命令。由于这个,SDIO 和 SD卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开支来支持低速 I/O 能力。低速卡支持类似调制解调器,条形码扫描仪和 GPS 接收器等应用。高速卡支持网卡,电视卡以及组合卡等。组合卡指的是存储器+SDIO,对组合卡来操作需要全速和 4BIT 的传输模式,这是 SDIO1.0 标准规定的。
SDIO 命令
SDIO 总线上都是 Host 端发起请求,然后 Device 端回应请求,其中请求和回应中会包含数据信息:
- Command: 用于开始传输的命令,是由 Host 端发往 Device 端的,其中命令是通过 CMD 信号线传送的;
- Response: 回应是 Device 返回的 Host 命令作为 Command 的回应。也是通过 CMD 线传送的;
- Data: 数据是双向的传送的。可以设置为 1 线模式,也可以设置为 4 线模式。数据是通过 DAT0-DAT3 信号线传输的。
SDIO 的每次操作都是由 Host 在 CMD 线上发起一个 CMD,对于有的 CMD,Device 需要返回 Response,有的则不需要。
对于读命令,首先 Host 会向 Device 发送命令,紧接着 Device 会返回一个握手信号,此时,当 Host 收到回应的握手信号后,会将数据放在 4 位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个读传送完毕后,Host 会再次发送一个命令,通知 Device 操作完毕,Device 同时会返回一个响应。
对于写命令,首先 Host 会向 Device 发送命令,紧接着 Device 会返回一个握手信号,此时,当 Host 收到回应的握手信号后,会将数据放在 4 位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个写传送完毕后,Host 会再次发送一个命令,通知 Device 操作完毕,Device 同时会返回一个响应。