程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WG7310(WLAN+Bluetooth+FM)芯片在.Net MF中的應用

WG7310(WLAN+Bluetooth+FM)芯片在.Net MF中的應用

編輯:關於.NET

WG7310芯片是Ti推出的一款芯片,集成了WLAN、Bluetooth、FM等功能(最近又推出了四合一的芯片,把GPS功能也集成了進去),由於以前在.Net MF上的一些工作是基於Ti DM335開發板上的,所以開發.Net MF系統的WiFi功能就選用了WG7310芯片。

芯片的技術指標如下:

功能規格:WLAN + Bluetooth+FM Combo 無線模塊

主芯片廠牌:TI (Texas Instrument)

主芯片編號:WL1271 One Chip

支持協議:IEEE 802.11 b/g/n, Bluetooth 2.0/2.1+ EDR,FM

支持頻道: 2.4 GHz

支持頻寬:11Mbps (11b), 54Mbps (11g), 150Mbps(11n),4Mbps (BT)

連結接口:SDIO (WLAN), UART (BT)

操作系統:Windows CE /6.0, Linux 2.4/2.6,Android; 

由於前期一直在做MSN Direct相關的工作,介入Wifi開發相對比較晚,前期SDIO、Wifi底層驅動的移植工作已由同事基本完成,後續工作主要為AP掃描、AP連接(無密碼、WEP、WAP1、WAP2)及.Net MF庫接口開發,此外還需完成一個相對完整的示例程序。

下面一一簡單介紹一下WG7310如何在.Net MF中使用的。

WG7310芯片開發板與DM335開發板的連接關系如下:

邏輯架構層次圖如下:

WG7310芯片集成有自己的CPU系統,借助運行其上的程序通過SDIO和DM335開發板進行交互(這一點和Ti推出的CC2430Zigbee芯片類似,集成了51內核,通過串口與外界交互),由於WG7310芯片的片上Flash太小,所以需要通過外界把系統所需要的三個系統文件(firmware.bin、nvs_map.bin、tiwlan.ini)下載到該芯片上去,最初這三個文件放在.Net MF的文件系統中,考慮到受資源所限,並不是所有的.Net MF系統都含有文件系統,所以在Flash上開辟了一個Custom區,專門存放這三個文件。

這三個文件可以通過我以前開發的Flash遠程讀寫 工具進行部署(如下圖)。

在Native代碼中,通過如下函數就可以提取文件內容:

int TI_fileloader()
{
    TiFileInfo *fileinfo = (TiFileInfo*) private_malloc(512);
    if(fileinfo==NULL) return -1;
    if(CustomBlock_Read(0,(UINT8 *)fileinfo,512)==FALSE)   return -2;
    if(fileinfo ->Flag != 0xFEDE7722 || fileinfo->FileNum!=3) return -3;
    UINT8 *bytData=(UINT8 *)private_malloc(fileinfo->FileSize);
    if(bytData==NULL) return -4;
    if( CustomBlock_Read(fileinfo->HeadSize,bytData,fileinfo->FileSize)==FALSE)   return -5;
    int Num=0;
    for(int i=0;i<fileinfo->FileNum;i++)
    {
         if(hal_stricmp(fileinfo->Item[i].Name,"firmware.bin") == 0)
         {
             g_file_loader.firmware_buffer = (UINT8*)bytData +fileinfo->Item[i].Addr;
             g_file_loader.firmware_length = fileinfo->Item[i].Size;
               Num++;
         }
           if(hal_stricmp(fileinfo->Item[i].Name,"nvs_map.bin") == 0)
         {
             g_file_loader.nvs_buffer = (UINT8*)bytData +fileinfo->Item[i].Addr;
             g_file_loader.nvs_length = fileinfo->Item[i].Size;
              Num++;
           }
           if(hal_stricmp(fileinfo->Item[i].Name,"tiwlan.ini") == 0)
         {
             g_file_loader.ini_buffer = (UINT8*)bytData +fileinfo->Item[i].Addr;
             g_file_loader.ini_length = fileinfo->Item[i].Size;
               Num++;
         }
    }
    if(Num!=3) return -6;
    return 0;
}

注:CustomBlock塊的讀寫非.Net MF官方標准功能,是我另行擴展的。

.Net MF的上層Wifi庫由於還處在研發階段,遠沒有定型,所以這裡就不公開了,基本功能就是AP掃描,AP連接。

由於Wifi的開發相對復雜,遠不是一句兩句話所能說清的,特別是WPA1和WPA2功能,需要了解很多協議和過程,不僅考驗你的C++功底,更考驗你的邏輯思維能力。相關思路和代碼這裡就不細說了,下面僅展示一下相關的應用示例(對WG7310芯片開發感興趣的朋友我們可以通過郵件和MSN進行更深入的交流)。

注:

(1)、示例程序所采用的圖形庫采用我開發的System.Windows.Forms庫,非系統自帶的WPF庫。

(2)、DM335開發板的顯示通過AV輸出(見圖一),無觸摸或鼠標鍵盤輸入,所以相關控制和輸入通過我開發的插件進行控制,請參見《讓PC成為MF的鼠標鍵盤》。

(3)、上述截圖通過我開發遠程截圖工具進行截取的。

隨著Wifi驅動的開發成功,下一步將深入研究Zigbee通信協議(其實Zigbee協議在.Net MF V4.0版本就含有相關源碼,不過是基於托管代碼),這樣.Net MF外部通信接口除藍牙外,幾乎囊括了我們所常見的通信接口,如串口、網口、Wifi、Zigbee、I2C、SPI、SDIO、USB等。必要時我們還可以讓.Net MF原生支持Modbus Rtu、Modbus TCP、PPI、CP243等通信協議,這樣在物聯網時代,用戶只需幾行C#代碼(無需具備嵌入式開發技術),就可以讓自己的設備輕松入網,這對.Net MF來說,是一個非常誘人的應用場景。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved