《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于嵌入式ARM-Linux無線ZigBee協調器驅動設計
基于嵌入式ARM-Linux無線ZigBee協調器驅動設計
來源:微型機與應用2011年第15期
李 婧,史智興,崔哲偉,賈 方
(河北農業大學 信息科學與技術學院,河北 保定 071001)
摘要: 以ARM9處理器S3C2410作為嵌入式Linux的系統開發和運行平臺,利用適合田間要求的無線ZigBee節點CC2430,在Linux內核中實現協調器的字符驅動,使其通過IO進行數據傳輸,避免了串口數據傳輸速率低、數據冗余性差、程序設計繁瑣等缺點。詳細介紹了該系統的設計和開發過程,包括網絡通信協議的選取,bootloader、內核、文件系統以及驅動程序的實現和移植。
Abstract:
Key words :

摘  要:ARM9處理器S3C2410作為嵌入式Linux的系統開發和運行平臺,利用適合田間要求的無線ZigBee節點CC2430,在Linux內核中實現協調器的字符驅動,使其通過IO進行數據傳輸,避免了串口數據傳輸速率低、數據冗余性差、程序設計繁瑣等缺點。詳細介紹了該系統的設計和開發過程,包括網絡通信協議的選取,bootloader、內核、文件系統以及驅動程序的實現和移植
關鍵詞: ZigBee;ARM9;CC2430;內核;移植;驅動

 農田中大范圍的環境信息監測已成為網絡應用范圍重點之一。針對農田布線不便的特點,ZigBee無線節點網絡成為農田信息采集系統的首選,可對其所分布區域內的各種環境和檢測對象的信息進行實時的監控[1]。然而,控制下層整個網絡狀態的核心是上位機ARM處理器,而且上位機與下位機通信大多以串口模式來實現[2-3]。但串口通信模式存在串口傳輸速率低(波特率雙方一致)、傳送距離短[4]、數據冗余差(數據校驗)以及設計串口協議繁瑣(幀格式)等不足。因此本文研究了ZigBee在ARM9內核中的協調器字符驅動,利用I/O傳輸數據,控制具有協調器驅動的設備在農田任何位置即可組網,以減少協調器的布局,實現方便快捷的動態數據監測。
1 田間監測系統的要求
 因監測節點需要零散分布在田間,以監測田間的空氣和地表的溫度,因此,田間監測系統所需要的技術指標應滿足:(1)低功耗。田間采電受到布線限制,因此節點模塊的耗電量應盡可能低。(2)低成本。田間需要大量布局節點,投資成本成為廣泛實施的制約因素。(3)低復雜度和高可靠性。田間節點開發設備應采用結構簡單、采集數據盡可能精確又廉價的設計。綜合上述特點,ZigBee可以作為田間無線協議首選。
 ZigBee協議是基于IEEE802.15.4標準的低功耗、低速率、低復雜度的雙向通信技術。它可工作在國際上免授權的2.4 GHz,具有250 Kb/s的最高數據傳輸速率和10~75 m的可靠傳輸距離。ZigBee支持星型、樹型、對等和混合型網絡拓撲結構,網絡中的從設備高達254個。根據如圖1所示的節點在網絡分布的特點,節點在網絡中可實現多條數據鏈路通信,以選擇最佳的路徑進行傳輸,提高了網絡通信的可靠性。

 協調器是整個網絡的核心部分,負責完成整個網絡的無線接入和組建,是維持路由器和終端節點之間的數據通信的關鍵。在田間固定放置協調器節點會浪費大量的資源,若動態地測量田間任意位置的數據,把協調器作為移動設備動態地測量數據則是最好的選擇,并且可以減少田間協調器的放置,降低設計難度的成本。
2 嵌入式Linux驅動開發環境的搭建
 Linux操作系統環境的搭建如圖2所示。

2.1 Bootloader的移植
 Bootloader是操作系統內核運行之前運行的一小段程序,它為加載內核提供合適的硬件環境。Bootloader分成Stage1和Stage2兩個階段,具體實現框圖如圖3所示。

 

 

 Stage1:主要由匯編實現,包括GPIO驅動、使開發板上電LED閃爍、關閉所有中斷、設置系統時鐘、關閉看門狗、SDRAM初始化、實現相應驅動(提供更大的執行空間)、NAND Flash初始化(驅動開發板上唯一的固態存儲掉電不消失設備)以及設置SP棧指針為Stage2中的C語言代碼執行做好準備。
Stage2:實現加電自搬移過程、串口調試信息、函數庫、shell命令等擴展功能。
2.2 內核的編譯和移植
 本硬件移植2.6.27版本的Linux內核:(1)解壓縮tar xf linux-2.6.27.tar.bz2,進入該目錄。(2)移植平臺為ARM體系結構,修改Makefile中的ARCH?=arm CORSS_COMPILE?=arm-linux-(交叉編譯器的前綴)。(3)配置內核:make deconfig(清除原來編譯的config,如果是第一次配置可省略);make menuconfig進入配置菜單,選擇硬件所需的驅動。大部分可選擇默認選項,但注意網卡驅動一定必選,硬件類型也要匹配。(4)編譯內核make bzImage在~/linux-2.6.27/arch/arm/boot/bzImage生成內核映像,通過tftp把bzImage燒到地址為0x30008000內存上,然后用nand erase kernel擦除kernel分區上的數據,最后用nand write 0x30008000把內存上的數據燒到Flash對應的kernel分區上。
2.3 根文件系統的移植
 運行Linux操作系統,除了內核外還需要根文件系統。用mkdir創建rootfs文件夾,在其中創建根文件系統目錄并安裝busybox。busybox是專門為嵌入式系統設計的,它把大多數常用的命令(如ls,cp,cd,tar等)拼接在一起,在根文件系統中只有一個可執行文件/bin/busybox,其余都是busybox的鏈接。安裝busybox與安裝內核類似,在~$tar xf busybox-1.9.1.tar.bz2、cd busybox-1.9.1/下修改ARCH?=arm CROSS_COMPILE?=arm-linux-;make defconfig、make menuconfig設置busybox安裝路徑rootfs文件夾。將make、make install、busybox文件與一系列鏈接文件安裝在rootfs下。其他鏈接文件在/bin、/sbin、/usr/bin、/usr/sbin中,配置Linuxrc啟動文件、安裝glibc共享庫,在/dev目錄下創建設備文件,將主機系統時鐘拷貝到根文件系統中去,并配置網路和http相關配置文件。最后將文件系統配置成YAFFS文件系統,可直接對文件系統進行讀寫。設置開發板為NFS方式,啟用可以直接在主機上操作開發板的根文件系統并進行調試。
3 硬件設計及驅動實現
3.1 系統硬件設計

 本系統平臺是采用ARM體系結構的S3C2410作為處理器,通過移植的字符設備驅動與ZigBee CC2430無線收發節點進行數據的傳輸。系統硬件框架圖如圖4所示。

 CC2430是一個真正的片上系統(SoC),以高性能和低功耗的8051為內核,專門針對IEEE802.15.4和ZigBee應用,它可以用很低的費用構成ZigBee節點。
    現有的硬件是通過串口實現數據傳輸,數據傳輸的格式要按照串口通信協議的格式封裝,大量數據的傳輸還需要在串口通信格式的基礎上再進行設計封裝,不僅數據傳輸速度慢,而且容錯能力低。如果在內核中加入ZigBee的字符驅動則可省去數據發送時的封裝以及接收時需要解析的麻煩。
3.2 Linux設備驅動實現
 Linux的輸入輸出設備分為字符設備、塊設備和網絡設備三類。字符設備是發送和接收都按照字符方式進行。塊設備則是傳輸固定大小的數據給設備。網絡設備則是通過BSD套接口訪問設備。驅動程序一般以模塊方式編寫,加載和卸載主要由module_init()和module_exit()完成[2]。
 (1)模塊加載和卸載
 模塊需要入口函數module_init(zigbee_init)的實現代碼如下:
int __init zigbee_init(void)
{
        if(zigbee_major){
          dev=MKDEV(zigbee_major,zigbee_minor);
          result=register_chrdev_region(ev,1,“zigbee”);
          }else{
          result=alloc_chrdev_region(&dev,zigbee_minor,1,
 “zigbee”);
          ……
          zigbee_major=MAJOR(dev);
          ……
          }
          cdev=cdev_alloc();
          cdev->ops=&zigbee_fops;
          rc=cdev_add(cdev,dev,1);
          ……;
          return 0
}
module_exit(zigbee_exit)
{
        cdev_dev(cdev);
        return 0
}
 在不同的系統中,同一設備的設備號不盡相同,如果靜態設置設備號,則在換另外的平臺時,設備號有可能沖突,所以動態分配是最佳選擇。
 (2)模塊驅動實現
 注冊設備編號后要將設備驅動與之連接,因此必須用file_operation結構建立鏈接,并建立中斷通知相關數據。其實現代碼如下:
Struct file_operation zigbee_fops={
        .owner=THIS_MODULE,
        .open=zigbee_open,
        .read=zigbee_read,
        .write=zigbee_write,
        .ioctl=.zigbee_ioctl,
        .relese=zigbee_release,
}
 當上層應用調用驅動程序時,驅動程序需要完成以下功能:
 ①初始化設備。S3C2410與下層ZigBee CC2430連接管腳處于工作狀態,注冊并使能中斷。
 ②按照ZigBee協議規則構建數據包并發送給CC2430,實現不同控制命令,使芯片完成數據發送和狀態間的轉換。
 ③當下位機接收到的數據與協議包格式不符時,產生中斷,用戶須重新發送數據。
 其實現代碼如下:
Int zigbee_open(struct inode *inode, struct file *filp)
{
        Rc=request_irq(IRQ_EINT0,zigbee_interrupt, SA_INTERRUPT,“zigbee”,NULL);
        Enable_irq();
        …
        Set_io(); //初始化I/O
        …
}
 用戶發送數據通過ssize_t zigbee_write(struct file *filp,const char __usr *buf, ssize_t count,loff_t *f_ops)傳到內核空間,然后調用構建數據包函數把數據打包發送出去。
 用戶控制下層命令,實現代碼如下:
int zigbee_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{
        Switch(cmd)
        Case A:
            Set_state(); //設置設備類型
        Case B:
            Set_restart();
        Case C:
            Set_start();
        Case D:
            Set_printf();//輸出網絡地址信息
}
Static zigbee_interrupt(int irq, void *dev_id)
{
        Flag=1;
        Set_restart();
        Outb(&buf, &add);
        Return IRQ_HANDLED;
}
 除實現以上函數外,還需要實現zigbee_relese(struct inode*inode, struct file*filp),釋放程序運行中所有資源。
 本文通過上位機處理器ARM9CS3C2410,設計了ZigBee內核字符驅動,輕松地實現了對下位機的控制,也方便了用戶的上層開發,提供了用戶與下位機數據傳輸的接口,避免了用串口進行數據傳輸時程序設計的繁瑣性。由于篇幅限制本文沒給出控制下層模塊命令的具體實現代碼。希望通過本文能促進ZigBee協調器驅動的進一步實現和研究。
參考文獻
[1] 楊帆,廖桂平,李錦衛,等.無線傳感器網絡在農田環境信息監測中的應用[J].農業網絡信息,2008(3):20-23.
[2] 甘勇,王華,常亞軍,等.基于ARM平臺的ZigBee網關設計[J].通信技術,2009,42(1):199-201.
[3] 魏守包,唐慧強.基于嵌入式ARM-uClinux的ZigBee網絡設計[J].儀表技術與傳感器,2009(1):62-64.
[4] 包長春,石瑞珍,馬玉泉.基于ZigBee技術的農業設施測控系統的設計[J].農業工程學報,2007,23(8):160~163.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 免费国产高清精品一区在线 | 日韩四区| 丁香天堂| 免费一级毛片视频 | 怡红院免费的全部视频 | x8x8国产日韩欧美 | 日b在线观看 | 欧美亚洲国产激情一区二区 | 91社区在线观看精品 | 成人影视在线观看 | 爱性大片在线观看 | 最近免费字幕高清在线观看 | 男女深夜福利 | 成人在线观看播放 | 天天摸日日舔 | 欧美一区2区三区3区公司 | 香蕉视频网页 | 国产高清网站 | 福利第一页| 亚洲91av| 国产高清一区二区三区免费视频 | 国产精品视频无圣光一区 | 欧美日韩一区二区不卡三区 | 国产午夜不卡在线观看视频666 | 人人爽人人爽人人片av免费 | 日本福利在线观看 | 亚洲一级毛片免费观看 | 特级毛片s级全部免费 | 国内在线观看精品免费视频 | 欧美一区二区三区久久综合 | 九九免费精品视频在这里 | 天天射天天爱天天干 | 午夜两性剧场 | 在线观看欧美国产 | 成人黄色免费看 | 黄网视频在线观看 | 日韩精品国产自在久久现线拍 | 午夜精品久久久久久久 | 91青草久久久久久清纯 | 夜夜弄 | 激情美女网站 |