首页 > 代码库 > 基于DM642 RAW采集格式的视频驱动开发及应用

基于DM642 RAW采集格式的视频驱动开发及应用

摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析、修改用于标准格式的视频驱动,使其优化后适用于RAW采集格式,在此基础上开发了基于多级缓存管理机制的应用程序,最终达到采集速率至少每秒15帧的要求。 
   
  ?关键词:视频驱动;DM642;CCD高清传感器;RAW采集格式;缓存管理机制 
  ?中图分类号: TP311.11 文献标志码:A 
   ? 
  Abstract: To solve the problem that video driver for C64X Digital Signal Processor (DSP) family can not be used in RAW capture mode, the authors designed a data interface between DM642 and the high definition sensor of Charge-Coupled Device (CCD), and analyzed and modified the video driver of standard format. After being optimized, the video driver could be used in RAW capture mode. Applications had been developed based on multilevel buffer management framework. At last, the capture speed achieves the minimum speed of 15 frame per second. 
   Key words: video driver; DM642; CCD high definition sensor; RAW capture mode; buffer management framework 
   
  0 引言? 
  近年来,数字信号处理器(Digital Signal Processor, DSP)在视频监控方面得到广泛应用。C64x系列DSP提供给开发者一种类/微驱动模型(Class/Mini Driver Model),对于视频驱动,数字信号处理器/基本输入输出系统(Digital Signal Processor/Basic Input Output System,DSP/BIOS)提供更高级驱动封装,简化了系统开发流程。常用的视频监控系统是通过解码芯片(如TVP5150)对采集的图像数据解码后,输出?BT.656?或其他标准格式到DSP压缩、处理。但这种系统中的视频驱动不支持原始数据格式(RAW Image Format, RAW),对高分辨率模数(A/D)转换器输出的RAW图像数据具有很大局限性。论文研究了如何通过DM642视频端口接收RAW格式视频数据,并在移植视频驱动程序后,开发多级缓存管理机制的应用程序。? 
   
  1 相关接口设计? 
  设计模块包括两个部分:核心处理模块DM642和视频采集模块。DM642处理器内部集成了TMS320C64X DSP内核,在600?MHz运行速度下,指令可达4?800?MIPS,由于其强大运算能力,可实现实时JPEG编解码算法;视频采集模块由高清摄像头ICX274和12位36?MHz模数转换芯片AD9923A构成。其中,ICX274是一款201万(1?628×1?236)有效像素的电耦合元件(Charge-Coupled Device,CCD)传感器,水平驱动频率36?MHz[1]。? 
  DM642通过模拟串行接口(McBSP)配置AD9923A芯片内部功能相关寄存器,AD9923A驱动ICX274输出模拟视频信号,并正确控制相关双采样电路的采样时刻,完成模拟信号到数字视频信号的转换后,传输到DM642的视频端口(VPORT)[2]。如图1所示,相关接口设计包括两部分:McBSP与视频采集模块的接口;VPORT与视频采集模块的接口,而设计难点在于后者。? 
   
  1.1 McBSP与视频采集模块的接口? 
  DM642支持将McBSP配置成标准串行外设接口(Serial Peripheral Interface,SPI)协议,需要CLKX、DX、DR、FSX四根线,分别对应SCK、MOSI、MISO、SS。但传输数据位数只能配置成8位、12位、16位、20位、24位以及32位[3]。但AD9923A寄存器的配置需要一次传输40位,包括12位地址信号和28位数据信号,且AD9923A接口不满足标准SPI协议,所以将McBSP配置成通用I/O口,以模拟串行接口。因此只需占用VPORT0(VPORT0与McBSP复用)的CLKX、DX、FSX。? 
   
  1.2 VPORT与视频采集模块的接口? 
   
  1.2.1 VPORT介绍? 
  DM642具备三个专用视频端口:VPORT0、VPORT1和VPORT2[4]。其中:VPORT0和VPORT1作为视频采集端口;VPORT2作为视频显示端口。每个VPORT有20根数据线,分A、B两个通道。系统中,视频采集模块与VPORT1接口。DM642视频端口内部集成先入先出队列(First Input First Output, FIFO)用来存储输入、输出数据,通过增强型直接内存存取(Enhanced Direct Memory Access,EDMA)传输实现视频内部FIFO和外部或内部存储器的数据搬移。? 
  VPORT支持如下三种输入格式:? 
  1)双通道8/10位或单通道16/20位BT.656格式的YCbCr(4∶2∶2),分辨率720×576(50?Hz/625行)或720×486(60?Hz/525行);? 
  2)双通道8/10位或单通道16/20位的Y/C格式的YCbCr(4∶2∶2),支持音视频同步码(Society of Motion Picture and Television Engineers,SMPTE) 260M、SMPTE 274M、SMPTE ?296M?以及ITU-BT.1120格式,分辨率1?920×1?035,?1?920×??1?080?等,也支持标清CCIR601格式;? 
  3)双通道8/10位或单通道16/20位RAW格式,如图2所示,主要用于从模数转换器(Analog-to-Digital Converter,ADC)获取原始图像数据。? 
   
  1.2.2 RAW采集格式下的接口设计? 
  为了实现从AD9923A获取RAW图像数据,VPORT1必须配置成RAW采集格式。AD9923A支持12位模数转换,因此过滤低4位数字信号,选择VPORT1 A通道8位RAW视频采集格式。? 
  如图1所示,当CAPEN信号被使能时,VPORT1开始采样VPxD数据线的数据。采样时钟最高可达80?MHz,设计中使用AD9923A内置36?MHz单位是Hz吗?若不是,请补充。时钟。采样数据大小通过VCxSTOP1的VCXSTOP和VCYSTOP位设置,VCXSTOP设置低12位,VCYSTOP设置高12位,最大帧数据为16?MB单位是什么?请补充。。当采样数据达到VCXSTOP和VCYSTOP所设置值时,采样完成。此后,CAPEN信号必须保持至少2个时钟周期的无效状态。? 

 

 

 

  RAW视频采集的关键因素之一是帧同步处理。由于RAW格式采集的数据不包含任何类似于BT.656数据流的帧启、停标识码(SAV/EAV CODE),也不提供垂直同步信号,帧同步无法实现。但VPORT提供一种实现RAW采集格式下的帧同步解决方法。如图3所示,通过设置VPORT的采样垂直消隐间隔VCVBLNKP,以及开始同步使能SSE间接实现帧同步功能。? 
   
  SSE被置位且视频口采样使能信号有效时,在2个垂直消隐间隔以后,VPORT1开始采集数据。通过设置VCVBLNKP位,定义垂直消隐信号长度。为保证在一帧数据开始时同步,VCVBLNKP必须赋予大于水平消隐的期望值且小于1/2垂直消隐间隔的值,根据需求配置为最大值0xfff。值得注意的是:帧同步操作只在VPORT使能信号(VCEN=1)有效后执行一次,如果在采集过程中,CAPEN信号被噪声干扰,帧同步信号将会丢失。如果需要重新同步,VPORT必须禁用后重新使能。当CAPEN有效时,再开始采集数据。? 
   
  2 视频驱动移植? 
   
  2.1 视频驱动结构分析? 
  DM642视频驱动结构如图4所示,根据BIOS的驱动结构,分为三部分:芯片支持库(Chip Support Library,CSL)驱动、微型(Mini)驱动、类驱动?? [5]。? 
   
  1)CSL驱动。? 
  驱动程序建立在CSL基础上,调用CSL库函数完成对芯片级设备的初始化和控制。在Mini驱动中需要调用CSL层的驱动函数(EDMA配置函数和用户开发的Video Decoder配置函数)进行端口设置。? 
  2)Mini驱动。? 
  Mini驱动执行所有特定设备的控制和初始化,也称为硬件相关层。Mini-Driver驱动分成两个模块:Generic驱动模块和Decoder Specific驱动模块。Generic模块保留IOM Mini驱动的所有应用程序编程接口(Application Programming Interface, API)函数,完成视频端口和EDMA控制器配置,通过EDMA将视频端口FIFO的图像数据搬运到Mini驱动管理的buffer中;Decoder Specific模块完成A/D芯片或视频解码芯片配置,使外围芯片和视频端口配合工作,完成指定格式图像的采集任务。Decoder Specific模块通过外部器件控制(External Device Control, EDC)接口融合到Generic模块中。当驱动移植到不同硬件平台时,只需修改EDC模块,极大提高了代码使用效率。? 
  3)FVID/GIO类驱动。? 
  类驱动程序为应用程序提供接口,也称为硬件不相关层。这部分程序主要功能包括维护设备数据缓冲区,向上提供API接口供应用层程序调用,并协调应用程序对外设操作的同步和阻塞;向下提供适配层与Mini驱动层相连,实现API接口函数到Mini驱动层程序映射。FVID模块为GIO类设备提供一组宏,定义6个IOM命令:FVID_create、FVID_alloc、FVID_control、FVID_exchange、FVID_free和FVID_delete,以扩展GIO功能,支持多级缓存管理机制。? 
   
  2.2 RAW格式的驱动程序移植? 
  视频采集驱动只支持如下模式:单通道或双通道8/10位BT.656模式;单通道16/20位Y/C模式。因此,为了在RAW格式下使用视频驱动,必须修改Mini驱动相应部分[6]。? 
   
  2.2.1 修改VPORT初始化文件? 
  在RAW采集格式下初始化VPORT,主要涉及修改两个文件:vportcap.h和vportcap.c。在vportcap.h文件中声明了VPORTCAP_Params结构体,在该结构体中添加Uint16 sse和Uint16 vcvblinkp两个成员,以使能SSE和VCVBLINKP。? 
  在vportcap.c文件中配置VPORT。表1是RAW采集格式下的VPORTCAP_Params结构体变量配置参数。其中,定义LINE_SZ为1?628,NUM_LINES为1?236,支持分辨率?1?628×??1?236?的8位RAW采集格式。? 
   
  在RAW采集模式下,不必配置scale、resmpl、hCtRst、vCtRst、fldDect、extCtl、fldInv等变量,直接置零。? 
  ? 
  2.2.2 定义EDC接口函数? 
  设计中涉及底层硬件AD9923A的控制,必须修改Mini驱动外围芯片控制部分,即EDC接口。重新定义如下三个函数,配置AD9923A以控制ICX274。? 
  1)ICX274_open()。打开ICX274并提供VPORT1单通道操作。? 
  程序中为ICX274创建相应实体,并在初始化时指定采集所用的通道号及端口号。FVID实体的命名规则如下所示,用三个“/”隔开。第一个分量是在DSP/BIOS.cdb文件中定义的驱动名称;第二个分量识别通道(A或B);第三个分量识别传感器所连接端口(VPORT0或VPORT1)。在调用Mini驱动之前,必须在DSP/BIOS Config中注册。在Device Drivers中右击选择插入一个设备驱动,命名为VPlCAPTURE,并配置各个属性(函数表指针、函数表类型和设备ID号等),指明IOM_Fxns函数表地址和设备参数地址[7]。 
  程序前 
  ? 
  capVideoPort1=FVID_create(”/VP1CAPTURE/A/1”,?IOM_INPUT,NULL,(Ptr)&CapParamsVP1,NULL); 
  程序后 
  ? 
  2)ICX274_ctrl()。以命令方式控制ICX274。? 
  主要命令:EDC_RESET表示重置传感器;EDC_CONFIG表示配置传感器分辨率,为1?628×1?236,修改此命令可添加其他分辨率格式;EDC_START表示使能并开始视频采集。? 
  3)ICX274_close()。关闭ICX274并置于低功耗模式。? 
  其中对ICX274的操作都是DM642通过串行接口写命令到AD9923A,配置相关寄存器,再由AD9923A输出相应时序控制ICX274感光电荷输出[8]。? 
   
  3 应用程序开发? 
  在驱动移植成功的基础上,开发基于多级缓存管理机制的应用程序。图5是视频采集驱动的数据流框图。视频采集模块开始工作后,将采集数据存到DM642输入视频端口的FIFO,当FIFO到达设定阈值时,DSP发出信号产生EDMA中断,启动EDMA通道,搬运FIFO中的图像数据,将其存入SDRAM,等待图像处理。每场图像采集完成后触发VPORT中断,中断服务程序更新图像存储区,继续采集另一场图像。? 
   
  3.1 多级缓存管理机制? 
  FVID驱动的特点是基于帧的操作,驱动分配帧缓存,完成应用程序和驱动之间的帧缓存交换。应用程序调用FVID接口时,主要使用命令字段包括:FVID_alloc、FVID_exchange和FVID_free,对Mini驱动发出指令。为提高所采集图像数据的存取速度,DM642内存管理采用多级缓存管理机制。现以如图5所示的三个buffer为例,解释Mini驱动缓存管理机制。? 

 

 

 

 

   
  根据CCD传感器分辨率,Mini驱动合理分配三个同样大小buffer,设计中buffer大小为1?628×2,即两行图像数据。采集开始时,所有缓存区都处于空闲状态。如图5(a)。采集数据先填充buffer A,buffer A填满产生中断,EDMA通道自动把指针指向buffer B填充,三个buffer交替接收数据。? 
  当应用程序发出I/O请求发送函数时,如图5(b),如果命令字为FVID_alloc,则Mini驱动把当前已经填满的buffer A分配给应用程序,在ChanObj回调函数里返回被分配指针,应用程序可对此图像数据处理。如图5(c)、(d),再通过FVID_exchange将buffer A释放给Mini驱动,以此交替获得buffer B、buffer C。应用程序通过I/O请求发送函数不断从底层驱动获得装有新采集数据的内存块,将处理完的内存块释放给底层驱动重新采集数据,上层和底层并行处理互不干扰[9]。? 
  3.2 视频采集流程? 
  视频采集流程如图6所示[10],右边是流程图中对应类驱动、Mini驱动的程序调用及说明。系统上电或复位后,程序入口地址指向C引导程序_c_int()起始地址。_c_int()自动完成C语言运行环境和寄存器初始化,而后调用BIOS_init()函数初始化DSP/BIOS模块。Main()函数执行用户初始化工作,主要完成CSL初始化,L2 Cache设置,启动DAT模块允许数据快速拷贝;然后初始化RF5,完成CHAN模块、ICC模块和SCOM模块等初始化;最后初始化视频采集通道,分配外部帧存储器,设置视频采集端口参数,配置AD9923A[11]。? 
   
  对于采集通道,FIVD_create()函数创建视频采集通道,并把参数传递给视频采集口参数结构体,FVID_control()配置ICX274[12],包括其模拟输入视频采样格式、分辨率,给出图像缓存区大小和首地址。在main()函数结束返回后,调用BIOS_start()函数启动DSP/BIOS,按优先级执行硬件中断、软件中断、任务线程。? 
   
  4 系统测试? 
  文中为了测试系统采集图像的正确性与完整性,在网络开发套件(Network Development Kit,NDK)基础上,建立传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol,TCP/IP)以太网通信,将DM642服务器端的图像数据传输到上位机客户端显示。ICX274图像传感器默认采集分辨率为1?628×1?236,即有效像素2.01?MB。原始图像未进行JPEG压缩的情况下,短时间内无法通过百兆以太网传输到VC++6.0下的MFC界面显示(客户端)。因此对图像数据进行隔1列、隔3行压缩,将数据量缩小到1/8后传输,客户端接收到的图像如图7所示。在如上的工作状态下测得采集速率至少每秒15帧,满足ICX274每秒15帧图像输出的要求。? 
   
  5 结语? 
  DM642视频监控系统的应用越来越广泛,而视频驱动程序设计的合理性直接关系到采集到的图像质量和采集效率。系统设计了DM642和CCD传感器ICX274的相关接口,并在RAW采集格式基础上,对FVID/GIO类驱动和Mini驱动深入研究并修改,移植视频驱动后,开发多级缓存管理机制的应用程序,对RAW格式高清视频采集的控制和优化具有重大意义。? 
   
  ?参考文献:? 
  [1] 
  FOSSUM E ?R.? CMOS image ?sensors: Electronic? ?camera-on-chip? [J]. IEEE Transactions on Electron Devices, 1997, 44(10): 1689-1698. 
  ?[2] 
  赵?,刘铁根,李晋申.基于DM642的高速图像识别系统设计[J].电子测量与仪器学报,2007,21(1):86-89. 
  ?[3] 
  陈财明,周立丰,于海滨,等.基于TMS320 VC5416图像采集系统的设计与应用[J].江南大学学报:自然科学版,2006,5(2):149-152. 
  ?[4] 
  Texas Instruments. TMS320C64x DSP video port/VCXO Interpolated Control (VIC) port reference guide [M]. Texas: Texas Instruments, 2007. 
  ?[5] 
  Texas Instruments. The TMS320DM642 video port mini-driver [M]. Texas: Texas Instruments, 2003. 
  ?[6] 
  Texas Instruments. Interfacing a CMOS sensor to the TMS320DM642 using RAW capture mode [M]. Texas: Texas Instruments, 2004. 
  ?[7] 
  李晨阳,续志军.基于PCI总线的DSP视频采集驱动设计[J].制造业自动化,2010,32(9):3-6. 
  ?[8] 
  莫思特,吴志红.200万像素数字摄像机设计及关键技术研究[J].光电工程,2009,36(5):117-121. 
  ?[9] 
  XU ?FEN,? ZENG ?JIAN-JUN,? ZHANG ?YUN-LONG.? Design of a DSP-based CMOS imaging system for embedded computer vision [C]// Proceedings of 2008 IEEE Conference on Cybernetics and Intelligent Systems. Washington, DC: IEEE Computer Society, 2008: 430-433. 
  ?[10] 
  徐志伟,马登极,林峰,等.基于DM642的视频解码设备TVP5150驱动程序的设计[J].电子器件,2006,29(3):945-950. 
  ?[11] 
  许芬.智能视觉传感器及其应用[J].中国仪器仪表,2007(4):26-28. 
  ?[12] 
  孙咏,黄丹丹,任俊,等.CPLD在DSP实时图像采集系统中的应用[J].江南大学学报:自然科学版,2006,5(2):158-161. 
   
   收稿日期:2011-07-11;修回日期:2011-09-13。? 
   
  基金项目: 
  “211工程”三期建设项目(S-09102);重庆大学研究生创新团队建设项目(QGSS2011005)。? 

 

http://www.xzbu.com/8/view-43716.htm

基于DM642 RAW采集格式的视频驱动开发及应用