历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2018年03月25日 | 嵌入式Wi-F的来源以及与普通Wi-Fi的区别

2018-03-25 来源:嵌入式ARM

首先我们来看一下嵌入式Wi-F的来源以及与普通Wi-Fi的区别。


我们都知道笔记本、手机、平板电脑等这类产品具有强大的CPU和大容量的存储器进行网络通信数据的处理和存储,因此在使用WIFI时不需要额外的MCU,完全借助其高速处理器和庞大的软件系统。但是对于家电,仪表,LED灯等智能家居产品,因为该类产品的主控芯片可能是成本很低、功能简单的MCU,因此这类产品无法支持普通Wi-Fi的功能。同时,还有一个重要的原因就是普通Wi-F的功耗比较高,而嵌入式WIFI在功耗上做了很大的改善,比较适合对功耗要求高的无线家电设备。


基于上述原因,各个无线厂商相继推出了嵌入式WIFI模块。嵌入式WIFI模块的特点是软硬件集成度高,整个嵌入式WIFI模块集成了射频收发器、MAC、WIFI驱动、所有WIFI协议、无线安全协议、一键连接等。总之,一句话:嵌入式WIFI应物联网而生!


下面我们针对嵌入式WIFI与普通WIFI来进行对比,通过下表的对比,我们大致上可以理解到什么是嵌入式WIFI。

在分析WIFI驱动前,分享一下本人对Linux驱动的一些了解,其实纵观Linux众多的设备驱动,几乎都是以总线为载体,所有的数据传输都是基于总线形式的,即使设备没有所谓的总线接口,但是Linux还是会给它添加一条虚拟总线,如platform总线等;介于WIFI的驱动实在是太庞大了,同时又是基于比较复杂的USB总线,所以建议大家先了解一下USB设备驱动和网络设备驱动。


我们要看懂WIFI驱动,首先要明白WIFI的工作原理。从对于支持802.11n、802.11ac这些比较无线标准的WIFI芯片,其驱动程序也会越来越复杂。那么我们怎么入手去了解及分析它呢?


网上很多人分析Linux设备驱动都是从模块加载入手去分析它的驱动源码。以本人从事Linux设备驱动多年的经验,这确实是一条很直观又非常好的思路。但是这只局限于设备功能少、接口较简单、驱动源码较少的设备驱动。对于功能复杂、驱动源码庞大的设备驱动,根据这条思路,很多开发者可能会无耐心走下去,或者会走向死胡同。


现在我们可以这样来看,从硬件层面上看,WIFI设备与CPU通信是通过USB接口的,与其他WIFI设备之间的通信是通过无线射频(RF)。从软件层面上看,Linux操作系统要管理WIFI设备,那么就要将WIFI设备挂载到USB总线上,通过USB子系统实现管理。而同时为了对接网络,又将WIFI设备封装成一个网络设备。


我们以USB接口的WIFI模块进行分析:


(1)从USB总线的角度去看,它是USB设备;


(2)从Linux设备的分类上看,它又是网络设备;


(3)从WIFI本身的角度去看,它又有自己独特的功能及属性,因此它又是一个私有的设备;


通过上述的分析,我们只要抓住这三条线索深入去分析它的驱动源码,整个WIFI驱动框架就会浮现在你眼前。


1、现在我们先从USB设备开始,要写一个USB设备驱动,那么大致步骤如下:


(1)需要针对该设备定义一个USB驱动,对应到代码中即定义一个usb_driver结构体变量。代码如下:


struct usb_driver xxx_usb_wifi_driver;


(2)填充该设备的usb_driver结构体成员变量。代码如下:


static struct usb_driver xxx_usb_wifi_driver = {


.name =             "XXX_USB_WIFI",


.probe=   xxx_probe,


.disconnect=   xxx_disconnect,


.suspend=        xxx_suspend,


.resume=         xxx_resume,


.id_table=        xxx_table,


};


(3)将该驱动注册到USB子系统。代码如下:


usb_register(&xxx_usb_wifi_driver);


以上步骤只是一个大致的USB驱动框架流程,而最大和最复杂的工作是填充usb_driver结构体成员变量。以上步骤的主要工作是将USB接口的WIFI设备挂载到USB总线上,以便Linux系统在USB总线上就能够找到该设备。


2、接下来是网络设备的线索,网络设备驱动大致步骤如下:


(1)定义一个net_device结构体变量ndev。代码如下:


struct net_device *ndev;


(2)初始化ndev变量并分配内存。代码如下:


ndev=alloc_etherdev();


(3)填充ndev -> netdev_ops结构体成员变量。代码如下:


static const struct net_device_ops xxx_netdev_ops= {


.ndo_init= xxx_ndev_init,


.ndo_uninit= xxx _ndev_uninit,


.ndo_open= netdev_open,


.ndo_stop= netdev_close,


.ndo_start_xmit= xxx_xmit_entry,


.ndo_set_mac_address= xxx_net_set_mac_address,


.ndo_get_stats= xxx_net_get_stats,


.ndo_do_ioctl= xxx_ioctl,


};


(4)填充ndev->wireless_handlers结构体成员变量,该变量是无线扩展功能。代码如下:


ndev->wireless_handlers = (struct iw_handler_def *)&xxx_handlers_def;


(5)将ndev设备注册到网络子系统。代码如下:


register_netdev(ndev);


3、WIFI设备本身私有的功能及属性,如自身的配置及初始化、建立与用户空间的交互接口、自身功能的实现等。


(1)自身的配置及初始化。代码如下:


xxx_read_chip_info();


xxx_chip_configure();


xxx_hal_init();


(2)主要是在proc和sys文件系统上建立与用户空间的交互接口。代码如下:


xxx_drv_proc_init();


xxx_ndev_notifier_register();


(3)自身功能的实现,在前面章节上我们已经讲解过WIFI的网络及接入原理,如扫描等。同时由于WIFI在移动设备中,相对功耗比较大,因此,对于功耗、电源管理也会在驱动中体现。

推荐阅读

史海拾趣

BESTECH公司的发展小趣事

由于“BESTECH”并非一个我所熟知的特定电子行业公司,因此我无法提供关于该公司具体发展故事的详细信息。此外,每个公司的发展都涉及到许多复杂的事件和因素,包括市场变化、技术革新、竞争态势、管理决策等,因此,撰写五个关于该公司发展的故事将需要详尽的研究和深入了解。

不过,我可以为您提供一个电子行业公司可能经历的一般性发展故事的框架,您可以根据这个框架来进一步了解或研究“BESTECH”或其他电子行业公司的发展历程。

电子行业公司一般性发展故事框架

  1. 创业初期与技术创新
    • 描述公司创始人的背景和对电子行业的热情。
    • 讲述公司如何从一个创业想法开始,通过技术创新解决某个行业痛点或满足市场需求。
    • 强调早期产品的独特性和市场接受度。
  2. 市场扩张与品牌建设
    • 描述公司如何逐渐扩大市场份额,可能包括进入新的地域市场或拓展产品线。
    • 讲述公司在品牌建设方面的努力和成果,如参加行业展会、获得奖项等。
    • 分析公司在市场竞争中的优势和策略。
  3. 技术升级与研发投入
    • 强调公司如何紧跟行业技术发展趋势,不断升级产品和技术。
    • 描述公司在研发方面的投入和取得的成果,如专利申请、新产品发布等。
    • 分析技术升级对公司市场竞争力的影响。
  4. 合作与战略联盟
    • 讲述公司如何与其他企业、研究机构或高校建立合作关系,共同推进技术创新和市场拓展。
    • 分析这些合作对公司发展的战略意义和价值。
    • 描述合作带来的具体成果和效益。
  5. 企业文化与社会责任
    • 强调公司在企业文化建设方面的努力和特色,如员工培训、激励机制等。
    • 讲述公司如何履行社会责任,如环保措施、公益活动等。
    • 分析企业文化和社会责任对公司长远发展的重要性。

请注意,这只是一个框架性的描述,具体的故事内容需要根据“BESTECH”或其他电子行业公司的实际情况来填充。如果您对“BESTECH”有特定的了解或需求,建议您查阅相关资料、公司年报或行业报告,以获取更准确和详细的信息。

Apacer公司的发展小趣事

随着科技的不断发展,Apacer宇瞻科技紧跟时代步伐,不断创新产品。2006年,公司推出了存储容量高达2GB的microSD卡,这款数码卡体积仅为普通SD卡的四分之一,但存储容量却与之不相上下。这一创新产品不仅满足了市场对高容量、小型化存储设备的需求,也进一步巩固了宇瞻科技在市场上的地位。

ApexTool Group公司的发展小趣事

随着全球电子市场的不断扩大,Apex Tool Group积极实施全球化战略,拓展市场版图。公司在全球范围内建立了多个生产基地和分销网络,以便更好地服务全球客户。同时,Apex Tool Group还积极与全球知名的电子企业开展合作,共同推动电动工具技术的创新和发展。这些举措使得Apex Tool Group在全球电子行业中的地位日益稳固。

Facon公司的发展小趣事

在竞争激烈的电子行业中,品牌形象对于企业的成功至关重要。Facon深知这一点,因此他们始终注重品牌塑造和形象维护。通过举办技术研讨会、参加行业展会等方式,Facon不断向外界展示自己的技术实力和产品优势。同时,他们还积极参与公益活动和社会责任项目,提升企业的社会形象。这些努力让Facon在消费者和合作伙伴中树立了良好的品牌形象。

Gigarams Semiconductor Device Corp公司的发展小趣事
这可能是由于传感器精度不足、控制器算法不准确或驱动器性能不稳定等原因导致的。解决方案包括提高传感器精度、优化控制器算法和更换性能更稳定的驱动器。
维峰电子(WCON)公司的发展小趣事

质量是企业的生命线。维峰电子始终将质量管理作为公司发展的重中之重。公司建立了完善的质量管理体系,从原材料采购、生产过程到产品检验等各个环节都进行严格把控。同时,公司还引入了先进的检测设备和技术,确保产品的质量和性能达到最高标准。这些措施的实施不仅提升了产品的竞争力,也赢得了客户的信任和好评。

问答坊 | AI 解惑

一些常用小软件下载

本帖最后由 paulhyde 于 2014-9-15 09:27 编辑 这里是我们竞赛成用的一些小软件下载 大家有兴趣的可以看看  …

查看全部问答>

求:单片机串口转USB的免驱动方案

求:单片机(Freescale MC13213)串口转USB的免驱动方案!!可以用2块转换芯片!…

查看全部问答>

关于ARM中断处理的问题----《ARM嵌入式系统开发-软件设计与优化》第九章中疑问

各位过年好哦~ 呵呵,小弟这里有点疑惑相同大家讨论讨论~,这个问题是《ARM嵌入式系统开发-软件设计与优化》一书中的见下: 第九章-中断处理 9.3.2嵌套中断 在这一节中,描述了如何处理嵌套式的中断(不能单纯的在IRQ模式下打开中断允许位) ...…

查看全部问答>

求教wince 5.0 扩展16550串口的问题

找了一些资料,但还是有点不明白, http://topic.eeworld.net/u/20090319/17/48afc467-5061-476c-ac41-5a0f8fdd4622.html这位仁兄也问了差不多的问题 方法是不是主要将%_WINCEROOT%\\Public\\Common\\Oak\\Drivers\\Serial\\COM16550目录复制到 ...…

查看全部问答>

This file should only be compiled with iccavr or aavr with processor option -v1

#error This file should only be compiled with iccavr or aavr with processor option -v1 有人用IAR AVR遇到过这个问题吗?…

查看全部问答>

无线电通信

RT 无线电通信怎么入门啊~~~…

查看全部问答>

ECC检验有什么优势,我不明白,请玩过Nand flash 的朋友谈谈

搞了半天都没明白ECC的原理是什么?但根据网友提供的代码,基本上知道怎么去调用它,但我有点纳闷:还不如自己写完一个Sector后,写个函数再读出这个扇区一个一个字节与原数据做比较,不一一对应,擦除再写,直到写对为止,难道ECC算法查到某位写错后,不用经 ...…

查看全部问答>

设计家用电器电路控制板时的EMC方法

家电控制板的小体积,低成本决定了在线路中不会使用高成本的材料来解决其电磁干扰问题。家电控制板的干扰主要来自三大方面:一是控制板本身产生的干扰,二是来自负载的干扰,三是来自线路上的干扰。解决这些干扰可以分别采用不同的方案来达成。 控 ...…

查看全部问答>

请教,stm8a的芯片,有没有位寻址功能,求解用过大侠们

                                 请教,stm8a的芯片,有没有位寻址功能,我看没大量资料,没有看到有关说明,求解用过大侠们~~~~~~~~~~~~~~~~~~~~~~ ...…

查看全部问答>

OV系列摄像头配置格式如何解释?

FPGA的I2C对摄像头配置怎么没有地址,只有数据呢。谁能解释下。///////////// Config Data LUT  ////////////////////////// alwaysbegin case(LUT_INDEX) // Audio Config Data 0 : LUT_DATA <= 16\'h0000; 1 : LUT_DATA <= 16\'h1140; ...…

查看全部问答>