随着城市交通的迅速发展,机动车流量急剧增加,使得交通管理面临着新的挑战,由于某些驾驶员交通法律意识淡薄,为达目的闯红灯行驶,特别是在无交警值守的区域,问题更为严重。电子警察系统,就是将在交通路口抓拍到的违章照片传回控制中心,进行分析处理和保存,并作为违章证据处罚违规的司机。电子警察系统在实现警务工作网络化、现代化、智能化进程中有着重要作用。电子警察一般由三大部分组成,一是照片拍摄部分;在红灯信号期间,控制器控制数码相机拍摄违章车辆照片,并存储到相机存储卡上。二是照片传输部分;将数码相机存储卡中的相片传送回监控中心。三是照片处理部分;在控制中心,工作人员将照片进行统计处理。照片传输部分常用的方法有人工取图、基于PC的工控机传送两种。人工取图方式耗费大量人力,无法及时获取照片,无法实现自动化操作;基于PC的工控机传送方式,成本高,体积大,安装不方便。基于ARM的嵌入式系统的出现解决了以上两种传送方式中的存在的缺点。
本文主要研究介绍:
(1)嵌入式系统的结构;
(2)如何利用嵌入式操作系统和ARM处理器构建电子警察照片传输设备;
(3)介绍此设备的实际应用。
嵌入式系统是一个硬件和软件的集合体,由嵌入式微处理器、嵌入式操作系统以及承载操作系统的硬件平台组成。嵌入式系统软硬兼施,互利互惠,融为一体。
嵌入式系统中引导程序(Bootloader)的作用与PC的BIOS(BasicInputOutputSystem)相似,通过引导程序可以完成对ARM板上的主要部件CPU、SDRAM、Flash、串口等进行初始化操作,并能完成下载文件,Flash擦写等操作。一个功能完善的引导程序相当于一个微型的操作系统。
操作系统内核运行之前,引导程序完成加载内核和一些辅助性的工作,然后跳转到内核代码的起始地址并执行。引导程序可以初始化硬件、建立内存空间映射,从而将系统的软硬件环境带到一个合适的状态,以便最终调用系统内核。简言之,Bootloader为操作系统提供硬件资源信息,并进一步加载、引导操作系统。
引导程序通常固化在FLASH或ROM中,基于ARM内核的CPU在复位时通常从地址0x取第一条指令。因此,基于ARM的嵌入式系统通常都有某种类型的固态存储设备被映射到这个地址上。系统上电后首先执行Bootloader程序。如图1所示是一个装有Bootloader、内核参数、内核映像和根文件系统映像的固态存储设备空间分配结构图。
通常,嵌入式系统硬件平台主要分为2大部分:一部分为系统主板,为基于ARM的最小系统,包括CPU、Flash、SDRAM、串口等最基本部分;另一部分为系统扩展,提供用于完成各种不同功能的硬件模块。如存储设备,闪存(FlashMemory);通信设备以太网卡,USB控制器等。
嵌入式系统软件包括与硬件相关的底层软件、操作系统、图形界面、通信协议、数据库系统和应用软件等。嵌入式系统的软件部分具有以下特点:
(1)软件代码要求高质量、高效率和高可靠性。在嵌入式系统中,软件的运行空间有限,内存空间十分宝贵,在程序设计时需要时刻考虑软件的运行效率。由于嵌入式设备的工作环境多变,因此嵌入式软件设计需要有质量高、可靠性高的代码作为保障。
(2)嵌入式软件开发与硬件紧密联系。嵌入式软件的开发是针对特定的硬件平台进行的,它牵扯到硬件驱动方面的一些软硬件结合部分。
(3)软件要求固化。为了提高执行速度和系统的可靠性,大多数嵌入式系统软件需要固化到系统板的Flash或ROM中。
此外,嵌入式系统软件还需要具有异常处理,快速复位的特点。在实时系统中,软性必须具有对实时多任务很强的支持能力,快速响应并将执行时间减少到最低限度。
(1)上位机服务器。向终端发出数据和命令;接收终端上传的照片并进行保存处理。可实现人工操作、自动定时操作、单终端控制、所有终端控制功能。
(2)采集照片。终端设备从数码相机中将照片采集到本地存储器中,以保证在照片传输过程中不影响数码相机正常工作。
此系统设计主要是为了满足数码相机中的照片能够安全、及时的传送到控制中心。因此系统采用C/S(客户端/服务器)模式设计,由控制中心的服务器发送命令控制终端设备进行取图传图操作。系统设计框图如图2所示。
终端设备CPU选用Samsung公司的基于ARM7TDMI核的16/32bit、低功耗、高性价比RISC控制器S3C44B0;操作系统选用网络功能强大、可靠性好、便于移植裁剪、针对无MMU(内存管理单元)控制器的开源操作系统uClinux。
终端设备硬件设计本着接口标准化、功能模块化、扩展性好、可靠性高的原则,划分为CPU模块和外设模块。
(1)CPU模块:包括S3C44B0、SDRAM、NORFlash等系统运行的基本要素,组成嵌入式系统的最小系统。
S3C44B0芯片本身集成了一些通用的外围器件,如UART则直接利用控制器的资源。片内2个UART分别作为操作系统控制台及与相机控制板的通讯接口。将海量存储器NANDFlash、USB控制器SL811、网络芯片RTL分别映射于处理器的Bank1、Bank2、Bank4地址空间上,实现外部模块与CPU模块的无缝连接。其中NANDS3C44B0芯片本身集成了一些通用的外围器件,如UART则直接利用控制器的资源。片内2个UART分别作为操作系统控制台及与相机控制板的通讯接口。将海量存储器NANDFlash、USB控制器SL811、网络芯片RTL分别映射于处理器的Bank1、Bank2、Bank4地址空间上,实现外部模块与CPU模块的无缝连接。其中NANDFlash使用复杂的I/O口来串行地存取数据,8个引脚用来传送控制、地址和数据信息。各个厂商的方法可能不一样。因此在0x-0x空间中完全可以使用64M×8Bit的NANDFlash存储器。终端设备的硬件框图如图3所示。
终端设备的核心板尺寸为:120mm×80mm,体积小巧,接口标准且安装方便。既可以独立使用,又可以作为模块嵌入到其他系统中。
终端设备软件设计遵循的原则是:软件结构化、系统可裁剪定制、驱动标准化、应用程序模块化。软件设计的主要工作是引导程序Uboot移植,操作系统uClinux移植,驱动程序设计,常用API函数封装,多任务多进程的分解与设计,基于Socket的网络编程等。图4所示为终端设备的软件结构化设计。
在驱动层比较关键的是NORFlash存储器驱动设计与KodakDx数码相机USB驱动程序的设计。NORFlash驱动为实现在线更新功能实现最底层的支持,保证Bootloader、Kernel、Rootfilesystem在存储器中准确存放。值得注意是NORFlash的擦写有严格的时序,根据CPU主频不同在擦写过程中加入适当的延时函数能保证Flash正常工作。由于柯达相机的存储卡在Linux下不能当作大容量存储设备(MassStorageDevice)进行操作,换言之不能当作移动存储在uClinux系统下挂载,因此在进行设备驱动程序设计时应选择USB设备类驱动,通过厂商标识(ManufactureID)及产品标识(ProductID)在系统中注册匹配,进而完成驱动功能,数据传输过程中采用批量传输方式。
在应用层,基于Socket的网络编程支持TCP/IP协议有较好的通用性,能应用于RJ45接口的各种网络环境。照片数据传输遵守PTP协议(PIMA:),便于移植。由于应用程序采用模块化设计,终端与服务器通信采用一个进程,终端获取图片使用一个进程因此进程间通信显的尤为重要。首先,采用信号作为主要的通信手段;其次,采用共享内存方式。由于在uClinux内存采用实地址操作,没有内存管理机制,因此在软件设计时笔者采用共享内存的思想在系统未用的内存区域开辟出一块空间作为共享内存,从而完成进程间通信。
本程序中数码相机驱动以USB字符型设备来实现,USB设备驱动第一步要做的是通过usb_driver结构向uClinux内核注册自己,告诉系统它所支持的设备类型及操作类型。