0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式Wi-F的来源以及与普通Wi-Fi的区别

Q4MP_gh_c472c21 来源:未知 作者:李倩 2018-03-24 11:18 次阅读

首先我们来看一下嵌入式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在移动设备中,相对功耗比较大,因此,对于功耗、电源管理也会在驱动中体现。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5074

    文章

    19040

    浏览量

    303676
  • USB接口
    +关注

    关注

    9

    文章

    700

    浏览量

    55589
  • Linux
    +关注

    关注

    87

    文章

    11233

    浏览量

    208991

原文标题:一位从事Linux设备驱动多年的嵌入式er教你理解嵌入式Wi-Fi的驱动架构

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    WiMAX与Wi-Fi区别

    存取点是由数十米的小片面积所组成,所以WiMAX在全球涵盖上会有占有优势。但是因为目前的市场占有率较高,以及因为小范围、同时竞争的用户人数较少,造成Wi-Fi 较快、延迟较小的特性,Wi-Fi 的收费
    发表于 12-03 19:09

    工程师需要了解的嵌入式Wi-Fi模块选型要素

    嵌入式Wi-Fi模块选型时,主要考察WIFI模块的硬件参数和系统软件支持方面的因素,当然也要考虑一些模块的折衷因素。 嵌入式WIFI模块硬件参数因素:天工测控通常会按嵌入式WIFI模
    发表于 11-22 14:24

    嵌入式Wi-Fi天线设计参考

    蓝牙、Wi-Fi模组集成;⑵ SMT贴装:材质有陶瓷、金属片、PCB,性能成本适中,适用于大批量的嵌入式射频模组;⑶ IPX外接:使用PCB或FPC+Cable的组合,性能优秀,成
    发表于 06-13 08:05

    村田嵌入式Wi-Fi模块有什么优点

    模块,因为终端产品的MCU和Flash都无法支持Wi-Fi的功能,因此需要额外的MCU和Flash进行数据处理和存储。为在这些产品上的应用提供方便,简单的解决方案,村田开发了带有MCU的Wi-Fi模块-嵌入式
    发表于 06-21 06:14

    如何设计基于嵌入式Wi-Fi处理器的无线系统?

    随着物联网技术的发展,众多的嵌入式系统均有增加Wi-Fi特性的需求,比如利用智能手机内建的Wi-Fi来遥控各种嵌入式设备,使支持机器对机器的通信(M2M)具有物联网通讯功能的
    发表于 11-04 08:26

    嵌入式Wi-Fi模块选型要素有哪些?

    嵌入式Wi-Fi模块选型时,主要考察WIFI模块的硬件参数和系统软件支持方面的因素,当然也要考虑一些模块的折衷因素。 嵌入式WIFI模块硬件参数因素:天工测控通常会按嵌入式WIFI模
    发表于 07-30 11:39

    什么是Wi-Fi?WLAN和Wi-Fi区别是什么?

    什么是Wi-Fi?有什么特点?WLAN和Wi-Fi区别有哪些?
    发表于 05-25 06:02

    基于嵌入式Wi-Fi处理器的无线系统设计

    该文给出了嵌入式Wi-Fi系统的设计方法,该方法采用的嵌入式Wi-Fi单芯片AX22001/11属于内置802.11无线网MAC/基带的单片式TCP/IP微处理器,同时包含兼容802.
    发表于 05-16 11:20 1673次阅读
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>Wi-Fi</b>处理器的无线系统设计

    Microchip嵌入式Wi-Fi解决方案及产品 (下)

    本视频介绍了Microchip公司的嵌入式WiFi解决方案(RN Wi-Fi系列,与MRF Wi-Fi系列),以及相应的产品与技术。
    的头像 发表于 06-06 03:45 3580次阅读
    Microchip<b class='flag-5'>嵌入式</b><b class='flag-5'>Wi-Fi</b>解决方案及产品 (下)

    Microchip嵌入式Wi-Fi解决方案及产品 (上)

    本视频介绍了Microchip公司的嵌入式WiFi解决方案(RN Wi-Fi系列,与MRF Wi-Fi系列),以及相应的产品与技术。
    的头像 发表于 06-07 01:46 3668次阅读
    Microchip<b class='flag-5'>嵌入式</b><b class='flag-5'>Wi-Fi</b>解决方案及产品 (上)

    了解最新的Wi-Fi 技术:Wi-Fi6E已经推出它和普通Wi-Fi有何区别

    Wi-Fi 6E已经推出 它和普通Wi-Fi有何区别,wi-fi,路由器,手机,mu-mimo,通信
    发表于 02-22 14:49 1727次阅读
    了解最新的<b class='flag-5'>Wi-Fi</b> 技术:<b class='flag-5'>Wi-Fi</b>6E已经推出它和<b class='flag-5'>普通</b><b class='flag-5'>Wi-Fi</b>有何<b class='flag-5'>区别</b>

    Wi-Fi HaLow 和传统 Wi-Fi区别是什么

    Wi-Fi 就像我们互联世界的氧气。它是当今使用最广泛的无线网络协议,承载了所有互联网一半以上的流量。“Wi-Fi”是一个包罗万象的术语,用于描述不断发展的 802.11 协议家族,这些协议已经发展
    发表于 06-18 17:35 1052次阅读

    基于ARM11的嵌入式Wi-Fi实验研究

    基于ARM11的嵌入式Wi-Fi实验研究(嵌入式开发工作内容)-基于ARM11的嵌入式Wi-Fi实验研究               
    发表于 07-30 14:56 4次下载
    基于ARM11的<b class='flag-5'>嵌入式</b><b class='flag-5'>Wi-Fi</b>实验研究

    Wi-Fi 6和Wi-Fi 5之间有哪些区别呢?

    Wi-Fi 6和Wi-Fi 5之间有哪些区别呢? Wi-Fi 6和Wi-Fi 5是无线局域网标准的两个版本,它们之间存在很多
    的头像 发表于 12-09 16:09 2274次阅读

    Wi-Fi HaLow和传统Wi-Fi区别

    Wi-Fi HaLow和传统Wi-Fi区别  Wi-Fi是一种无线网络技术,可以连接到互联网或局域网,为用户提供无线上网的便利。随着科技的发展和互联网的普及,
    的头像 发表于 02-02 15:28 1133次阅读