基于S3C2410和Linux2.6的无线网络数据采集终端
引言
本文引用地址:http://www.amcfsurvey.com/article/199284.htm数据采集技术在工业现场控制、医疗监护、环境检测以及交通监控等领域有着广泛的应用。传统数据采集采用以单片机为核心的设计模式,数据的存储、传输以及实时分析都需要额外的PC的辅助来实现,其成本高、体积大、不便于携带。因此,本文提出基于ARM和Linux的嵌入式数据采集终端。硬件上选用SAMSUNG公司为PDA、Internet设备、手持终端等开发的S3C2410处理器,主频最高可达266MHz,内部提供丰富的外设接口。采用基于2.6内核的嵌入式Linux操作系统,具有易移植裁减、内核小、效率高、性能优异的网络模块等特点,最新的2.6内核在支持嵌入式应用方面做了很大的改进,能够很好的实现电源管理,并提供对IEEE802.11无线协议的良好支持。
1、系统结构与硬件设计
1.1 系统结构
嵌入式终端通过AD转换采集模拟信号,基于Qt Embedded的界面应用程序将多通道的采集结果以数据/时间的方式图表化实时显示在LCD上,以供用户实时分析比较。用户使用触摸屏与系统交互,可以选择对所采集数据基于无线网络传输或者存储至U盘等存储介质的操作。系统结构框图见图1。系统分层设计的,上层的Qt Embedded应用程序可以根据具体的用户需要来改写,而不会涉及底层硬件以及Linux系统。
1.2 硬件设计
硬件总体结构如图2所示。
核心板由S3C2410芯片、两片32M16bit位宽的SDRAM级联成的64M32bit位宽的SDRAM,64M的NAND FLASH组成。64M的SDRAM能够保证系统运行流畅,64M的FLASH也为ViVi引导程序、Linux内核及文件系统、Qt Embedded应用程序以及数据存储提供了足够的空间。
扩展板上主要是一些外设模块及其相关的扩展接口。S3C2410内部集成的LCD控制器通过SVT5001控制板驱动PVI的PA050XS1真彩色TFT显示模组,提供320*234的解析度。4线电阻式触摸屏通过MOSFET控制电路跟处理器内部触摸屏控制器相连。使用了TI公司的TLC2578芯片来实现数据采集,TLC2578是8通道12位ADC,最高支持200KSPS的采样,具有SPI接口,可以很方便的跟S3C2410上的高速SPI接口相连。S3C2410带有USB HOST 控制器,USB HOST接口可以连接无线网卡进行数据传输,或者连接U盘进行数据的复制存储。我们还保留了JTAG接口以及串口以便调试。
2、系统实现涉及的关键技术
2.1 Linux2.6内核移植
Linux2.6内核已经提供了对S3C2410处理器的支持。内核移植的主要工作在于采集终端所用硬件设备的驱动程序的移植上,这主要涉及设备模型的概念。统一设备模型的创建是2.6内核最重要的变化之一。它促进了模块接口的标准化,其目的是更好地控制和管理设备。设备模型主要涉及三个重要的内核数据结构,bus_type、devicedevice_driver:
1) bus_type(总线):总线是CPU跟各个设备之间的通道,系统中注册了一个名为platform_bus_type的总线。
2) device(设备):Linux系统的每一个物理存在的设备都用device结构的一个实例来表示,其成员包括该设备所要注册的总线以及所要使用的设备驱动,arch/arm/mach-s3c2410/devs.c文件中,有着S3C2410平台上所用设备的定义,他们以platform_device结构体的形式出现,该结构体是对device的封装,device结构中的platform_data成员是设备相关的一些特有信息的描述。系统启动时会将devs.c中所定义的相关platform_device设备注册进platform_bus_type总线。
3) device_driver(设备驱动):device_driver结构是Linux内核中各个设备驱动程序所要实现的一个结构。在驱动程序的起始函数中,driver_register函数完成各自的设备驱动向platform_bus_type总线的注册。注册过程会遍历该总线上已经注册的设备,找到与该设备驱动相匹配的接着调用该设备驱动的probe函数完成诸如寄存器设置、中断申请等在内的硬件初始化工作并将该设备驱动和匹配到的设备绑定。
对于嵌入式linux驱动程序开发和移植人员来说,设置各个设备的platform_data成员是一个重要内容。Linux内核已经提供了S3C2410处理器上包括LCD、触摸屏、NAND FLASH以及USB HOST在内的设备特有的相关信息的结构体描述,它们分别是s3c2410fb_mach_info、s3c2410_ts_mach_info、s3c2410_platform_nand以及s3c2410_hcd_info。我们结合所采用硬件的实际配置信息,对devs.c文件中所定义的各设备结构的platform_data成员进行赋值。以nand flash为例,在devs.c的s3c_device_nand中添加设备。dev={.platform_data=mydata},添加flash参数信息struct s3c2410_platform_nand mydata={tacls:0,twrph0:30,twrph1:0,nr_sets: 1,sets:nandset,},其中前三个参数需要参照flash芯片手册来设置,添加flash分区设置信息struct s3c2410_nand_set nandset ={nr_partitions: 5 ,partitions: part_info ,},添加分区状况信息static struct mtd_partition part_info[] ={……},最后还需将s3c_device_nand添加进smdk2410_devices指针数组。采用类似的方法可以实现内核对LCD、触摸屏以及USB HOST的支持。
YAFFS文件系统是针对NAND嵌入式应用设计的一种可读写的文件系统,性能优异,从网上获得其YAFFS2版本源代码,加入Linux内核代码中。对修改过后的内核源码进行配置,选上对MTD设备、NAND FLASH、LCD、触摸屏以及YAFFS文件系统等的支持,选择TCP/IP网络协议以及802.11无线通信协议的支持。Linux2.6.14之后的内核摒弃了原来的DEVFS,改用SYSFS代替,也应选上。这样修改过的内核源码可交叉编译下载到flash上。无线网卡的Linux下驱动经交叉编译后可直接使用,作为模块加载。
2.2 基于SPI接口的Linux下AD驱动的开发
S3C2410内部SPI接口兼容两通道SPI协议2.11版本,发送和接收具有2×8位的移位寄存器,可以基于DMA或者中断模式工作。我们使用TI公司的TLC2578芯片来实现数据采集。TLC2578是8通道12位ADC,最高支持200KSPS的采样,具有SPI接口,可以很方便的跟S3C2410相连,电路原理图见图3。
AD驱动程序最终实现一个字符设备,利用次设备号0-7来区分8个通道的模拟量输入。为了该驱动程序能够被上层的Qt应用程序方便的调用,我们需要实现以下的接口函数:
1) open调用:打开数据采集通道,需要注意的是open调用不应该自动启动AD采样,而应该由ioctl调用提供显式的控制接口。
2) release调用:关闭数据采集通道。
3) read调用:读取采样数据,阻塞式读取,以字节数返回读取到的数据量。
4) ioctl调用:提供以下一些设置命令。DS_ADC_START:启动AD采样,每次开始都会清空上次未读走的数据。DS_ADC_STOP:停止AD采样。
DS_ADC_SET_SAMPLE_INTERVAL:设定采样时间间隔。
DS_ADC_GET_COUNT:获取内存环行缓冲区中已存储的采样数据数量。
5) poll调用:供上层qt程序查询是否有采样数据可读。
我们在内核空间为每个通道维持一个环形数据缓冲区,在定时中断函数中向该缓冲区写入采样后的数据以供read调用处理。由于要实现最高10KHz的采样频率,也就是要求最短0.1ms的采样间隔,因此我们使用S3C2410的内部定时器timer2来产生0.1ms的定时间隔,并使用一个全局的32位无符号整型变量g_count来记录该时间间隔数。我们使用Tasklet的方法来响应timer2的定时器中断,中断处理函数只需要完成对g_count加1的工作,而AD转换输出数据的读取等相关工作则交由Tasklet机制来实现,Linux系统会在适当的时刻完成这项工作,一般是在退出中断处理程序之后,这样的中断响应机制可以提高系统的响应能力。Tasklet处理函数通过SPI口向TLC2578发送相应的命令,并从SPI口读回AD转换后的数据存入环形缓冲区,这个流程跟单片机上使用SPI接口与AD通信一致,在此不再赘述。
3、应用实例
基于S3C2410和Linux2.6的无线网络数据采集终端已经被市场采用,用于大中学生实验室实验数据的自动采集显示以及数据的上传,我们为其定制的Qt Embedded程序界面见图4。应用表明该终端的软硬件运行十分稳定,能够将所采集数据实时的在LCD上显示,以供使用者观察分析,提供良好的交互,使用起来十分方便,并且基于无线网络的数据传输避免了现场布线等问题。
4、结论
本文提出的基于S3C2410和Linux2.6的无线网络数据采集终端可以适用于多种场合,例如医疗监护、工业监控,环境检测,交通监控等等。针对不同场合应用时只需根据所需采集对象的不同为其添加合适的前置传感电路,应用界面的实现亦可根据实际需求定制,十分方便。802.11无线网络所具有的优势使得本便携式终端的应用前景十分广泛。
参考文献
[1] Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman, 魏永明等。Linux设备驱动程序第三版[M].北京:中国电力出版社,2006.359-403.
[2] 周余,都思丹,王自强,高敦堂。应用处理器PXA255上的嵌入式Linux系统开发[J].计算机应用,2004年第3期:158-160.
[3] 刘伟,童敏。Linux 2.6内核的嵌入式系统应用[J].电子技术应用,2006年第1期:73-75.
[4] Daniel P Bovet, Marco Cesati. Understanding the Linux Kernel 3nd Edition[M].America:O’Reilly Associates,2005.
[5] 刘淼。 嵌入式系统接口设计与Linux驱动程序开发[M].北京:北京航空航天大学出版社,2006.
[6] 孙天泽,袁文菊,张海峰。嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社,2005.
更多医疗电子信息请关注:21ic医疗电子频道
linux相关文章:linux教程
评论