20世纪90年代末,伴随着计算机技术、图像处理技术和网络技术的发展与普及,兴起了数字化监控浪潮,在数字视频安全系统领域,行业的焦点已经从模拟的盒式磁带录像机转向数字视频录像。由于高精度实时视频信息量巨大,在传输时不得不丢弃大量数据帧,否则必须压缩。最常用的软件压缩法对复杂的压缩格式编程工作量大,设备要求高,应用受限制;而硬件实现法,采用专用芯片按给定格式高速压缩视频,实时性好,可靠性高。
1 TW2700的性能特点
TW2700采用256引脚的PQFP封装,包括4个兼容ITUR BT.656的视频输入端口,每个信道具有一个独立的、采用专有算法的压缩引擎,支持Triplex操作、同步录制、回放和网络连接,通过级联(cascade)模式支持多达16个信道。其特点主要有:
◆ 可编程IDE接口供给硬盘或其他存储设备;
◆ 丰富的屏幕显示功能(On Screen Display,OSD);
◆ 支持多种格式画中画显示(Piture In Piture,PIP);
◆ PS2接口,可接键盘和鼠标;
◆ 可编程鼠标指针显示功能;
◆ 基于RISC的处理器能对音频数据进行编码;
◆ 支持从主机接口上传和下载图像;
◆ 可编程移动探测器;
◆ 可从主机接口对SDRAM和IDE进行直接存取。
2 TW2700的主要引脚功能
2.1 SDRAM引脚
TW2700需外接2块动态随机存储器SDRAM0和SDRAM1。SDRAM0用于屏幕控制,SDRAM1用于JPEG压缩。当TW2700应用于卡拉OK录音或其他自动伴奏录音时,只需要屏幕控制而无需JPEG压缩,且只需外接一块存储器。根据不同的需要,SDRAM0的大小可选用256 Mb或512 Mb,SDRAM1可选用128 Mb、256 Mb或512 Mb。其典型连接图如图1所示。

图1 SDRAM的典型连接图
SDRAM接口的主要引脚如下:
SDR0_DQ[0~15]: SDRAM0数据总线。
SDR0_A[0~12]: SDRAM0地址总线。
SDR0_DQM: SDRAM0数据的输入/输出Mask使能。
SDR0_nWE: SDRAM0写使能信号端。
SDR0_nRAS: SDRAM0行地址选通端,低有效。
SDR0_nCAS: SDRAM0列地址选通端,低有效。
SDR_CLKOUT: SDRAM的时钟输出端。
SDR_CLKFB: SDRAM的时钟信号反馈输入,此引脚应接入SDR_CLKOUT。
SDR1与此类似。
2.2 主机接口引脚
TW2700有8位和16位两种主机接口模式。其主要的接口引脚如下:
HOST_BYTE:模式选择位。“1”为8位模式,“0”为16位接口模式。
HOST_NCS:片选信号端,低有效。
HOST_NWE:写使能信号端,低有效。
HOST_NOE:读使能信号端,低有效。
HOST_NIRQ:中断请求信号。
HOST_A1/ALE:当接口为8位模式时,该引脚用于地址锁存;当工作在16位模式时,该引脚用于地址线A1。
2.3 其他引脚功能描述
TEST_IN:内部测试端。
NRESET:复位输入端,低电平有效。
OSC_54M:主时钟输入端。
ENC_MASTER:通过级联扩展多通道时的主从选择位,高电平表示主导地位,低电平表示从属地位。
3 嵌入式数字视频录像机的设计

图2 系统设计框图
通过对TW2700的研究,笔者结合其同类产品TW2815设计了一款嵌入式数字视频录像机。图2是该系统的设计框图。图中,音频、视频信号经过TW2815进行解码(即A/D采样),其数据输入TW2700以进行MPEG4压缩编码,接口是4个标准的8位ITU656信号输入接口,编码后的压缩视频流通过HOST接口被嵌入式CPU读取,随后即可存储到硬盘或者通过网络存储到其他载体之中。
3.1 TW2815的介绍
TW2815包括4个集成的模拟抗锯齿失真(Antialiasing)滤波器、10位CMOS模/拟数字转换器,以及符合所有NTSC/PAL标准的高性能自适应4H梳状滤波器。这款集成电路提供同步的54 MHz四信道Full D1和CIF时间多元输出,并且耗电极低(通常为480~500 mW)。此外,TW2815还提供4个集成的音频模/数转换器、1个数/模转换器、多信道音频混合模拟输出,并且支持标准的I2S接口以供录制输出和回放输入。
3.2 音视频接口设计
TW2815首先对采集到的模拟视频信号进行解码,转换成可被接收的数字信号,再送到TW2700进行MJPEG压缩。由于TW2815提供了4个集成的音频模/数转换器,因此系统中不需要再外接芯片进行音频采样,可大大缩小产品的体积,从而降低了成本,提高了系统稳定性。音视频接口如图3所示。图中,用TW2700的通用I/O口接TW2815的I2S总线接口。
3.3 HOST接口的设计
TW2700的外部HOST接口主要用来传输编码后的数据流。两种外部HOST接口的模式可由HOST_BYTE模式选择位来决定。本设计选用16位模式。嵌入式CPU可选用三星公司生产的S3C44B0,其接口示意图如图4所示。选用16位模式,HOST_BYTE接低电平。另外,需要注意一点的是主机最好能够控制TW2700的复位端NRESET(第17引脚),图中没有画出来。建议当内置的CPU完全上电运行后再释放掉TW2700的复位端。

图3 音视频接口示意图图4 HOST接口示意图
3.4 系统软件设计
该系统的软件主要包括3个部分:启动程序、内核与根文件系统、编解码芯片驱动及应用程序。为了开发和升级的方便,将根文件系统做成RAMDISK 的格式,即系统启动后将压缩的文件解压到内存,形成一个虚拟硬盘,同时将内核和做好的RAMDISK打包成一个二进制映像;而将编解码芯片驱动与应用做成Cramfs(只读可压缩文件格式) 格式的映像,这样做是因为RAMDISK解压后所有内容不仅在外存占据空间(以压缩的形式存在),而且还在内存占据了更大的空间(以解压缩后的形式存在)。由于应用程序占用内存空间较大,这样一来将极大地耗费资源,使用Cramfs就是解决这个问题的一种方式。Cramfs是一种压缩的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存中去,而只是在系统需要访问某个位置的数据时,马上计算出该数据在Cramfs中的位置,将其实时地解压缩到内存之中,然后对内存访问来获取文件系统中需要读取的数据。这样就节约了嵌入式开发中最宝贵的内存资源,又因为内核和根文件系统分开,因此在开发时就只需要经常修改Cramfs区,而内核保持相对稳定,不必每次都重刷内核。
3.4.1 启动程序Bootloader
Bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于ARM7TDMI核的CPU在复位时通常都从地址0x00000000取它的第一条指令;而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(如ROM、 EEPROM或Flash等)被映射到这个地址上。通常,Bootloader被烧写至这个预先安排的地址上。因此在系统加电后,CPU将首先执行Bootloader程序。
3.4.2 内核与根文件系统
Linux公开了其所有内核源代码,所有的源程序都可以在/usr/src/linux下找到,因此用户可以根据自己的需要,灵活地修改配置内核。由于嵌入式系统的目标处理器体系结构存在差异,需要对内核加以修改,使其能够工作在目标处理器下。修改的工作包括系统调用,中断异常的处理函数、驱动以及C库等。此外,针对目标板上硬件资源的情况,用户可以根据需要配置相应内核驱动模块,使内核能够更高效、更稳定地运行在目标板上。
一个根文件系统必须包括支持完整Linux系统的全部内容,至少应该包括以下几项:
◆ 基本文件系统结构;
◆ 目录/dev、 /proc、 /bin、 /etc、/lib、/usr、/tmp;
◆ 最基本的应用程序,如sh、ls、cp、mv等;
◆ 最低限度的配置文件,如re、inittab、fstab等;
◆ 设备/dev/hd、/dev/tty、 /dev/fd0;
◆ 基本程序运行所需的库函数。
通常的做法是先准备好以上内容, 再将其压缩成RAMDISK格式,然后拷入内核相应目录。
3.4.3 编解码芯片驱动及应用
一些通用设备驱动(如以太网卡驱动)已经做在内核中。对于系统的一些专业芯片的驱动,由于其特殊性,将其和应用做成Cramfs文件系统格式,在目标板的操作系统启动时以module的形式进行加载,方便修改和升级。这些驱动主要包括TW2815驱动、专业视频显示处理和编解码芯片的驱动等。编写驱动程序可以按照Linux下编写驱动程序的规则来编写。 编写的驱动程序应该具有以下功能:对设备的初始化和释放;数据从内核传到硬件和从硬件读取数据;读取应用程序传递给设备文件的数据和回应应用程序请求的数据;检测和处理设备出现的错误。
用户进程是通过设备文件与硬件打交道,对设备文件的操作方式是系统调用, 由file_operations结构实现系统调用。这个结构的每个成员的名字都对应着一个系统调用。用户进程对设备文件进行操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数,操作就由用户空间转入内核空间。编写驱动程序的主要工作就是编写子函数,并填充file_operations的各个域。例如,解码器TW2815的file_operations结构就定义为:
static struct file_operations tw2815_ fops= {
open:tw2815_ open,
release:tw2815_ release,
read:tw2815_ read,
write:tw2815_ write,
ioctl:tw2815_ ioctl,
}
具体任务就是实现结构中的各个函数。整个系统的软件流程如图5所示。

图5 系统软件流程
结语
本文通过对TW2700的研究,开发了一款基于嵌入式Linux数字视频录像系统(DVRS),能满足当前视频监控领域对录像机高性能、低成本、大容量和更稳定的要求。随着计算机技术、图像处理技术和网络技术的发展与普及,随着安防市场的持续火爆,它也必将有着良好的应用前景。