WiFi模块可以封装成多种不同的接口,如SDIO、PCIe。SDIO接口的WiFi也是最常见的一种。SDIO接口最先被应用在存储卡上,后来其命令模式衍生到摄像头、WiFi等设备上。SDIO接口协议作是一种应用广泛的接口协议,其功能被集成在linux 的driver/mmc目录下,其中core目录封装了sdio的协议框架,定义接口。host目录则为具体的产品设备用到的接口函数的实现。现具体的分析SDIO总线通信原理:SDIO总线 和 USB总线 类似,SDIO也有两端。当中一端是HOST端,还有一端是device端。通信时HOST端驱动时钟线发送命令,Device端需要解析命令并给出应答,从而实现互相通信。通信总线:
CLK信号:HOST给DEVICE的 时钟信号,每个时钟周期传输一个命令或数据位 。
CMD信号:命令在 CMD 线上串行传输,是双向半双工的(命令从主机到从卡,而命令的响应是从卡发送到主机)。
DAT0-DAT3 信号:四条用于快速传送数据的数据线,由CLK同步的信号。 1、设备驱动的注冊与匹配
CLK信号:HOST给DEVICE的 时钟信号,每个时钟周期传输一个命令或数据位 。
CMD信号:命令在 CMD 线上串行传输,是双向半双工的(命令从主机到从卡,而命令的响应是从卡发送到主机)。
DAT0-DAT3 信号:四条用于快速传送数据的数据线,由CLK同步的信号。 1、设备驱动的注冊与匹配
[Drivers/net/wireless/libertas/if_sdio.c]
/* sdio function device driver*/
struct sdio_driver {
char *name; //设备名
const struct sdio_device_id *id_table; //设备驱动ID
int (*probe)(struct sdio_func *, const struct sdio_device_id *);//匹配函数
void (*remove)(struct sdio_func *);
struct device_driver drv;
};
数据的接收,通过中断的方式来解决
网络设备接收数据的主要方法是由中断引发设备的中断处理函数,中断处理函数推断中断的类型,假设为接收中断。则读取接收到的数据。分配sk_buff数据结构和数据缓冲区。并将接收的数据拷贝到数据缓存区。并调用netif_rx()函数将sk_buff传递给上层协议。
搜索if_sdio_interrupt,可知道它是在if_sdio.c文件里if_sdio_probe()函数中sdio_claim_irq(func, if_sdio_interrupt) ,func->irq_handler = if_sdio_interrupt。当s3cmci_irq中断处理函数的S3C2410_SDIIMSK_sdioIRQ 中断被触发时将调用if_sdio_interrupt()函数,进行接收数据。
static void if_sdio_interrupt(struct sdio_func *func)
数据发送维护了网络传输的数据,是比较重要的调试接口,可以由此获得全部的输出数据信息。
//IP层通过dev_queue_xmit()将数据交给网络设备协议接口层,网络接口层通过netdevice中的注冊函数的数据发送函数int dev_queue_xmit(struct sk_buff *skb)
移除函数当sdio卡拔除时。驱动会调用该函数。完毕对应操作。
拔除后,首先是管脚电平发生变化,从而触发管脚中断,程序由此得到消息,执行了释放函数
如释放占有的资源。禁止func功能函数。释放host。
if_sdio_remove(struct sdio_func *func)
---->lbs_stop_card(card->priv);
lbs_remove_card(card->priv);
---->kthread_stop(priv->main_thread); //终止内核线程
lbs_free_adapter(priv);
lbs_cfg_free(priv);
free_netdev(dev);
flush_workqueue(card->workqueue); //刷新工作队列
destroy_workqueue(card->workqueue);
sdio_claim_host(func);
sdio_release_irq(func);
sdio_disable_func(func);
sdio_release_host(func);
本文介绍了基于SDIO接口协议的WiFi模块,简单阐述了SDIO总线通信原理,列举了设备驱动的注册、匹配中使用到的重点接口函数的作用,包含数据接收,发送,以及资源的释放。让用户在一些设备上使用SDIO接口协议开发时,更清晰方便的了解其工作原理和重点接口函数的使用,帮助用户提升开发效率。
更多热点文章阅读- 粤港澳大湾区国际人工智能与机器人高峰会2022重磅来袭!
- 搜电充电:创新“服务卡片”,让即时充电更便捷
- ArkUI框架,更懂程序员的UI信息语法
- 全球首个港口全面数字孪生技术底座“津鸿”系统发布
-
一个在线阅读OpenHarmony全量代码的网站
提示:本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。
原文标题:基于SDIO协议的WiFi模块实现指南
文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
电子发烧友
+关注
关注
33文章
551浏览量
32970 -
开源社区
+关注
关注
0文章
94浏览量
410
原文标题:基于SDIO协议的WiFi模块实现指南
文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
基于CC3301芯片的双模WiFi模块E103-W13产品说明
E103-W13系列WiFi 6 + 蓝牙5.4协议双模WiFi模块 E103-W13是基TI第十代Combo芯片CC3301推出一款2.4GHz工作频段Wi-Fi 6
浅析SDIO协议V2和V3版本的区别
SDIO(Secure Digital Input/Output)协议V2和V3在多个方面存在显著的区别,这些区别主要体现在功能支持、硬件要求、安全性以及支持的协议等方面。以下是对这些区别的详细分析
发表于 09-18 08:32
FPGA实现SDIO访问需要注意的问题
FPGA实现SDIO访问时,需要注意以下几个关键问题和细节:
初始化过程:
SDIO总线的初始化是确保FPGA与SD卡能够正常通信的第一步。这包括设置时钟频率、配置数据传输模式以及校验协议
发表于 06-27 08:38
stm32使用SDIO与esp32通讯失败的原因?
)
I (1317) wifi:enable tsf
I (1324) wifi:mode : softAP (c8:f0:9e:e2:d1:f5)
[0;32mI (1336) SDIO
发表于 06-26 07:21
WiFi模块和蓝牙模块怎么区分?
近些年,物联网技术越来越先进,给人类生活带来了巨大的便利。智能家居、智能家电点点滴滴都是科技进步的写照。物联网离不开WiFi蓝牙技术,不少设备厂商在蓝牙模块和wifi模块之中犹豫不定,
SDIO总线启动失败, whd_kso_enable失败的原因?
我们在新产品中移植了 WIFI 协议栈,但出现了 WIFI 稳定性问题,主要是显示 SDIO 总线通信错误,出现该问题时我们重启了协议栈,但
发表于 05-28 07:26
国产ARM + FPGA的SDIO通信开发介绍!
SDIO(Secure Digital lnput and Output),即安全数字输入输出接口。SDIO总线协议是由SD协议演化而来,它主要是对SD
技术分享!国产ARM + FPGA的SDIO通信开发介绍!
SDIO总线介绍 SDIO(Secure Digital lnput and Output),即安全数字输入输出接口。SDIO总线协议是由SD协议
技术分享!国产ARM + FPGA的SDIO通信开发介绍!
SDIO总线介绍SDIO(SecureDigitallnputandOutput),即安全数字输入输出接口。SDIO总线协议是由SD协议演化
关于WiFi协议的调制方式详解
WiFi协议,也称为无线保真技术,是一种允许电子设备通过无线方式在局域网(WLAN)和互联网上进行通信的技术标准。基于IEEE 802.11系列协议,这是一种由电气和电子工程师协会制定的无线局域网
WiFi协议技术详解概述
WiFi协议是一种广泛应用的无线通信技术标准,它通过多个层次和协议实现了高效的无线数据传输、安全管理、移动性支持等功能。随着技术的发展和应用场景的不断扩大,
WiFi模块和蓝牙模块怎么区分?
近些年,物联网技术越来越先进,给人类生活带来了巨大的便利。智能家居、智能家电点点滴滴都是科技进步的写照。物联网离不开WiFi蓝牙技术,不少设备厂商在蓝牙模块和wifi模块之中犹豫不定,
评论