1. 程式人生 > >Linux 下wifi 驅動開發(二)—— WiFi模組淺析

Linux 下wifi 驅動開發(二)—— WiFi模組淺析

一、什麼是wifi 模組

        百度百科上這樣定義:

        Wi-Fi模組又名串列埠Wi-Fi模組,屬於物聯網傳輸層,功能是將串列埠或TTL電平轉為符合Wi-Fi無線網路通訊標準的嵌入式模組,內建無線網路協議IEEE802.11b.g.n協議棧以及TCP/IP協議棧。傳統的硬體裝置嵌入Wi-Fi模組可以直接利用Wi-Fi聯入網際網路,是實現無線智慧家居、M2M等物聯網應用的重要組成部分。 

二、WiFi 模組主要分類

      Wi-Fi模組可分為三類:

a -- 通用Wi-Fi模組

       比如手機、筆記本、平板電腦上的USBorSDIO介面模組,Wi-Fi協議棧和驅動是在安卓、Windows、IOS的系統裡跑的,是需要非常強大的CPU來完成應用;

b -- 路由器方案Wi-Fi模組

      典型的是家用路由器,協議和驅動是藉助擁有強大Flash和Ram資源的晶片加Linux作業系統;

c -- 嵌入式Wi-Fi模組

      32位微控制器,內建Wi-Fi驅動和協議,介面為一般的MCU介面如UART等。適合於各類智慧家居或智慧硬體單品。

       我覺得這裡有必要了解一下普通Wi-Fi模組與嵌入式Wi-Fi模組的區別:

       我們都知道筆記本、手機、平板電腦等這類產品具有強大的CPU和大容量的儲存器進行網路通訊資料的處理和儲存,因此在使用WIFI時不需要額外的MCU,完全藉助其高速處理器和龐大的軟體系統。但是對於家電,儀表,LED燈等智慧家居產品,因為該類產品的主控晶片可能是成本很低、功能簡單的MCU,因此這類產品無法支援普通Wi-Fi的功能。同時,還有一個重要的原因就是普通WIFI的功耗比較高,而嵌入式WIFI在功耗上做了很大的改善,比較適合對功耗要求高的無線家電裝置。

       基於上述原因,各個無線廠商相繼推出了嵌入式WIFI模組。嵌入式WIFI模組的特點是軟硬體整合度高,整個嵌入式WIFI模組集成了射頻收發器、MAC、WIFI驅動、所有WIFI協議、無線安全協議、一鍵連線等。總之,一句話:嵌入式WIFI應物聯網而生!

     下面我們針對嵌入式WIFI與普通WIFI來進行對比,通過下表的對比,我們大致上可以理解到什麼是嵌入式WIFI

嵌入式WIFI模組

普通WIFI模組

適用範圍

無線家電、儀表、智慧燈泡等智慧家居裝置

筆記本、手機、平板電腦等

主控晶片

模組上整合的MCU

x86 CPUARM等高速微處理器

介面

UARTSPII2CSDIO

USBSDIO

功耗

產品

TICC3200系列、MXCHIP系列、ASIX系列

AtherosHF-LPA系列等

瑞昱RTL81xx系列、威盛VT系列、雷凌RT系列、

博通BCMMarvell、高通Atheros

開發設計

內建WIFI驅動、MACWIFI協議、無線安全協議等,

所有的網路軟體封裝成一個UARTSPI介面的裝置,

使用簡單,只需要往UART或者SPI收發資料即可。

從整體軟體層面上看,不屬於網路裝置。

需要在主機新增WIFI驅動、同時需要依賴主機的網路協議棧等軟體平臺資源,

從整體軟體層面上看,屬於網路裝置,使用時需要遵循網路相關的協議。


下面是筆者所用一款USB介面的WiFi模組原理圖:


三、WiFi模組主要功能

      Wifi 模組 包括兩種型別的拓撲形式:基礎網(Infra)自組網(Adhoc),要說明無線網路的拓撲形式,首先要了解兩個基本概念:

a -- AP

       也就是無線接入點,是一個無線網路的建立者,是網路的中心節點。一般家庭或辦公室使用的無線路由器就是一個AP


b -- STA站點

       每一個連線到無線網路中的終端(如膝上型電腦、PDA及其它可以聯網的使用者裝置)都可稱為一個站點。


1、基於AP組建的基礎無線網路(Infra)

      Infra:也稱為基礎網,是由AP建立,眾多STA加入所組成的無線網路,這種型別的網路的特點是AP是整個網路的中心,網路中所有的通訊都通過AP來轉發完成

附:  

 筆者所用WiFi模組有兩種系統設定:  無線網型別AP Infra   

AP是將wifi模組當路由器使用,這樣手機和電腦就可以直接連線wifi模組了。

 Infra 是將wifi模組當基礎裝置使用,用於連線別的路由器。

2、基於自組網的無線網路(Adhoc)

      Adhoc:也稱為自組網,是僅由兩個及以上STA自己組成,網路中不存在AP,這種型別的網路是一種鬆散的結構,網路中所有的STA都可以直接通訊

3、安全機制

     本模組支援多種無線網路加密方式,能充分保證使用者資料的安全傳輸,包括:WEP64/WEP128/ TKIP/CCMP(AES) WEP/WPA-PSK/WPA2-PSK。

4、快速聯網

      本模組支援通過指定通道號的方式來進行快速聯網。在通常的無線聯網過程中,會首先對當前的所有通道自動進行一次掃描,來搜尋準備連線的目的AP建立的(或Adhoc)網路。本模組提供了設定工作通道的引數,在已知目的網路所在通道的條件下,可以直接指定模組的工作通道,從而達到加快聯網速度的目的。

5、地址繫結

     本模組支援在聯網過程中繫結目的網路BSSID地址的功能。根據802.11協議規定,不同的無線網路可以具有相同的網路名稱(也就是SSID/ESSID),但是必須對應一個唯一的BSSID 地址。非法入侵者可以通過建立具有相同的SSID/ESSID的無線網路的方法,使得網路中的STA聯接到非法的AP上,從而造成網路的洩密。通過BSSID地址繫結的方式,可以防止STA 接入到非法的網路,從而提高無線網路的安全性。

6、無線漫遊

    本模組支援基於802.11協議的無線漫遊功能。無線漫遊指的是為了擴大一個無線網路的覆蓋範圍,由多個AP共同建立一個具有相同的SSID/ESSID的無線網路,每個AP用來覆蓋不同的區域,接入到網路的STA可以根據所處位置的選擇訊號最強的AP接入,而且隨著STA的移動自動在不同的AP之間切換。

四、工作方式

1、主動型串列埠裝置聯網

      主動型串列埠裝置聯網指的是由裝置主動發起連線,並與後臺伺服器進行資料互動(上傳或下載)的方式。典型的主動型裝置,如無線POS機,在每次刷卡交易完成後即開始連線後臺伺服器,並上傳交易資料。PUSH型串列埠裝置聯網的拓撲結構如右圖所示。其中,後臺伺服器作為TCP Server端,裝置通過無線AP/路由器接入到網路中,並作為TCP Client端。

2、被動型串列埠裝置聯網

      被動型串列埠裝置聯網指的是,在系統中所有裝置一直處於被動的等待連線狀態,僅由後臺伺服器主動發起與裝置的連線,並進行請求或下傳資料的方式。典型的應用,如某些無線感測器網路,每個感測器終端始終實時的在採集資料,但是採集到的資料並沒有馬上上傳,而是暫時儲存在裝置中。

      而後臺伺服器則週期性的每隔一段時間主動連線裝置,並請求上傳或下載資料。

     此時,後臺伺服器實際上作為TCP Client端,而裝置則是作為TCP Server端主要特性2.4GHz, IEEE 802.11b/g內部PCB天線,可選外部天線支援基於AP的網路(Infrastructure)/對等網路Ad-Hoc (IBSS))/ 虛擬AP 模式 ,IPHONE/IPAD/Android 裝置也能不用AP/路由器而直接連線支援802.11i加密方式:WEP-64/128,TKIP (WPA-PSK) and AES(WPA2-PSK)MCU內建TCP/IP協議棧3路UART序列介面(其中1路支援DMA 模式, 全功能串列埠,波特率最高支援921.6Kbps)SPI介面、I2S/PCM介面Digital Video埠高達24個GPIO口(部分GPIO將會和上述介面複用)全功能TCP/IP協議棧,TCP/IP傳輸頻寬達到10Mbps以上支援三種帶有定時自動喚醒功能的WiFi節能模式

相關推薦

Linux wifi 驅動開發—— WiFi模組淺析

一、什麼是wifi 模組         百度百科上這樣定義:         Wi-Fi模組又名串列埠Wi-Fi模組,屬於物聯網傳輸層,功能是將串列埠或TTL電平轉為符合Wi-Fi無線網路通訊標準的嵌入式模組,內建無線網路協議IEEE802.11b.g.n協議棧以及TCP

Linux wifi 驅動開發—— WiFi基礎知識解析

 一、WiFi相關基礎概念 1、什麼是wifi        我們看一下百度百科是如何定義的:       Wi-Fi是一種可以將個人電腦、手持裝置(如pad、手機)等終端以無線方式互相連線的技術,事實上它是一個高頻無線電訊號。[1]  無線保真是一個無線網路通訊技術的品牌

Linuxspi驅動開發2

Linux下spi驅動開發之m25p10驅動測試 目標:在華清遠見的FS_S5PC100平臺上編寫一個簡單的spi驅動模組,在probe階段實現對m25p10的ID號探測、flash擦除、flash狀態讀取、flash寫入、flash讀取等操作。程式碼已經經過測試,運行於

Linux 網路裝置驅動開發 —— Linux 網路棧剖析

一、協議簡介     雖然對於網路的正式介紹一般都參考了 OSI(Open Systems Interconnection)模型,但是本文對 Linux 中基本網路棧的介紹分為四層的 Intern

Linux wifi 驅動開發—— SDIO介面WiFi驅動淺析

      SDIO-Wifi模組是基於SDIO介面的符合wifi無線網路標準的嵌入式模組,內建無線網路協議IEEE802.11協議棧以及TCP/IP協議棧,能夠實現使用者主平臺數據通過SDIO口到無線網路之間的轉換。SDIO具有傳輸資料快,相容SD、MMC介面等特點。  

Linux USB 驅動開發—— USB 驅動幾個重要資料結構

Linux USB 驅動開發(二)—— USB 驅動幾個重要資料結構          前面我們學習了USB 驅動的一個描述符,下面來學習 USB 驅動的幾個重要資料結構   一、struct usb_interface&n

嵌入式Linux裝置驅動開發

上一篇中介紹到裝置驅動如何匹配裝置以及繫結裝置的,在Linux系統下進行註冊,這裡將繼續介紹probe函式的功能。 5、probe函式 Probe()函式必須驗證指定裝置的硬體是否真的存在,probe()可以使用裝置的資源,包括時鐘,platform_dat

Linux 驅動開發之核心模組開發 —— 核心模組編譯 Makefile 入門

一、模組的編譯  我們在前面核心編譯中驅動移植那塊,講到驅動編譯分為靜態編譯和動態編譯;靜態編譯即為將驅動直接編譯進核心,動態編譯即為將驅動編譯成模組。 而動態編譯又分為兩種: a -- 內部編譯        在核心原始碼目錄內編譯 b -- 外部編譯        在核

Linux 網卡驅動學習網絡驅動接口小結

-a key 頻率 網絡 上網 ren 網絡設備 ews 入口 【摘要】前文我們分析了一個虛擬硬件的網絡驅動樣例。從中我們看到了網絡設備的一些接口。事實上網絡設備驅動和塊設備驅動的功能比較相似,都是發送和接收數據包(數據請求)。當然它們實際是有非常多不同

Linux 字元裝置驅動結構—— 自動建立裝置節點

      上一篇我們介紹到建立裝置檔案的方法,利用cat /proc/devices檢視申請到的裝置名,裝置號。 第一種是使用mknod手工建立:mknod filename type major minor 第二種是自動建立裝置節點:利用u

Spring註解驅動開發

AOP-AOP功能測試 /** * 切面類 * @author lfy * * @Aspect: 告訴Spring當前類是一個切面類 * */ @Aspect public class LogAspects { //抽取公共的切入點表示式 //1、本

Linux的使用者管理——更改使用者的資訊,密碼的資訊及使用者的授權

1.連網的過程 (1)先切換到超級使用者下進行操作,普通使用者不可以更改系統配置 (2)cd /etc/sysconfig/network-scripts/ (3)切換到該目錄下後ls檢視,有route-br0檔案的話直接rm -fr route-br0刪除他 (4)再vim e-br0,

linux c++ 伺服器開發

苦逼的c++程式設計師還沒找到工作,所以順便開始寫伺服器練手。。     對內容不滿意不要噴我我是寫給自己看的(把自己犯得錯誤記下來) 1.我的電腦是win10的,所以先去網上下虛擬機器,我下載了 ,然後安裝了。 2.新建了一個ubuntu 32位的虛擬電腦。(我劃分的

Exynos4412 IIC匯流排驅動開發—— IIC 驅動開發

         首先看一張程式碼層次圖,有助於我們的理解        上面這些程式碼的展示是告訴我們:linux核心和晶片提供商為我們的的驅動程式提供了 i2c驅動的框架,以及框架底層與硬體相關的程式碼的實現。    剩下的就是針對掛載在i2c兩線上的i2c裝置

Linux 網路裝置驅動開發 —— 網路裝置驅動基本原理和框架

一、協議棧層次對比 二、Linux網路子系統     Linux網路子系統的頂部是系統呼叫介面層。它為使用者空間提供的應用程式提供了一種訪問核心網路子系統的方法(socket)。位於其下面是一個協議無關層,它提供一種通用的方法來使用傳輸層協議。然後是具體協議的實現,在Lin

Linux I2C裝置驅動編寫

在(一)中簡述了Linux I2C子系統的三個主要成員i2c_adapter、i2c_driver、i2c_client。三者的關係也在上一節進行了描述。應該已經算是對Linux I2C子系統有了初步的瞭解。下面再對他們之間的關係進行程式碼層的深入分析,我認為對他們的關係

LinuxI2C驅動分析

        最近在做一個基於全志A33晶片的android移植時發現嵌入式裝置很多都用到了I2C匯流排通訊,比如說攝像頭,G-sensor,觸控式螢幕等,為此我覺得很好的理解I2C裝置驅動在今後的嵌入式開發中是非常有好處的,而目前我也是處於學習階段,便將這些學習的過程給

Linux的core dump

        之前一篇文章主要介紹了core dump的一些基本概念以及產生的基本原因,這篇文章主要聊一下程式出core之後如何進行最基本的定位。 一、簡單的直觀定位         有時候不用去具

LinuxDHCP伺服器配置

A、簡介   A.1、DHCP   DHCP:動態主機設定協議(Dynamic Host Configuration Protocol)是一個區域網的網路協議,使用UDP協議工作,主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址給使用者給內部網路管理員作為對所有計算機作中央管理的手段。   A.2、

Linux庫檔案學習如何設定庫的路徑

最近在Linux下使用第三方庫Protobuf時,遇到一個問題:編譯出的可執行程式在執行時總報錯:“error while loading shared libraries: libprotobuf.so.7: cannot open shared object file