做安防监控、可视门铃、网络摄像头这类产品的工程师,大概率接触过TI的达芬奇系列处理器,DM365就是其中一款定位中低端的视频编解码芯片。它集成了ARM9核心和视频处理子系统,能跑H.264编码,价格不贵,曾经是IPC摄像头的主流方案之一。
DM365的核心是一颗ARM926EJ-S处理器,主频最高432MHz,跑Linux没问题。但真正干活的是它的视频处理子系统VPSS,里面有硬件编解码器HDVICP,能实时编码H.264、MPEG-4,解码也支持。还有一个图像信号处理器ISP,负责把Sensor进来的RAW数据做去噪、白平衡、色彩插值、Gamma校正这些,直接输出YUV或者RGB给编码器用。这样ARM核心就不用参与繁重的图像处理,负责跑应用和网络传输就行。
硬件设计上,DM365的外围电路不算太复杂。核心供电有好几组,内核1.2V、IO 1.8V和3.3V,需要注意上电时序,先内核后IO。DDR2一般接128MB或者256MB,跑Linux和缓存视频帧够用。NAND Flash或者SPI Flash存固件和内核。视频输入接Sensor,常见的有MT9P031、OV2710这些,通过BT.656或者RAW接口连接。视频输出可以接HDMI发送器或者CVBS DAC。网络接一颗千兆PHY,比如RTL8211,传视频流。
软件开发用的是TI提供的DVSDK,里面包含了Linux内核、UBOOT、文件系统、编解码库、示例代码。开发流程一般是:先在PC上装交叉编译环境,用UBOOT启动板子,加载内核和文件系统,跑起来Linux。然后用TI的Codec Engine框架调用硬件编解码器,应用层只需要把数据送进去、拿出来,不用管底层怎么编解码。TI提供了encode、decode的demo,改一改就能用。
调DM365常见的坑有几个。一个是Sensor驱动,不同的Sensor寄存器配置不一样,输出格式和时序也有差异,要把驱动写对,ISP才能正确处理。另一个是编解码参数,码率、帧率、GOP长度这些要根据实际场景调,太高网络传不动,太低画质差。还有一个是内存分配,DDR要分给CMEM一块连续物理内存给编解码用,不然Codec Engine申请不到缓冲。
虽然DM365是十几年前的芯片了,现在海思、瑞芯微的方案性能更强、生态更好,但DM365在一些老项目和低成本方案里还在用。它的架构比较经典,ARM加硬件加速器的思路跟现在的SoC一脉相承,理解了DM365,再看别的视频处理器也容易上手。资料方面TI官网有完整的手册和应用笔记,社区里也有不少开发板的教程,入门还是方便的。