Linux 下 wifi 驱动开发(三)—— SDIO 接口 WiFi 驱动浅析
SDIO-Wifi 模块是基于 SDIO 接口的符合 wifi 无线网络标准的嵌入式模块,内置无线网络协议
IEEE802.11 协议栈以及 TCP/IP 协议栈,能够实现用户主平台数据通过 SDIO 口到无线网络之间的转换。
SDIO 具有传输数据快,兼容 SD 、 MMC 接口等特点。
对于 SDIO 接口的 wifi ,首先,它是一个 sdio 的卡的设备,然后具备了 wifi 的功能,所以,注册的时
候还是先以 sdio 的卡的设备去注册的。然后检测到卡之后就要驱动他的 wifi 功能了,显然,他是用 sdio
的协议,通过发命令和数据来控制的。下面先简单回顾一下 SDIO 的相关知识:
一、 SDIO 相关基础知识解析
1、SDIO 接口
SDIO 故名思义,就是 SD 的 I/O 接口( interface ) 的意思,不过这样解释可能还有点抽像。更具
体的说明, SD 本来是记忆卡的标准,但是现在也可以把 SD 拿来插上一些外围接口使用,这样的技术便
是 SDIO 。
所以 SDIO 本身是一种相当单纯的技术,透过 SD 的 I/O 接脚来连接外部外围,并且透过 SD 上
的 I/O 数据接位与这些外围传输数据,而且 SD 协会会员也推出很完整的 SDIO stack 驱动程序,使得
SDIO 外围(我们称为 SDIO 卡 )的开发与应用变得相当热门。
现在已经有非常多的手机或是手持装置都支持 SDIO 的功能 (SD 标准原本就是针对 mobile device
而制定),而且许多 SDIO 外围也都被开发出来,让手机外接外围更加容易,并且开发上更有弹性(不需
要内建外围)。目前常见的 SDIO 外围( SDIO 卡)有:
· Wi-Fi card (无线网络卡)
· CMOS sensor card (照相模块)
· GPS card
· GSM/GPRS modem card
· Bluetooth card
SDIO 的应用将是未来嵌入式系统最重要的接口技术之一, 并且也会取代目前 GPIO 式的 SPI 接口。
2 、SDIO 总线
SDIO 总线 和 USB 总线 类似, SDIO 也有两端,其中一端是 HOST 端,另一端是 device 端。 所有
的通信都是由 HOST 端 发送 命令 开始的, Device 端只要能解析命令,就可以相互通信 。
CLK 信号 :HOST 给 DEVICE 的 时钟信号,每个时钟周期传输一个命令。
CMD 信号:双向 的信号,用于传送 命令 和 反应。
DAT0-DAT3 信号 :四条用于传送的数据线。
VDD 信号 : 电源信号。
VSS1 ,VSS2: 电源地信号。
3 、SDIO 热插拔原理
方法:设置一个 定时器检查 或 插拔中断检测
硬件:假如 GPG10 (EINT18 )用于 SD 卡检测
GPG10 为高电平 即没有插入 SD 卡
GPG10 为低电平 即插入了 SD 卡
4 、SDIO 命令
SDIO 总线上都是 HOST 端发起请求,然后 DEVICE 端回应请求。 sdio 命令由 6 个字节组成。
a -- Command: 用于开始传输的命令,是由 HOST 端发往 DEVICE 端的。其中命令是通过 CMD 信号线传
送的。
b -- Response: 回应是 DEVICE 返回的 HOST 的命令,作为 Command 的回应。也是通过 CMD 线传送的。
c -- Data: 数据是双向的传送的。可以设置