基于嵌入式Linux的视频矩阵控制系统设计
2013-08-13赵文龙艾志清
赵文龙,艾志清,刘 阳
(南昌航空大学1a.信息工程学院;1b.测试与光电技术学院,江西 南昌 330063;2.深圳载德光电技术开发有限公司,广东 深圳 518072)
责任编辑:魏雨博
随着视频矩阵的广泛运用,视频切换器已经不仅仅局限于用来选择视频图像信号,它正朝着大容量、多功能、可联网、应用可定制等方向发展。它与计算机连接,组成功能强大的微机多媒体中央监控系统;与多种控制方式、多种控制设备组成可多人同时独立操作的监视监控系统[1]。因此,视频矩阵控制系统的软件也变得越来越复杂。
目前,国内大多数矩阵控制系统都是通过单片机来实现。一方面,由于单片机的逻辑控制程序与底层硬件驱动密不可分,一旦系统硬件发生改变,整个逻辑控制程序便随之改变,而且,单片机的处理能力有限,难以用其开发复杂的系统应用程序及实现系统的网络控制功能。另一方面,通过移植嵌入式Linux操作系统并在其平台上进行矩阵控制应用程序的开发,不仅隔开了与底层硬件的直接联系、方便了底层硬件的升级,而且还可根据不同的用户需求进行定制开发。同时,嵌入式Linux操作系统还提供了强大的网络服务,从而可实现矩阵控制系统的网络控制[2-4]。另外,本系统采用的M21123视频切换芯片还可以对输入、输出端口进行自由配置,克服了传统矩阵输入、输出端口固定的缺点。为此,设计出一款以嵌入式Linux操作系统为平台,以Samsung公司的S3C2416为主控制器的SDI矩阵控制系统,以满足用户不断提高的使用需求。
1 系统的总体架构
系统采用模块化的设计理念,把整个视频矩阵系统划分为中心处理模块、人机交互模块、信号输入模块、视频切换模块、信号输出模块和电源模块六大部分,然后,再由一块背板通过总线把各个模块集合成一个视频矩阵系统。
其中,中心处理模块负责建立、协调各个模块之间的通信,解析来自各个模块的命令,并把解析后的命令转到相应的模块进行处理;人机交互模块包括本地触摸屏GUI界面、上位机操作软件及Web网络服务,它主要用来接收用户的命令输入,并把接收到的命令打包成标准的命令格式,再发送给中心处理模块进行解析;信号输入、输出模块分别负责视频或控制信号的输入、输出处理;视频切换模块负责建立信号输入、输出模块的视频通道映射;电源模块负责整个系统的电源管理。各个模块设计成独立的电路板,中心处理模块对应主控制板,信号输入、视频切换、信号输出模块则分别对应信号输入、视频切换、信号输出板,它们通过金手指与背板进行连接。背板总共有8个卡槽,其中,主控板、视频切换板各占1个卡槽,信号输入、输出板占其他6个卡槽。每个信号输入、输出板可实现4路SDI信号的处理,由此可知,系统最大可以处理24路SDI信号。但按照不同的现场应用需求,还可以灵活地组成4×20、8×16、12×12、16×8共4种不同容量的视频矩阵切换系统[5]。本文主要讨论中心处理模块的设计,其他模块也作简单的介绍。
2 中心处理模块的硬件接口设计
中心处理模块是视频矩阵系统的控制中心,在整个系统中发挥着“大脑”的作用,负责对外联络和对内控制。对外与PC通信,以接收操作人员发出的切换指令和其他控制命令,继而向其他模块发送指令,以实现切换控制功能[5]。中心处理模块主要由ARM9处理器S3C2416、串口收发芯片MAX232、网络控制芯片DM9000C、CAN控制芯片MCP2515和触摸屏LCD等组成,其硬件接口设计如图1所示。
图1 中心处理模块的硬件接口设计
2.1 主控板与视频交换板卡的通信接口设计
视频交换功能是视频矩阵系统的业务核心,它采用MNDSPEED公司生产的M21123作为视频切换芯片。该芯片是一款低功耗、24端口的高速数字视频交叉切换芯片,含有18个输入、输出可配置端口,6个固定输出端口。它具有传输信号损失补偿、输入信号均衡、输出DE增强、幅度调节的功能,支持3G/HD/SD-SDI信号[6],同时提供2线I2C和4线SPI编程接口。
为了提高视频切换响应速度,采用4线的SPI接口。M21123提供的4线SPI总线读写操作数据帧如图2所示,由图2可知M21123的SPI操作并不是标准的SPI操作。
图2 M21123数据帧
S3C2416的SPI总线只能提供8/16/32位数据传输,为此,本系统采用普通的IO口模拟SPI总线。根据M21123的SPI读写操作时序图(图3)可知,要完成一次写操作,xCS片选信号首先拉低,延时Tcs后,SCLK开始发送时钟信号,SI开始连续发送起始位1、读标志位0、8位地址及8位数据,在最后一位数据传输结束前Tcs时间,拉高xCS片选线,之后再延迟一个Tcs使移位寄存器的数据存储到地址中去。此时,写操作完成。
图3 M21123 SPI读写时序(截图)
同样地,在完成一次读操作时,要先把xCS片选拉低,延时Tcs时间后发送起始位1、写标志1及8位地址,发送完毕后,移位寄存器开始通过SO向外发送8位数据[6]。至此,读操作完成。由此,就可以设计出对M21123芯片操作的Linux驱动程序,实现系统对M21123芯片的读写操作。
2.2 中心处理模块与各子模块之间的通信接口设计
根据系统板卡间点对多的通信特点,本系统采用CAN总线作为板间的通信总线。CAN总线是一种多主机方式的串行通信总线,数据传输距离可长达10 km,传输速率高达1 Mbit/s,具有可靠的错误处理和检错机制。系统采用的CAN控制器为MCP2515,它带有SPI接口,支持CAN总线规范2.0B,并支持标准数据帧和扩展数据帧,内含2个接收缓存器、3个发送缓存器、6个29位的验收滤波寄存器及2个29位的验收屏蔽寄存器。另外,其SPI接口时钟频率最高可达10 MHz[7],与S3C2416的高速SPI接口匹配。
图4是MCP2515的外围CAN总线接口框图,为使CAN网络系统具有更高的可靠性和电器安全性,可在MCP2515同CAN总线收发器(TJA1050)之间使用高速光耦,以此来进行完全的电气隔离。与此同时,在光耦两端电路的电源处,也必须使用电源隔离模块来进行隔离。而在TJA1050的CANH及CANL引脚与地之间连接2个电容(30 pF),以过滤CAN总线上的高频干扰。因此,在当总线电压发生瞬间的干扰时,2个二极管可以起到保护作用。另外,由于光耦正常工作的输入电流为10 mA左右,而内部发光二极管的正向电压降为1.7 V左右,故应注意输入端串联电阻的阻值选择[8]。
图4 MCP2515 CAN总线接口电路
3 系统软件设计
3.1 Linux系统平台的搭建
系统选择的内核版本是Linux2.6.32.9,其源码可以从http://www.kernel.org/网站下载。文件下载后就可以在宿主机上裁剪Linux内核。第一步,修改内核目录下的Makefile文件,将ARCH?=MYM(SUBARCH)和CROSS_COMPILE?=MYM(CONFIG_CROSS_COMPILE:“%”=%)修改为ARCH:=arm(指定目标平台为ARM)和CROSS_COMPILE=arm-none-Linux-gnueabi-(指定交叉编译器)。第二步,根据系统对硬件驱动的要求,添加视频交换芯片M21123、CAN控制芯片MCP2515驱动,修改NAND Flash、DM9000C网卡、串口、触摸屏等驱动。并添加系统对CAN协议、ubifs文件系统的支持。最后,通过交叉编译内核后,产生内核文件uImage。
文件系统采用具有更高效的损耗均衡机制的嵌入式小文件系统ubifs。在制作ubifs文件系统的过程中,首先,通过 mtd - utils-1.4.6.tar.bz2(从 ftp://ftp.infradead.org/pub/mtd- utils/网站获取)源码制作 mkfs.ubifs、ubinize工具;其次,通过busybox制作系统工具,并编译生成相关的库文件,并编写一个调用mkfs.ubifs、ubinize工具和设置相关参数的脚本[9]。最后,执行脚本完成ubifs文件系统的制作。
3.2 命令解析器的设计
系统软件总体架构如图5所示,由图5可知,命令解析器是整个应用软件架构的核心,它对来自串口、网口、CAN的命令进行解析,解析后转到相应的处理模块执行。同时,解析器还提供一套基于串口和网口的对外通信编程接口[10],方便用户进行二次开发,把矩阵系统集合到自己的中央控制系统中去。
3.2.1 命令解析器的接口设计
图5 系统软件架构
在系统中,把命令设计为 Request,Response,Event,Complete_Event四种命令类型,其中UI主动向系统请求执行某个操作的命令为Request命令;当系统处理完Request命令后,报告操作结果的命令定义为Response命令。在系统执行完一个Request命令后,除了用Response向UI报告操作结果以外,还可能把大量的数据以多个命令的方式报告给UI,这个命令被定义为Event命令;对于有的Request命令,系统执行完成后,会使用多个Event命令将相关的数据报告给UI,当所有数据报告完毕后还需要向UI发送命令来通知UI数据报告完毕,这个命令被定义为Complete_Event命令。
根据矩阵控制系统的功能需求,将命令划分为若干组,每一个命令属于且只属于一个组,使用一个ID来标识每一个组,这个ID被定义为GID。在一个组内,不同的命令需使用另外一个ID来区分,这个ID为OID。最后,GID和OID共同组成了一个命令的操作码。每一个命令可以带参数,也可以不带参数,参数列表定义为大端模式。命令使用的规则是:每一个Request命令和其对应的Response命令共享一个操作码,每一个Request命令的OID的最高bit位为0;每一个Event命令和Complete_Event命令OID的最高bit位为1。命令定义的格式如表1所示。
表1 命令格式定义
根据表1中的命令定义格式及使用规则就可以定义出系统需要的命令,例如,一路视频输入映射到若干路视频输出的Response命令,其GID定义为0x02,OID定义为0x01,该命令带参数列表,参数定义如表2所示,这样一个切换命令就定义完成,其他命令定义依次类推。
表2 命令参数列表
3.2.2 命令解析器的程序设计
图6为命令解析程序的基本流程,系统上电后,首先,进行系统的初始化,包括各模块数据结构的初始化,打开串口、视频切换芯片M21123、CAN等设备驱动文件,设置系统启动参数,并创建CAN数据、串口数据、网口数据、命令解析四个子处理线程。然后,根据解析器接口定义,把从CAN、串口、网口收到的数据打包成统一的数据结构CB_MSG形式,并把CB_MSG格式数据推入一个环形命令队列。最后,命令解析子处理线程不断读取环形命令队列,再根据读取的命令操作码转到不同的命令处理子函数中,子函数再调用底层驱动以实现对命令的最终处理。
图6 命令解析器程序基本流程
例如,命令解析处理子线程从命令环形队列里读到一个切换命令,首先,通过函数 onParserMsg(CB_MSG*pMsg)提取该命令所属的GID,再根据GID跳转到该组GID命令的处理函数onSwitchCmd(uint16 opcode,CB_PARAM*pParam)中,然后,通过具体的操作码跳转到的操作码处理函数onCreateTieReq(CB_PARAM*pParam)中,最后,通过createMediaTie(uint16 input,uint16 output)函数调用M21123视频切换芯片底层驱动完成视频的切换。
3.2.3 命令解析器的测试
首先,借助串口、网口调试工具来调试命令解析器,通过串口、网口调试工具发命令给解析器,解析器把程序执行的结果打印出来,通过观察打印log信息来判断命令是否执行正确。以上测试完成后,进行实际矩阵测试,在SDI视频矩阵上插入3块SDI输入板卡和3块SDI输出板卡,并在SDI输入端口5接入SDI信号,输出口连接到带SDI接口的显示设备。图7为本地触摸屏GUI命令输入界面,在GUI界面输入命令5X17&18&20后,按回车执行,从界面状态信息栏可知,输入口已经成功映射到输出口17、18、20,同时,观察连接的显示输出设备,发现有信号正常输出,由此可知命令执行成功,如此反复测试其他命令。测试结果表明,矩阵控制系统程序运行稳定可靠,满足使用要求。
图7 GUI操作界面(截图)
4 结束语
本文介绍的视频矩阵控制系统在硬件上采用模块化的设计方式,各功能模块自成小系统,且相互间结构紧凑、接口清晰,极大地方便了系统的维护和改造升级。在软件上移植了Linux操作系统,巧妙地设计了命令解析器的应用程序,根据解析器命令接口规则可以方便地进行新命令的添加。除此之外,系统还可通过以太网进行矩阵间的联网,实现大范围的集中控制。本系统虽然是基于24端口的SDI视频矩阵的控制系统,但通过视频交换板和视频输入、输出板的升级,还可支持更大规模的视频矩阵和更多类型的视频接口。
[1]秦迎春.实现嵌入式矩阵切换控制系统的设计[J].微计算机信息,2008,24(23):121-122.
[2]陈治国,李兆军.基于AD8113的视频矩阵切换系统的设计[J].电子技术应用,2005,31(12):73-75.
[3]凌有铸,王冠凌,杨会成,等.基于多级切换视频监控矩阵系统的设计[J].自动化与仪器仪表,2008,28(3):1-3.
[4]韩春梅.基于MAX456的视频切换矩阵设计[J].电视技术,2004,28(3):91-93.
[5]张娜娜,钱步仁.64×64RGBHV视频矩阵切换器的设计[J].国外电子测量技术,2010,29(4):78-82.
[6]Mindspeed.21123-DSH-001-A datesheet[EB/OL].[2013-01-01].http://www.mindspeed.com/.
[7]Microchip Technology Inc.MCP2515 datasheet[EB/OL].[2013-01-01].http://www.microchip.com/2005-10/2012-10.
[8]陈卫国,戴瑜兴.基于CAN总线的视频切换矩阵设计[J].低压电器,2007(22):5-9.
[9]梁泉.嵌入式Linux系统移植及应用开发技术研究[D].成都:电子科技大学,2006.
[10]谢晓娟.嵌入式智能家居监控系统的设计[D].上海:华东师范大学,2011.