随着计算机视觉技术以及图像处理技术的不断发展,计算机视觉和视频检测技术已经广泛应用于工业控制、智能交通、设备制造等很多领域。传统的视频检测往往采用工控机作为其视频处理器来实现其功能。这种方法往往由于工控机处理速度的问题,无法实现对各个不同方向同时进行视频检测,而且由于视频检测处理过程需要占用大量的处理时间,因而无法实现实时的远程控制功能。
目前在远程控制和通信方面,基于DOS和Windows操作系统的通信平台得到普遍的引用,但是DOS操作系统作为单任务操作系统,无法实现多任务功能和实时处理的要求;而Windows操作系统作为视窗操作系统,其系统的稳定性和实时性也无法与实时多任务嵌入式操作相比拟。 本文提出一种以DSP作为视频检测处理芯片,以Linux为操作系统的嵌入式系统设计方法。
1 系统结构
本系统的开发主要包括视频检测卡和x86通信平台的设计2个部分。视频检测卡主要包括模拟图像采集、转换、DSP视频检测3个部分,每块交换参数检测卡扩充PCI总线接口,插在通信开发平台的PCI总线插口上,通过PCI总线同通信平台交换数据。通信平台处理多块交通参数检测卡的通信问题,将视频检测卡通过PCI总线传送过来的视频检测数据实时通过网络传送给控制中心。系统的功能方框图如图1所示。
根据系统设计要求,视频检测卡功能主要分为:模拟图像采集、模拟图像A/D转换、数据缓存以及DSP视频检测5个部分。视频检测卡流程如图2所示。
本系统采用PhilIPs公司的SAA7111A来实现模拟图像A/D转换。该芯片可实现多路选通、锁相与时序、时钟产生与测试、ADC、亮色分离等功能。其输出可以具有如下格式:YUV 4:1:1(12bit)、YUV 4:2:2(16bit)、YUV 4:2:2(CCIR-656)(8bit)等。由于DSP处理芯片和SA7111A的时序不同,可以通过CPLD进行逻辑控制FIFO来完成数据缓存的功能。
DSP是实时信号处理的核心。本系统采用TI公司DSP芯片——TMS320C6211。该芯片属C6000的定点系列,C6211在这个系列中是性价比最高的一种。C6211处理器由3个主要部分组成:CPU内核、存储器和外设。集成外设包括EDMA控制器、外存储器接口(EMIF)、主机口(HPI)、多通道缓冲接口(McBSP)、定时器、中断选择子、JTAG接口、PowerDown逻辑以及PLL时钟发生器。通过EMIF接口扩充 SDRAM,而PCI总线控制芯片的扩展通过HPI接口。
PCI总线的接口芯片PCI9050,主要包括PCI总线信号接口和本地总线(LOCAL BUS)信号。在硬件设计时,只需将本地总线信号的接口通过电平转换连接到DSP的HPI接口,同时扩展PCI接口就可以完成其硬件电路设计。
2 通信开发平台的嵌入式系统设计
通信开发平台以x86为核心器件,扩充PCI总线,通过Modem拨号,实现x86与Internet的连接。
2.1 PCI总线设备驱动
PCI设备有3种物理空间:配置空间、存储器空间和I/O空间。配置空间是长度为256字节的一段连接空间,空间的定义如图3所示。在配置空间中只读空间有设备标识、供应商代码、修改版本、分类代码以及头标类型。其中供应商代码用来标识设备供应商的代码;设备标识用来标识某一特殊的设备;修改版本标识设备的版本号;分类代码用来标识设备的种类;头标类型用来标识头类型以及是否为多功能设备。除供应商代码之外,其它字段的值由供应商分配。
命令字段寄存器用来提供设备响应的控制命令字;状态字段用来记录PCI总线相关事件(详细的命令控制和状态读取方法见参考文献4)。
基地址寄存器最重要的功能是分配PCI设备的系统地址空间。在基地址寄存器中,bit0用来标识是存储器空间还是I/O地址空间。基地址寄存器映射到存储器空间时bit0为“0”,映射到I/O地址空间时bit0为“1”。基地址空间中其它一些内容用来表示PCI设备地址空间映射到系统空间的起始物理地址。地址空间大小通过向基地址寄存器写全“1”,然后读取其基地址的值来得到。
PCI设备的驱动过程主要包括下面几个步骤。
首先,PCI设备的查找。在嵌入式操作系统中一般提供相应的API函数,在Linux操作系统中通过函数 pcibios_find_device(PCI_VENDOR_ID,PCI_DEVICE,index,&bus,&devfn)可以找到供应商代码为PCI-ID,设备标识为PCI-DEVICE的第n(index+1)个设备,并且返回总线号和功能号,分别保存于bus和 devfn中。
第2步,PCI设备的配置。通过操作系统提供的API函数访问PCI设备的配置空间,配置PCI设备基址寄存器的配置、中断配置、ROM基地址寄存器的配置等,这样可以得到PCI的存储器空间和I/O地址空闲映射,设备的中断号等。在Linux操作系统中,访问PCI设备配置空间的API函数有 pcibios_write_config_byte、pcibios_read_config_byte等,它们分别完成对PCI设备配置空间的读写操作。
第3步,根据PCI设备的配置参数,对不同的设备编写初始化程序、中断服务程序以及对PCI设备存储空间的访问程序。
2.2 远程控制与通信链路的建立
与Internet连接的数据链路方式主要有Ethernet方式和串行通信方式。Ethernet连接方式是一种局域网的连接方式,广泛应用于本地计算机的连接。通过Modem进行拨号连接的串行通信方式,可以实现远距离的数据通信,下面详细介绍串行通信接口协议方式。
串行通信协议有SLIP、CSLIP以及PPP通信协议。SLIP和CSLIP提供一种简单的通过串行通信实现IP数据报封装方式,通过RS232串行接口和调试解调器接入Internet。但是这种简单的连接方式有很多缺陷,如每一端无法知道对方IP地址;数据帧中没有类型字段,也就是1条串行线路用于SLIP就不能同时使用其它协议;SLIP没有在数据帧中加上检验和,当SLIP传输的报文被线路噪声影响发生错误时,无法在数据链路层检测出来,只能通过上层协议发现。
PPP(Point to Point Protocal,点对点协议)修改了SLIP协议中的缺陷。PPP中包含3个部分:在串行链路上封装IP数据报的方法;建立、配置及测试数据链路的链路控制协议(LCP);不同网络层协议的网络控制协议(NCP)。PPP相对于SLIP来说具有很多优势;支持循环冗余检测、支持通信双方进行IP地址动态协商、对TCP和IP报文进行压缩、认证协议支持(CHAP和PAP)等。图4为PPP数据帧的格式。
PPP的实现可以通过2个后台任务来完成。协议控制任务和写任务。协议控制任务控制各种PPP的控制协议,包括LCP、NCP、CHAP和PAP。它用来处理连接的建立、连接方式的协商、连接用户的认证以及连接中止。写任务用来控制PPP设备的数据发送。数据报的发送过程,就是通过写任务往串行接口设备写数据的过程,当有数据报准备就绪,PPP驱动通过信号灯激活写任务,使之完成对串行接口设备的数据发送过程。PPP接收端程序通过在串行通信设备驱动中加入“hook”程序来实现。在串行通信设备接收到1个数据之后,中行设备的中断服务程序(ISR)调用PPP的ISR。当1个正确的PPP数据帧接收之后,PPP的ISR通过调度程序调用PPP输入程序,然后PPP输入程序从串行设备的数据缓存中将整个PPP数据帧读出,根据PPP的数据帧规则进行处理,也就是分别放入IP输入队列或者协议控制任务的输入队列。
PPP现在已经广泛为各种ISP(Internet Sever Provider)接受,而Linux操作系统下完全支持PPP协议。在Linux 下网络配置过程中,通过1个Modem建立与ISP的物理上的连接,然后tion。在接口(Interface)里面加入PPP设备,填入ISP电话号码、用户以及密码,同时将本地IP和远端IP设置为0.0.0.0,修改/ETC/PPP/OPTION,加上DEFAULTROUE,由ISP提供缺省路由,这样就完成了设备的PPP数据链路设置过程,可以通过Internet实现远程控制。
结束语
该设计方法已成功应用于智能交换系统的交通参数检测系统中。在该系统中,采用4块DSP视频检测卡实现4个不同路面区域的交通参数检测,同时采用Linux作为通信平台的操作系统;通过PPP协议建立与监控中心的连接,实现监控中心对各个视频检测卡的远程控制。
本文提出的视频检测和远程控制的嵌入式系统;通过PPP协议建立与监测中心的连接,实现监控中心对各个视频检测卡的远程控制。
本文提出的视频检测和远程控制的嵌入式系统设计方案,充分利用了DSP的高性能的数据处理功能和嵌入系统操作系统的实时稳定的特点,采用PPP协议建立与Internet的连接,实现视频检测的远程控制。这种DSP信号处理与嵌入式系统相结合的模式,可以广泛应用于工业控制、产品制造、智能交通等的视频检测领域,具有广泛的应用前景。