WiFi模块 driver驱动框架(sdio接口、pcie接口)_pcie wifi接口协议-程序员宅基地

技术标签: linux  linux 系统  

1、WiFi driver驱动框架

  • 应用层
  • BSD socket层
  • TCP/IP协议层
  • IP层
  • 网络设备层
  • MAC层(802.11)
    (包括扫描、认证、关联、省电状态)
  • 设备驱动层

2、SDIO-Wifi模块

1、SDIO-Wifi模块介绍

SDIO-Wifi模块是基于SDIO接口的符合WiFi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快,兼容SD、MMC接口等特点。

对于SDIO接口的WiFi,首先,它是一个SDIO的卡设备,然后具备了WiFi的功能。所以,注册的时候还是先以sdio设备去注册,然后检测到卡之后再去实现它的wifi功能。显然,他是用SDIO的协议,通过发命令和数据来控制实现WiFi功能。

SDIO 故名思义,就是 SD 的 I/O 接口(interface)的意思,不过这样解释可能还有点抽像。更具体的说明,SD 本来是记忆卡的标准,但是现在也可以把 SD 拿来插上一些外围接口使用,这样的技术便是 SDIO

所以 SDIO 本身是一种相当单纯的技术,透过 SD 的 I/O 引脚来连接外围,并且透过 SD 上的 I/O 数据引脚与这些外围传输数据,而且 SD 协会会员也推出很完整的 SDIO stack 驱动程序,使得 SDIO 外围(我们称为 SDIO 卡)的开发与应用变得相当热门。目前常见的 SDIO 外围(SDIO 卡)有:

  • Wi-Fi card(无线网络卡)
  • CMOS sensor card(照相模块)
  • GPS card
  • GSM/GPRS modem card
  • Bluetooth card

SD卡与SDIO卡的异同

1.SD卡使用的是SD卡协议,而SDIO卡使用的是SDIO协议;协议不一样,初始化/读写方式都不一样
2.ARK1600控制器既支持SD卡也支持SDIO卡,在驱动上完全可以做到同一个卡槽既支持SD卡也支持SDIO卡,甚至combo卡,因此在驱动上有个判断过程,判断插进来的是SD卡还是SDIO卡
3.两者的引脚定义不一样,尽管引脚个数都一样

2、SDIO的传输模式有三种:

  • SPI mode(required)
  • 1-bit mode
  • 4-bit mode

依据 SD 标准,所有的 SD(记忆卡)与 SDIO(外围)都必须支持 SPI mode,因此 SPI mode 是「required」。

3、SDIO的硬件电路
在这里插入图片描述
可以看到,SDIO接口总共有七个引脚,分别是DAT0-3(数据),CLK(时钟),CMD(命令),VIO(电源)。

4、MMC子系统框架

这里的MMC子系统框架包含了Linux的SDIO驱动架构,所以姑且将其看作SDIO的驱动架构。

linux/driver/mmc目录下有三个子目录:card 、core、host,分别表示区块层、核心层、主机控制层。其中card层、core层是Linux封装好的、标准的东西,不需要修改,需要修改的是host层,这一层需要驱动开发工程师根据平台来完成。
在这里插入图片描述
Linux MMC子系统主要分成三个部分:

  • MMC核心层:完成不同协议和规范的实现,为host层和设备驱动层提供接口函数。MMC核心层由三个部分组成:MMC,SD和SDIO,分别为三类设备驱动提供接口函数;
  • Host 驱动层:针对不同主机端的SDHC、MMC控制器的驱动;
  • Client 驱动层:针对不同客户端的设备驱动程序。如SD卡、T-flash卡、SDIO接口的GPS和wi-fi等设备驱动。

wifi驱动怎么知道使用那个sdio控制器?

读到这里不知道你们是不是有疑问,我们的SOC上有很多的sdio控制器,有些sdio控制器接emmc flash,有些接wifi模块,wifi驱动怎么知道我接在那个sdio控制器上呢?
其实是在wifi厂商提供的驱动里面会注册一个sdio_register_driver,当上电的时候我的emmc驱动会去扫描sdio的外围设备,当确认扫描到设备的时候会去读取设备的id即wifi模块的pid和vid,如果设备id匹配上了之后会调用使用sdio_register_driver注册进去的probe函数,从而确认我们的设备是接到那个sdio设备上。

usb wifi和sdio的wifi也是一样的,wifi模块插入usb口的时候,会读取usb模块的vid和pid,如果读取到的vid和pid和使用usb_register注册进去的设备的vid和pid是一样证明驱动匹配上了,然后调用probe函数。

原文链接:https://blog.csdn.net/qq_27809619/article/details/120281476

5、SDIO总线协议

SDIO总线 和 USB总线 类似,SDIO也有两端,其中一端是HOST端,另一端是device端。所有的通信都是由HOST端发送命令开始的,Device端只要能解析命令,就可以相互通信。 对于SDIO总线,它的HOST端是开发板mmc控制器,而device端则是各种带SDIO接口的模块,比如SDIO WiFi模块。

SDIO协议是由SD卡协议演化升级而来的,很多地方保留了SD卡的读写协议,同时SDIO协议又在SD卡协议之上添加了CMD52和CMD53命令。由于这个,SDIO和SD卡规范间的一个重要区别就是增加了低速标准。低速卡的目标应用是以最小的硬件来支持低速I/O能力。

SD总线通信是基于指令和数据比特流,起始位开始和停止位结束。SD总线通信有三个元素:

  • Command:由host发送到卡设备,使用CMD线发送;
  • Response:从card端发送到host端,作为对前一个CMD的相应,通过CMD线发送;
  • Data:即能从host传输到card,也能从card传输到host,通过data线传输。

详细的代码注册流程分析请参考:https://blog.csdn.net/weixin_45244289/article/details/110002248

https://blog.csdn.net/Enosji/article/details/121513074

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36741413/article/details/124966709

智能推荐

安装centos7之后要做的几件事_centos libtoolize-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏6次。本文主要记录安装Centos7之后要做的几件事,作为备忘一 安装第三方源:(此处以aliyun为例)ps:本文所配置环境均为root权限下,如需在普通环境下配置,命令之前请加上sudoEPEL源: yum install epel-release执行完该命令后,在 /etc/yum.repos.d 目录下会多一个 epel.repo 文件ELRepo 源ELRepo 包含..._centos libtoolize

echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮-程序员宅基地

文章浏览阅读2.5k次。echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮 >>>>>>>>>>>>>>>>>>>>>>>>>>&_echarts 图标上的下载按钮不能用

el-table表头添加图标_el table 表头加图片-程序员宅基地

文章浏览阅读149次。el-table的表头添加特殊内容。_el table 表头加图片

如何防止网页的背景图片重复 no-repeat_网页重复背景-程序员宅基地

文章浏览阅读1.2w次。(1)现在一般都用css设定了,比如在一个div下设背景图片切不让其重复,则可设一个样式,比如:.nobgrepeat{background:url(背景图片地址) left top no-repeat;}(2)也可以设置背景图片的高宽,要与背景图片的大小一样注意:但是有时候加了 no-repeate之后,图片就会不见了,这种情况与设置的 left _网页重复背景

计算机网络的性能指标以及相关计算_计算机网络数据率计算公式-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏17次。用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的"最高数据率"单位和速率一样:b/s(kb/s,Mb/s,Gb/s);RTT计算公式:因为是从发送方发送完数据才开始计算的所以公式中并没有结点A的发送时延,但是有结点B的发送时延;结论:若主机在一段链路上连续不断的发送分组,则总时延为所有分组的发送时延+信号在这一段链路上的传播时延;吞吐量受网络的带宽或额定速率的限制;分组丢失率,是指在一定的时间范围内,传输过程中的丢失的分组数量与总分组数量的比率;_计算机网络数据率计算公式

012信息打点-Web应用&企业产权&指纹识别&域名资产&网络空间&威胁情报_资产指纹和应用-程序员宅基地

文章浏览阅读188次。针对各种应用的信息收集(Web网站、APP应用、PC应用、小程序应用、微信公众号等企业资产分五类:Web应用、APP应用、PC端应用、小程序应用、微信公众号、其他产品信息收集目标:某某企业、某某学校、网址、ip地址_资产指纹和应用

随便推点

《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar_qt侧面工具栏-程序员宅基地

文章浏览阅读655次,点赞3次,收藏4次。内部先拿到TabBar的dll转为QObject,再把QObject强转为TabBarPlugin对象,这是插件的使用方法,也可以直接new一个TabBarPlugin对象。四个小工具也是由插件实现,先拿到他们的对象,通过对象指针获取他们的界面,再把每个界面addWidget添加到标签栏中。(2)调换tabBar标签栏中所有界面的循序和删除小工具界面。(3)把tabBar标签栏中的小工具界面拖出来在放回去。3、现在可以对标签栏上的所有界面进行交互。(1)可以收缩和展开tabBar。_qt侧面工具栏

Microsoft Office LTSC 2021企业办公新标杆,稳定高效助力业务发展-程序员宅基地

文章浏览阅读267次,点赞4次,收藏10次。总的来说,Office套件的功能特色在于其强大的文档处理、数据分析、演示制作和邮件管理等功能,以及各应用程序之间的协同工作,能够极大地提高用户的工作效率。除了上述三个主要应用程序外,Office套件还包括其他应用程序,如Outlook、OneNote、Publisher和Access等,每个应用程序都有其独特的功能特色,满足用户在不同场景下的办公需求。Office是一款功能强大的办公软件套件,包含了多个应用程序,每个应用程序都有其独特的功能特色。

Elasticsearch--解决JVM 堆内存使用率很高的问题_elasticsearch8占用大量内存-程序员宅基地

文章浏览阅读2k次,点赞22次,收藏16次。本文介绍如何解决ES的JVM 堆内存使用率飙升的问题。_elasticsearch8占用大量内存

《Selenium 2 自动化测试实战》读书笔记_selenium2自动化测试实战-程序员宅基地

文章浏览阅读136次。最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试 & 自动化测试的理论知识,遂拿过来学习学习。所以本文几乎没有实践内容,大多都是概念和工具的 mark,后续若有实践,我会来补充的。_selenium2自动化测试实战

树莓派4B 与 stm32 通信_树莓派4b 与 stm32 采用usb-ttl通信-程序员宅基地

文章浏览阅读1.7w次,点赞33次,收藏486次。本文用来记录智能控制课设中的通信环节的实现硬件便是树莓派4Bstm32(我用的是正点原子的STM32F103ZET6的核心板)从头开始做的,带着你去从烧录树莓派,安装STM32的编译环境开始,直到二者成功通信。如何使用串口助手进行调试,以及如何通过代码进行通信。1.准备环节(树莓派已经烧录好镜像可以正常使用,stm32也已经装好keil5的同学可以略过)1.1 树莓派新买的树莓派4B一般TF卡没有烧入镜像(也就是树莓派的操作系统)官方推荐系统是以下三种32位Lite版(无桌面)32位桌面版_树莓派4b 与 stm32 采用usb-ttl通信

Ubuntu系统下JDK环境切换_ubuntu切换jdk-程序员宅基地

文章浏览阅读251次。请注意,如果系统上没有安装Java,你将看到一个类似"command not found"的错误信息,这意味着你需要先安装Java。如果你需要切换到一个新的Java版本,首先需要安装该版本。这将列出系统中已安装的Java版本,并要求你选择默认的Java版本。完成上述步骤后,你已经成功安装并配置了新的Java版本。如果需要切换回先前的Java版本或者安装其他版本,重复步骤2和步骤3即可。首先,我们需要检查系统上已安装的Java版本。接下来,需要配置系统使用新安装的Java版本。_ubuntu切换jdk