Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析

上传人:m**** 文档编号:489624203 上传时间:2024-02-28 格式:DOCX 页数:18 大小:138.88KB
返回 下载 相关 举报
Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析_第1页
第1页 / 共18页
Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析_第2页
第2页 / 共18页
Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析_第3页
第3页 / 共18页
Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析_第4页
第4页 / 共18页
Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析》由会员分享,可在线阅读,更多相关《Linu 下wifi 驱动开发—— SDIO接口WiFi驱动浅析(18页珍藏版)》请在金锄头文库上搜索。

1、Linux下wifi驱动开发(三) SDIO接口 WiFi驱动浅析SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议 IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO 口到无线网络之间的转换。 SDIO具有传输数据快,兼容SD、MMC接口等特点。对于SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了 wifi的功能,所以,注册的时 候还是先以sdio的卡的设备去注册的。然后检测到卡之后就要驱动他的wifi功能了,显然,他是用sdio 的协议,通过发命令和数据来控制的。下面先简单回顾一下SDIO的

2、相关知识:一、SDIO相关基础知识解析1、SDIO接口SDIO故名思义,就是SD的I/O接口(interface)的意思,不过这样解释可能还有点抽像。更具 体的说明,SD本来是记忆卡的标准,但是现在也可以把SD拿来插上一些外围接口使用,这样的技术便 是 SDIOo所以SDIO本身是一种相当单纯的技术,透过SD的I/O接脚来连接外部外围,并且透过SD上 的I/O数据接位与这些外围传输数据,而且SD协会会员也推出很完整的SDIO stack驱动程序,使得 SDIO外围(我们称为SDIO卡)的开发与应用变得相当热门。现在已经有非常多的手机或是手持装置都支持SDIO的功能(SD标准原本就是针对mobi

3、le device 而制定),而且许多SDIO外围也都被开发出来,让手机外接外围更加容易,并且开发上更有弹性(不需 要内建外围)。目前常见的SDIO外围(SDIO卡)有: Wi-Fi card (无线网络卡) CMOS sensor card (照相模块) GPS card GSM/GPRS modem card Bluetooth cardSDIO的应用将是未来嵌入式系统最重要的接口技术之一,并且也会取代目前GPIO式的SPI接口。2、SDIO总线SDIO总线 和USB总线 类似,SDIO也有两端,其中一端是HOST端,另一端是device端。所有 的通信都是由HOST端 发送 命令 开始的

4、,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:用于开始传输的命令

5、,是由HOST端发往DEVICE端的。其中命令是通过CMD信号线传 送的。b - Response:回应是DEVICE返回的HOST的命令,作为Command的回应。也是通过CMD线传送的。 c - Data:数据是双向的传送的。可以设置为1线模式,也可以设置为4线模式。数据是通过DAT0-DAT3 信号线传输的。SDIO的每次操作都是由HOST在CMD线上发起一个CMD,对于有的CMD,DEVICE需要返回 Response,有的则不需要。对于读命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当 HOST收到回应的握手信号后,会将数据放在4位的数据线上

6、,在传送数据的同时会跟随着CRC校验码。 当整个读传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响 应。对于写命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当 HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。 当整个写传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响 应。二、SDIO接口驱动前面讲到,SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了 wifi的功能,所以SDIO 接口的WiFi驱

7、动就是在wifi驱动外面套上了一个SDIO驱动的外壳,SDIO驱动仍然符合设备驱动的分层 与分离思想:设备驱动层(wifi设备)|核心层(向上向下提供接口)|主机驱动层(实现SDIO驱动)下面先分析SDIO接口驱动的实现,看几个重要的数据结构(用于核心层与主机驱动层的数据交换 处理)。用来描述卡控制器/include/linux/mmc/host.h struct mmc_hoststruct mmc_cardstruct mmc_driver用来描述卡用来描述mmc卡驱动用来描述功能设备struct sdio_funcstruct mmc_host_ops 用来描述卡控制器操作接口函数功能,

8、用于从主机控制器层向core层注册操作 函数,从而将core层与具体的主机控制器隔离。也就是说core要操作主机控制器,就用这个ops当中 给的函数指针操作,不能直接调用具体主控制器的函数。HOST层驱动分析在 前面的系列文章中Linux SD卡驱动开发(二)一一SD卡驱动分析HOST篇有 详细阐述,下面只简单回顾一下一些重要函数处理1、编写Host层驱动这里参考的是 S3C24XX 的 HOST 驱动程序 /drivers/mmc/host/s3cmci.ccpp view plain copy1 static struct platform_driver s3cmci_driver = 2

9、. driver = 3. .n ame= s3c-sdi, /名称和平台设备定义中的对应4. .owner= THIS_MODULE,5pm = s3cmci_pm_ops,6,7. id_table=s3cmci_driver_ids,8. .probe= s3cmci_probe, /平台设备探测接口函数9. remove= _devexit_p(s3cmci_remove),10. shutdown二s3cmci_shutdown,11. ;12.13. s3cmci_probe(struct platform_device *pdev)14. 15. /16. struct mmc_

10、host *mmc;17. mmc = mmc_alloc_host(sizeof(struct s3cmci_host), &pdev-dev); /分配 mmc_host 结构体18.18. /19. 21.22. /*注册中断处理函数s3cmci_irq,来处理数据收发过程引起的各种中断*/23. request_irq(host-irq, s3cmci_irq, 0, DRIVER_NAME, host) /注册中断处理函数 s3cmci_irq24.24. /*注册中断处理s3cmci_irq_cd函数,来处理热拨插引起的中断,中断触发的形式为上升沿、下降沿触发*/26 reques

11、t_irq(host-irq_cd, s3cmci_irq_cd,IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING, DRIVER_N AME, host)27.28. mmc_add_host(mmc); /initialise host hardware /向 MMC core 注册 host 驱动29. device_add(&host-class_dev); /添加设备到 mmc_bus_type 总线上的设备链表中30. mmc_start_host(host); /启动 mmc host31.31. /*MMC drivers should cal

12、l this when they detect a card has been inserted or removed 检测 sd 卡 是否插上或移除*/32. mmc_detect_change(host, 0);34.33. /*Schedule delayed work in the MMC work queue.调度延时工作队列*/34. mmc_schedule_delayed_work(&host-detect, delay);搜索host-detected得到以下信息:/drivers/mmc/core/host.ccpp view plain copy1.NIT_DELAYED

13、_WORK(&host-detect, mmc_rescan);3 mmc_rescan(struct work_struct *work)4.mmc_bus_put(host);/card从bus上移除时,释放它占有的总线空间56/*判断当前mmc host控制器是否被占用,当前mmc控制器如果被占用,那么host-claimed = 1;否则为07.*如果为1,那么会在while(1)循环中调用schedule切换出自己,当占用mmc控制器的操作完成之后,执行*mmc_release_host()的时候,会激活登记到等待队列&host-wq中的其他 程序获得mmc主控制器的使用权8 */9

14、. mmc_claim_host(host);10. mmc_rescan_try_freq(host, max(freqsi, host-f_min);11.11. static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)12. 13. 14. /*Orders important: probe SDIO, then SD, then MMC */15. if(!mmc_attach_sdio(host)16. return 0;17. if(!mmc_attach_sd(host)18. return 0;19

15、. if(!mmc_attach_mmc(host)20. return 0;21. .22. 24.23. mmc_attach_sdio(struct mmc_host *host) /匹酉己 sdio 接口卡24. mmc_attach_bus(host, &mmc_sdio_ops);27.25. /*当card与总线上的驱动匹配,就初始化card*/26. mmc_sdio_init_card(host, host-ocr, NULL, 0);27. card = mmc_alloc_card(host, NULL);/分配一个 card 结构体28. mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL); /设置 mmc_bus 的工作模式32.29. struct sdio_func *sdio_funcSDIO_MAX_FUNCS; /SDIO functions (devices)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号