2024年3月28日发(作者:)

(1) Wifi卡的常用接口有:

–CF 接口

–USB接口

–SDIO接口

–SPI接口

–PCMCIA接口

很多时候,同一个wifi卡同时支持多种接口,譬如marvell的8686的wifi卡,既支持spi

接口,也支持sdio接口.

(2) SD卡与SDIO卡的异同

卡使用的是SD卡协议,而SDIO卡使用的是SDIO协议;协议不一样,初始化/读写

方式都不一样

1600控制器既支持SD卡也支持SDIO卡,在驱动上完全可以做到同一个卡槽既支

持SD卡也支持SDIO卡,甚至combo卡,因此在驱动上有个判断过程,判断插进来的是SD

卡还是SDIO卡

3.两者的引脚定义不一样,尽管引脚个数都一样

(3)

•SDIO协议

–相对于SD协议,SDIO协议特有的命令有:cmd5,cmd52,cmd53

–cmd5命令相当于SD卡协议中的acmd41,用于匹配SDIO卡的电压

–对于SDIO卡中的单个寄存器的读写一般都使用cmd52命令,而对于多字节数据的读写则

用cmd53命令。

–cmd53分字节和块传输模式

对于字节传输模式相当于SD协议的单块读写(cmd17,cmd24)

对于块传输模式相当于SD协议的块读写(cmd18,cmd25)

(4)

•Cmd53

–对于字节传输模式,它可以是1~512之间的任意长度的传输,而不是固定长度

–对于块传输模式,首先它的块长度可以人为设定,但不能超过规定的最大块长度

–相对于SD卡中的块传输模式,在最后一个块传输末尾,是不需要发送块停止命令的

(cmd12)

--每个SDIO卡都由1~7个function (optional)和一个memory function(mandatory)组

•什么是function ?

–所谓function,就是一个I/O设备,它实质就是一些寄存器的集合

(5) SDIO卡里function的组织分布

•CIA就是function0,也就是memory function,它每个SDIO卡所必须具有的,它里面包

含了如下一些重要信息:

–SDIO协议的版本号,BUS MOD,块大小等。这些信息有些是只读的,有些是可读可写的

•Function1~7是可选的,根据具体的应用的不同,所包含的function数目也不一样,譬如

我门使用的marvell的8686芯片,它就只有function0和function1

(6)sdio 1~4bit mode

PIN SDIO 4-BIT MODE

1 CD/DAT3 Data line 3

2 CMD Command line

3 VSS1 Ground

4 VDD Supply voltage

5 CLK Clock

6 VSS2 Ground

7 DAT[0] Data line 0

8 DAT[1] Data line1 or INT line

9 DAT[2] Data line2 or read wait

mode 同样也有1bit和4bit 总线模式

SDIO 1-BIT MODE

N/C Not used

CMD Command line

VSS1 Ground

VDD Supply voltage

CLK Clock

VSS2 Ground

DATA Data line

IRQ Interruption

RW Read wait

与SDIO卡的引脚的一个最大的区别是:SDIO有个中断引脚DAT[1],在4bit模式下,

DAT[1]既做数据线,又做中断线,因此是分时复用的,在总线发送命令期间,DAT[1]用作

中断线。

(7)SD

PIN

1

2

3

4

5

6

7

8

SD MODE

Name

CD/DATA3

CMD

Vss1

VDD

Vss2

DAT0

DAT1

Type

I/O/PP

Pp

S

S

S

I/O/PP

I/O/PP

Description

Card detect/data line3

Command/response

Ground

Supply voltage

Ground

Data line0

Data line1

9 DAT2 I/O/PP Data line2

•当HOST同时连接多个卡时:

–时钟,电源,地线可以为每个卡公共

–但每个卡都有自己单独的数据和命令总线,避免干扰

–在卡的初始化过程中,命令是单独发到每个卡的,允许驱动来检测每个卡槽的卡是否存在,

并且分配相应的逻辑地址给每个卡槽。

–HOST与每个卡槽的卡的数据传输都是单独进行的,因为每个卡槽都有自己的数据总线

–在卡的初始化完成后,命令可以同时发送到每个卡槽,因为此时命令中已经包含了卡的逻

辑地址(在卡的分别初始化时分配的)

(8)SD卡与SDIO卡的检测判别

–上电,发送CMD5命令,如果有响应,并且响应中的MP位为0,说明对应卡槽中的卡为

SDIO卡,进而开始SDIO卡的初始化流程

–如果发送CMD5命令没有响应,则说明对应卡槽的卡为SD或MMC卡,进而开始SD/MMC

卡的初始化流程

–如果发送CMD5命令,有响应,且响应中的MP位为1,说明这个卡不但是SDIO卡,同

时也时SD卡,也就是所谓的combo卡,则进行combo卡的初始化流程

(9)目前linux下,已支持的wifi卡有如下厂家的卡:

–Marvell 8385 and Marvell 8686

–Intersil公司 Prism54 chips series

–Intel IWL4965 and IWL3945

–Atheros corporation 5xxx chipset

–Broadcom(博通)43xx

–Ralink(雷凌)RT2x00

•Linux下已经支持了市面上的大多数wifi卡的驱动

•每种wifi卡都是需要固件(firmware)才能驱动的,并且同一种卡工作在不同接口时对应

的firmware是不一样的

•需要注意的是:很多firmware都是要花钱的

•固件通过其驱动下载到无线卡中,才能驱动起来

(10)wifi驱动的通用的软件架构

1. 分为两部分,上面为主机端驱动,下面是我们之前所说的firmware

2. 其中固件部分的主要工作是:因为天线接受和发送回来的都是802.11帧的帧,而主机接

受和传送出来的数据都必须是802.3的帧,所以必须由firmware来负责802.3的帧和802.11

帧之间的转换,

3. 当天线收到数据,并被firmware处理好后会放在一个buffer里,并产生一个中断,主机

在收到中断后就去读这个buffer。