当前位置:易博PCB抄板工作室 >> 技术文档 >> ARM-Linux无线ZigBee协调器驱动设计

ARM-Linux无线ZigBee协调器驱动设计

    农田中大范围的环境信息监测已成为网络应用范围重点之一。针对农田布线不便的特点,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分区上。