一、WiFi 介绍
WiFi 又称“无线热点”或“无线网络”,是 Wi-Fi 联盟的商标,一个基于 IEEE 802.11 标准的无线局域网技术。WiFi 支持的接口有 UART, USB, SDIO, PCIE,它们的传输速率分别由低到高排序,可以应用到不同的场景中。
WiFi 网卡有两种工作模式:
① 一种是无线终端模式 (STA),也就是手机日常使用的模式,通过该模式连接网络上网;
② 一种是无线热点模式 (AP),也就是手机的个人热点模式,通过该模式提供热点供其它设备上网;
二、SDIO 接口介绍
SDIO 就是 SD 的 I/O 接口(interface)的意思,它是在 SD 内存卡接口的基础上发展起来的接口,SDIO 接口兼容以前的 SD 内存卡,并且可以连接 SDIO 接口的设备。
SDIO1.0 标准定义了两种类型的 SDIO 卡:
1. 全速的 SDIO 卡,传输率可以超过 100Mbps;
2. 低速的 SDIO 卡,支援的时脉速率在 0 至 400KHz 之间。
SDIO 协议是由 SD卡的协议演化升级而来的,很多地方保留了 SD 卡的读写协议,同时 SDIO 协议又在 SD 卡协议之上添加了 CMD52 和 CMD 53 命令。由于这个,SDIO 和 SD 卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开支来支持低速 I/O 能力。低速卡支持类似调制解调器,条形码扫描仪和 GPS 接收器等应用。高速卡支持网卡,电视卡以及组合卡等。组合卡指的是存储器+SDIO,对组合卡来操作需要全速和 4BIT 的传输模式,这是 SDIO1.0 标准规定的。
SDIO 通过 SD 的 I/O 管脚来连接外部的外围 DEVICE 并传输数据。这些外围设备,我们称为 SDIO 卡,常见的有:
三、SDIO 总线
SDIO 总线和 USB 总线类似,SDIO 总线也有两端,其中一端是主机(HOST)端,另一端是设备端(DEVICE),采用 HOST- DEVICE 这样的设计是为了简化 DEVICE 的设计,所有的通信都是由 HOST 端发出命令开始的。在 DEVICE 端只要能解析 HOST 的命令,就可以同 HOST 进行通信了,SDIO 的 HOST 可以连接多个 DEVICE。
SD/SDIO 的传输模式分为三种
spi mode ——(标准的 spi 模式)
1-bit mode —— cmd line、 data line、clk line、irq Line
4-bit mode ——1 cmd line 、3 data line、clk
SDIO 的每个脚位在不同信号模式下的定义如下图:
四、SDIO 的命令与响应
SDIO 总线上都是 HOST 端发起请求,然后 DEVICE 端回应请求。
Command:用于开始传输的命令,是由 HOST 端发往 DEVICE 端的。其中命令是通过 CMD 信号线传送的。
Response:回应是 DEVICE 返回的 HOST 的命令,作为 Command 的回应。也是通过 CMD 线传送的。
Data:数据是双向的传送的。可以设置为 1 线模式,也可以设置为 4 线模式。数据是通过DAT0-DAT3 信号线传输的。
SDIO 命令为:6 字节,48bit
对于读命令:首先 HOST 会向 DEVICE 发送命令,紧接着 DEVICE 会返回一个握手信号,此时,当 HOST 收到回应的握手信号后,DEVICE会将数据放在 4 位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个读传送完毕后,HOST 会再次发送一个命令,通知 DEVICE 操作完毕,DEVICE 同时会返回一个响应。
从机在收到主机相关命令后,开始发送数据块给主机,所有数据块都带 CRC 校验(由硬件自动处理),单个数据块读的时候,在收到 1 个数据块以后即可以停止了,不需要发送停止命令(CMD12)。但是多块数据读的时候,SDIO 卡将一直发送数据给主机,直到接到主机发送的 STOP 命令(CMD12)。
对于写命令:首先 HOST 会向 DEVICE 发送命令,紧接着 DEVICE 会返回一个握手信号,此时,当HOST 收到回应的握手信号后,会将数据放在 4 位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个写传送完毕后,HOST 会再次发送一个命令,通知 DEVICE 操作完毕,DEVICE 同时会返回一个响应。
数据块写操作同数据块读操作基本类似,只是数据块写的时候,多了一个繁忙判断,新的数据块必须在 SDIO 卡非繁忙的时候发送。这里的繁忙信号由 SDIO 卡拉低 SDIO_D0,以表示繁忙,SDIO 硬件自动控制,不需要我们软件处理
SDIO 卡的初始化流程:
(1)发送 CMD52 复位 SDIO 卡
(2)发送 CMD0 使卡进入 IDLE 状态
(3)发送 CMD8 获取该卡所支持的电压值(3.3v or 1.8v)
(4)发送 CMD5 读取 OCR 寄存器
(5)发送 CMD3 获取设备的从地址
(6)发送 CMD7 选中相应从地址的卡
(7)发送 CMD52 设置4位数据传输模式
详细的 SDIO 卡初始化过程的函数调用可参考我的另一篇文章《SDIO WiFi 之设备初始化流程分析》
评论