0 引言
无线数据传输现在广泛地运用在车辆监控、遥控、小型无线网络、小型无线数据终端等领域中,无线数据传输主要由数据终端机、主机和主控制机组成,主控制机与主机间用串行口通信,主机和数据终端机之间通过射频模块进行通信。
传感器采集信号后传给数据终端机,终端机通过射频模块进行无线数据传输,主控制机与数据终端的通信转化为主控制机与主机串口(UA RT)间的通信以及数据终端通过无线数传模块和主机之间的数据传输,在此基础上形成了无线分布式传感/控制网络(Wireless Distribution ed Sensor/Control Networks,WDSCN)的处理机的软硬件系统搭建。无线数据传输的处理系统采用嵌入式系统辅以适当无线数传模块来实现。系统中用射频模块来完成数据的传输,用嵌入式系统来实现对传输数据的处理和存储、网络通信、外部控制等任务。
1 射频模块的设计
射频模块的主要功能由无线收发芯片nRF401配合外围电路完成,该模块内部结构分为发射电路、接收电路、模式和低功耗控制逻辑电路以及串行接口几个部分组成。
发射电路有射频功率放大器(PA)、锁相环(PLL)、压控振荡器(VCO)、频率合成器等。基准振荡器采用外接晶体振荡器产生电路所需的基准频率,振荡电路采用锁相环方式,由在DDS基础上的频率合成器、外接的无源回路滤波器和压控振荡器组成,压控振荡器由片内的振荡电路和外接的LC谐振回路组成,要发射的数据通过DIN端输入。
接收电路由低噪声放大器(LNA)、混频器、中频放大器、GFSK解调器、滤波器等电路组成,中频放大器的输出信号经过中频滤波器后送入GFSK解调器解调,解调后的数字信号在DOUT端输出。
芯片内包含有发射功率放大器、低噪声接收放大器、晶体振荡器、锁相环、压控振荡器、混频器等电路,工作频率为ISM频段433 MHz,采用FSK调制解调、晶体振荡和PLL频率合成技术,接收灵敏度为-105 dBm,发射功率为10 dBm,待机状态电流消耗仅10μA。在接收模式中,射频输入信号被低噪声放大器放大,经由混频器变换,在送入解调器之前被放大和滤波,解调后的数字信号在DOUT端输出。在发射模式中,压控振荡器的输出信号是直接送入到功率放大器,DIN端输入的数字信号被频移键控后馈送到功率放大器输出。射频模块的电路如图1所示。
2 嵌入式系统
一般而言,嵌入式系统的构架可以分为4个部分:处理器、存储器、输入/输出(I/O)和软件。嵌入式系统是软件和硬件的综合体,它是以应用为中心,以计算机技术为基础,软、硬件皆可以裁剪,从而能够适应于工业和服务领域实际应用中。
由于μClinux在设计时就已经充分考虑了可移植性,所以将μClinux移植到S3C44B0相对来说是比较容易的。但要使μClinux正常运行,处理器必须满足以下要求:
(1)处理器的C编译器能产生可重入代码。
(2)用C语言就可以打开和关闭中断。
(3)处理器支持中断,并且能产生定时中断(通常在10~100 Hz之间)。
(4)处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。
2.1 Bootloader的工作
Bootloader就是在操作系统内核运行之前运行的一段程序,通过这段程序可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。因此,正确建立μClinux的移植的前提条件是具备一个与μClinux配套、易于使用的Bootloader。
硬件初始化。系统上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关Watchdog Timer,关中断,初始化PLL和时钟,初始化存储器控制器。比较重要的是PLL的输出频率要计算正确,ARMSYS中把它设置为64 MHz;这实际上就是处理器的工作主频,这个时间参数在第二阶段计算SDRAM的刷新计数值和UART的波特率等参数时还要用到。
建立二级异常中断矢量表。异常中断矢量表(Exception Vector Table)是Bootloader与μClinux内核发生联系关键的地方之一。即使μClinux内核已经得到处理器的控制权运行,一旦发生中断,处理器还是会自动跳转到从0x0地址开始的第一级异常中断矢量表中的某个表项(依据于中断类型)处读取指令运行。在编写Bootloader时,地址0x0处的一级异常中断矢量表只需简单地包含向二级异常中断矢量表的跳转指令就可以。这样,就能够正确地将发生的事件交给μClinux的中断处理程序来处理。对于μClinux内核,它在RAM空间中基地址为0xC000000处建立了自己的二级异常中断矢量表。
如果在Bootloader执行的全过程中都不必响应中断,那么上面的设置已能满足要求。在ARMSYS上提供了USB下载器,需要用到中断,Boot loader必须在同样的地址(0xC000000)处配置自己的二级异常中断矢量表,以便同μClinux兼容。这张表事先存放在FLASH MEMORY里,引导过程中由Bootloader将其复制到RAM地址0x0C000000。
2.2 源代码裁剪与移植
将μClinuX-dist-20040408.tar.gz拷贝到/home/下(或者其他目录都可以),运行解压命令:tar xvzfμClinux-ARMSYS-20040801. tar.gz,解压结束后会在/home/下生成μClinux-dist目录。
配置与编译。安装编译环境,到以下地址下载arm-elf工具链:http://www.uclinux.org/pub/μClinux/m68k-elf-tools/arm-elf-tools-20030314.sh。将arm-elf-tools-20030314.sh拷贝到根目录,运行安装:
sh arm-elf-tools-20030314.sh
然后开始配置μClinux的内核和用户选项,打开终端。
# cd/home/uClinux-dist
# make menuconfig
进入μClinux配置(μClinux V3.1.0 Configuration),选中“Kernel/Library/Defaults Selectiona”敲空格进入。其中有两个选项:定制内核设置和定制用户选项设置:
[*]Customize Kernel Settings
[]Customize Vendor/User Settings
选中定制内核设置选项,按下ESC键退出,在询问是否保存时,选择Yes并回车。终端将首先进入内核配置选单。在配置μClinux内核时,就可以通过对这些选项的选择和取消选择来设定内核所具有的功能项,这也是裁减μClinux内核的基本方法。每个选项都对应着一个宏定义,make menuconfig执行结束后,自动将配置结果保存为.config文件,将前一次的配置结果备份为.config.old文件。
交叉编译。按下面的步骤对μClinux源码包进行编译:
# make dep
# make clean(非必要)
# make lib_only
# make user_only
# make romfs
# make image
# make
初次移植时,在make lib_only到make这5步编译过程中很可能产生错误,无法继续下去,如果产生了错误,可以尝试根据报告的错误内容修改一下源程序,交叉编译成功后,在μClinux-dist/目录下产生images目录,其中包含的3个文件:image.ram,image.rom和romfs.img就是我们可以使用的二进制文件,下载或烧录这些二进制文件,并启动运行μClinux。出现正确提示信息后,可以尝试从键盘输入ls,ping命令,来查看系统的运行情况,编写简单的应用程序,看是否能够正确运行。
2.3 嵌入式处理器程序
应用程序的部分具体代码如下:该部分完成了嵌入式控制器硬件初始化、操作系统初始化、GUI以及用户界面、时钟的初始化,创建了一个主任务,启动了多任务调度。
3 结语
本文通过对无线传感器/控制网络技术的研究,提出了一种基于射频通信技术的无线数据采集和控制方案,利用所开发的无线通信模块构建了一个无线分布式传感/控制网络,实现了传感器数据的实时采集。开发了一种短距离无线数据传输平台。目前测试通讯距离为80m,无线通信最高速率可达到20Kb/s。