基于嵌入式ARM-Linux無(wú)線(xiàn)ZigBee協(xié)調器驅動(dòng)設計
農田中大范圍的環(huán)境信息監測已成為網(wǎng)絡(luò )應用范圍重點(diǎn)之一。針對農田布線(xiàn)不便的特點(diǎn),ZigBee無(wú)線(xiàn)節點(diǎn)網(wǎng)絡(luò )成為農田信息采集系統的首選,可對其所分布區域內的各種環(huán)境和檢測對象的信息進(jìn)行實(shí)時(shí)的監控[1]。然而,控制下層整個(gè)網(wǎng)絡(luò )狀態(tài)的核心是上位機ARM處理器,而且上位機與下位機通信大多以串口模式來(lái)實(shí)現[2-3]。但串口通信模式存在串口傳輸速率低(波特率雙方一致)、傳送距離短[4]、數據冗余差(數據校驗)以及設計串口協(xié)議繁瑣(幀格式)等不足。因此本文研究了ZigBee在A(yíng)RM9內核中的協(xié)調器字符驅動(dòng),利用I/O傳輸數據,控制具有協(xié)調器驅動(dòng)的設備在農田任何位置即可組網(wǎng),以減少協(xié)調器的布局,實(shí)現方便快捷的動(dòng)態(tài)數據監測。
1 田間監測系統的要求
因監測節點(diǎn)需要零散分布在田間,以監測田間的空氣和地表的溫度,因此,田間監測系統所需要的技術(shù)指標應滿(mǎn)足:(1)低功耗。田間采電受到布線(xiàn)限制,因此節點(diǎn)模塊的耗電量應盡可能低。(2)低成本。田間需要大量布局節點(diǎn),投資成本成為廣泛實(shí)施的制約因素。(3)低復雜度和高可靠性。田間節點(diǎn)開(kāi)發(fā)設備應采用結構簡(jiǎn)單、采集數據盡可能精確又廉價(jià)的設計。綜合上述特點(diǎn),ZigBee可以作為田間無(wú)線(xiàn)協(xié)議首選。
ZigBee協(xié)議是基于IEEE802.15.4標準的低功耗、低速率、低復雜度的雙向通信技術(shù)。它可工作在國際上免授權的2.4 GHz,具有250 Kb/s的最高數據傳輸速率和10~75 m的可靠傳輸距離。ZigBee支持星型、樹(shù)型、對等和混合型網(wǎng)絡(luò )拓撲結構,網(wǎng)絡(luò )中的從設備高達254個(gè)。根據如圖1所示的節點(diǎn)在網(wǎng)絡(luò )分布的特點(diǎn),節點(diǎn)在網(wǎng)絡(luò )中可實(shí)現多條數據鏈路通信,以選擇最佳的路徑進(jìn)行傳輸,提高了網(wǎng)絡(luò )通信的可靠性。
協(xié)調器是整個(gè)網(wǎng)絡(luò )的核心部分,負責完成整個(gè)網(wǎng)絡(luò )的無(wú)線(xiàn)接入和組建,是維持路由器和終端節點(diǎn)之間的數據通信的關(guān)鍵。在田間固定放置協(xié)調器節點(diǎn)會(huì )浪費大量的資源,若動(dòng)態(tài)地測量田間任意位置的數據,把協(xié)調器作為移動(dòng)設備動(dòng)態(tài)地測量數據則是最好的選擇,并且可以減少田間協(xié)調器的放置,降低設計難度的成本。
2 嵌入式Linux驅動(dòng)開(kāi)發(fā)環(huán)境的搭建
Linux操作系統環(huán)境的搭建如圖2所示。
2.1 Bootloader的移植
Bootloader是操作系統內核運行之前運行的一小段程序,它為加載內核提供合適的硬件環(huán)境。Bootloader分成Stage1和Stage2兩個(gè)階段,具體實(shí)現框圖如圖3所示。
Stage1:主要由匯編實(shí)現,包括GPIO驅動(dòng)、使開(kāi)發(fā)板上電LED閃爍、關(guān)閉所有中斷、設置系統時(shí)鐘、關(guān)閉看門(mén)狗、SDRAM初始化、實(shí)現相應驅動(dòng)(提供更大的執行空間)、NAND Flash初始化(驅動(dòng)開(kāi)發(fā)板上唯一的固態(tài)存儲掉電不消失設備)以及設置SP棧指針為Stage2中的C語(yǔ)言代碼執行做好準備。
Stage2:實(shí)現加電自搬移過(guò)程、串口調試信息、函數庫、shell命令等擴展功能。
2.2 內核的編譯和移植
本硬件移植2.6.27版本的Linux內核:(1)解壓縮tar xf linux-2.6.27.tar.bz2,進(jìn)入該目錄。(2)移植平臺為ARM體系結構,修改Makefile中的ARCH?=arm CORSS_COMPILE?=arm-linux-(交叉編譯器的前綴)。(3)配置內核:make deconfig(清除原來(lái)編譯的config,如果是第一次配置可省略);make menuconfig進(jìn)入配置菜單,選擇硬件所需的驅動(dòng)。大部分可選擇默認選項,但注意網(wǎng)卡驅動(dòng)一定必選,硬件類(lèi)型也要匹配。(4)編譯內核make bzImage在~/linux-2.6.27/arch/arm/boot/bzImage生成內核映像,通過(guò)tftp把bzImage燒到地址為0x30008000內存上,然后用nand erase kernel擦除kernel分區上的數據,最后用nand write 0x30008000把內存上的數據燒到Flash對應的kernel分區上。
2.3 根文件系統的移植
運行Linux操作系統,除了內核外還需要根文件系統。用mkdir創(chuàng )建rootfs文件夾,在其中創(chuàng )建根文件系統目錄并安裝busybox。busybox是專(zhuān)門(mén)為嵌入式系統設計的,它把大多數常用的命令(如ls,cp,cd,tar等)拼接在一起,在根文件系統中只有一個(gè)可執行文件/bin/busybox,其余都是busybox的鏈接。安裝busybox與安裝內核類(lèi)似,在~$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啟動(dòng)文件、安裝glibc共享庫,在/dev目錄下創(chuàng )建設備文件,將主機系統時(shí)鐘拷貝到根文件系統中去,并配置網(wǎng)路和http相關(guān)配置文件。最后將文件系統配置成YAFFS文件系統,可直接對文件系統進(jìn)行讀寫(xiě)。設置開(kāi)發(fā)板為NFS方式,啟用可以直接在主機上操作開(kāi)發(fā)板的根文件系統并進(jìn)行調試。
3 硬件設計及驅動(dòng)實(shí)現
3.1 系統硬件設計
本系統平臺是采用ARM體系結構的S3C2410作為處理器,通過(guò)移植的字符設備驅動(dòng)與ZigBee CC2430無(wú)線(xiàn)收發(fā)節點(diǎn)進(jìn)行數據的傳輸。系統硬件框架圖如圖4所示。
CC2430是一個(gè)真正的片上系統(SoC),以高性能和低功耗的8051為內核,專(zhuān)門(mén)針對IEEE802.15.4和ZigBee應用,它可以用很低的費用構成ZigBee節點(diǎn)。
現有的硬件是通過(guò)串口實(shí)現數據傳輸,數據傳輸的格式要按照串口通信協(xié)議的格式封裝,大量數據的傳輸還需要在串口通信格式的基礎上再進(jìn)行設計封裝,不僅數據傳輸速度慢,而且容錯能力低。如果在內核中加入ZigBee的字符驅動(dòng)則可省去數據發(fā)送時(shí)的封裝以及接收時(shí)需要解析的麻煩。
評論