基于ARM-Linux的远程数据通信模块设计
2012-07-25姚文俊刘春力裴焕斗
姚文俊,刘春力,裴焕斗
(1.中北大学,太原030051;2.山西百得科技开发有限公司,太原030006)
1 引言
近年来我国机械设备行业发展迅猛,各式移动装备广泛应用于建筑、港口和农业等众多领域。由于移动装备现场工况复杂且极其恶劣,对装备的安全监控与管理提出了更高的要求。对移动装备的监控管理不再满足于故障事后处理,而是更加强调对装备自身工况信息的实时采集和分析。工业运行中的许多现代化大型设备,为了安全、稳定、长周期、满负荷优质运行,设备制造商往往会在产品中安装一些传感器,方便的告知客户设备的运行状况,以降低因设备故障造成的损失。然而设备制造方限于种种原因,并不掌握设备在用户处的运行工况,难以根据设备的运行参数帮助用户实时诊断和分析故障及故障预测。因此可通过一套数据传送终端来将设备的运行参数通过远程监控技术发送给制造商,有效地进行故障诊断分析,降低客户的故障损失,更好的开展售后服务。
远程监控技术主要包括专线远程监控技术、电话网远程监控技术、以太网远程监控技术和无线通信远程监控技术。特别是对于工作点多、通信距离远、环境恶劣且实时性和可靠性要求比较高的场合,可以利用无线网络通信来实现主控站与各个子站之间的数据通信,采用这种无线通信远程监控技术有利于解决复杂连线的问题,无须铺设各种线缆,降低环境成本。随着GPRS的推广和应用,采用GPRS技术来解决上述问题成为一种较好的方案。GPRS是利用“包交换”的概念所发展出的一套无线传输方式,采用包交换的好处在于只有在有资料需要传送时才会占用频宽,使若干移动用户能够同时共享一个无线信道,一个移动用户也可以使用多个无线信道。
2 系统介绍
通过应用GPRS网络实现了计算机或手机与ARM嵌入式处理器终端的远程通信。系统整体上可分为数据采集模块、数据传输控制模块、无线传输网络及数据处理终端模块。其中数据传输终端的核心部分为Atmel公司的AT91SAM9263和SIMCOM公司的SIM300 GPRS模块。图1所示为系统的整体框图,其中数据传输终端模块的设计为主要任务,包含ARM最小系统、无线传输模块及一些通信接口(如232串口、USB接口、网口)。
图1 系统整体框图
2.1 硬件整体设计
选用Atmel公司的AT91SAM9263,其通信功能非常强大,是目前功能最强大的ARM芯片之一。设计中用到的外围通信接口包括用于下载烧写bootstrap、uboot、Linux内核等的USB Device接口和具有网络调试下载功能的以太网接口,用于调试程序的JTAG接口以及用于与GPRS模块和PC机连接通信的两个UART接口(UART0、UART1)。除了通信接口外,还有组成ARM最小系统所必须的电源模块、时钟模块、DataFlash、NandFlash以及SDRAM等。其中UART0与GPRS模块连接,UART1与PC机串口连接。电路硬件原理框图如图2所示。
2.2 GPRS无线模块接口设计
在无线模块SIM300与ARM芯片的接口设计中,TXD0(PA26)和 RXD0(PA27)接到 GPRS对应的 RXD与 TXD引脚上,RTS0(PA28)和 CTS0(PA29)可在GPRS上网时连接。电源部分因GPRS或GSM发射需要很大的电流,故应最大能提供到2A电流,工作电压应保证在3.4V-4.5V之间。模块启动方式是通过控制PWRKEY(PE11)管脚即在该管脚上产生一个一段时间的低电平,然后为高阻态即可启动模块。模块关闭也可通过PWRKEY管脚,操作方法与开启时的操作方法一样。
图2 ARM终端功能框图
3 嵌入式Linux操作系统的移植
3.1 系统分区
基于AT91SAM9263的嵌入式Linux系统的基本组成为 Bootstrap、U-boot、Kernel、Rootfs,同时移植也是按这个顺序来进行的,并且是按dataflash启动的方式进行移植。图3为dataflash和nandflash存储空间的资源分配情况。各部分的分区大小是在uboot下指定的,将 bootstrap、uboot、linux kernel存放于dataflash中,将文件系统存放于nandflash中,而nandflash分为两个分区,分区0作为rootfs(Cramfs格式),分区1用于自定义。具体的程序修改不再赘述,主要说明映像文件的编译方法和烧写过程。
图3 Dataflash启动存储器映射图
3.2 编译烧写bootstrap
首先安装windows下的交叉编译工具链armnone-eabi-gcc,然后分别运行:cd board/at91sam9263ek/dataflash/、make clean 和 make生成dataflash_at91sam9261ek.bin文件。打开烧写工具SAM-BA软件,使用USB口烧写。选择DataFlash标签,在下拉菜单中选择Enable Dataflash on CS0,按Execute按钮,接着选择Send boot file,按Execute按钮,最后选择dataflash_at91sam9261ek.bin打开烧写。
3.3 编译烧写uboot
在Linux系统下安装交叉工具链arm-linuxgcc,然后在/etc/profile文件中修改环境变量路径为交叉工具链的路径,再用命令service/etc/profile使路径生效,这样以后就可以直接使用make命令了。最后执行make at91sam9263ek_config和make命令生成u-boot.bin文件,通过sam-ba工具烧录到dataflash的0x8400地址。具体步骤为在DataFlash标签下的Address处写入 uboot的烧写地址0x8400,按Send File Name按钮,打开u-boot.bin,按Send File按钮,等待烧写完成。
3.4 编译烧写内核
解压Linux内核,cd到根目录下,利用mkimage工具编译内核来生成uImage内核镜像,具体步骤及命令为:①make distclean→②→make at91sam9263ek_defconfig→③→./mkimage-A arm-O linux-C none-T kernel-a 20008000-e 20008000-n linux-2.6-d arch/arm/boot/zImage uImage。即可编译生成支持uboot格式的uImage映像文件。烧写方法与uboot相同,只需在Address处写入Linux内核烧写地址0x42000即可。
3.5 根文件系统的制作与烧写
首先用mkdir命令建立roofs根文件夹并参考Linux系统建立根文件系统目录树,然后编译安装busybox到根文件下,最后利用mkcramfs工具制作文件系统,即用命令./mkcramfs rootfs rootfs_cramfs生成根文件的映像文件,最后将此文件通过sam-ba烧写到nandflas。选择nandflash标签,在Address处写入根文件系统的烧写地址0x400000进行烧写。
至此嵌入式Linux系统在AT91SAM9263平台上的移植已经完成。
4 应用程序设计
在终端软件应用程序的设计中,由于有多个外部设备(不同功能的传感器及GPRS模块)需要操作,所以采用多进程编程实现。这些设备以设备文件的形式进行访问,而访问设备文件时,采用阻塞方式。用fork()函数分别创建GPRS_PID、FIRE_PID、Temp_PID、Smog_PID、Speed_PID等进程。进程间通信采用消息队列方式,当GPRS模块接收和发送消息时用msgget()创建和打开消息队列,用msgsnd()添加要发送的消息内容,用msgrcv()读取消息内容。在判断消息类型及是否异常消息时采用switch()case语句分情况比较消息内容与程序已设定的标号来调用相应的函数进行处理。其中GPRS功能函数是通过编写串口应用程序来实现短信息的接收和发送等功能。通过手机或电脑发送AT指令来控制ARM终端模块对数据进行操作,以实现相应的功能。每个指令执行成功与否都有相应的返回,模块将有对应的一些信息提示,接收端可做相应的处理。图4为应用程序的整体流程图。
图4 应用程序整体流程图
5 结束语
选用ARM芯片AT91SAM9263和SIM300 GPRS无线通信模块设计的一种远距离数据通信模块可广泛应用于建筑、港口和农业等众多领域中现场状况的监控,以及工业中许多现代化大型设备运行状态的实时检测等等。同时由于GPRS具有“高速”和“永远在线”的优点,使用GPRS技术传输效率更高,功耗更低,而且应用无线传输更能节省成本。系统可长时间稳定的监控工况信息以及设备的运行状态等,便于及时做出维修改进,确保机器设备的正常运行。
[1] 李俊.嵌入式LINUX设备驱动开发详解[M].北京:人民邮电出版社,2008.
[2] 华清远见嵌入式培训中心编著.嵌入式Linux应用程序开发标准教程[M].北京:人民邮电出版社,2009.
[3] 张向涛,朱红.基于GSM和ARM的远程监控系统的研究[J].广西通信技术,2006,9(3):13-16.
[4] 黄强,陶正苏,宋浩,等.基于ARM的GPRS远程数据传输模块设计[J].电子器件,2008,31(4):1214-1218.