当前位置:首页 > 单片机 > 单片机
[导读]文章介绍了基于嵌入式ARM9微处理器EP9315硬件平台和Linux软件平台的MPEG-4视频录像机的设计和实现,讨论了总体原理和架构,核心硬件模块的设计和Linux设备驱动程序和应用程序的设计。

【摘要】 文章介绍了基于嵌入式ARM9微处理器EP9315硬件平台和Linux软件平台的MPEG-4视频录像机的设计和实现,讨论了总体原理和架构,核心硬件模块的设计和Linux设备驱动程序和应用程序的设计。
【关键词】 ARM  EP9315  IME6400  MPEG-4  Linux  设备驱动

Abstract In this paper, designing and implementing a digital video recorder which is based on the processor ARM9 hardware series EP9315 and Linux software is achieved; the paper’s content include the general function and structure of the system, the designing of core hardware module and the designing of corresponding devices Linux drivers and application.

Keyword  ARM  EP9315  IME6400  MPEG-4  Linux  Module Driver

随着科技的飞速发展,消费类电子,通信,电视电影广播与计算机技术紧密结合起来。而数字化信息,尤其是数字化视频信息,具有数据量大,存储传输困难的特点,是制约人类获得信息的主要瓶颈。这种形势对数字视频记录设备的研制提出了新的要求:大批量的应用要求降低监控记录设备成本,多样的应用环境、分散、孤立的监控点要求监控记录设备尽可能一体化、小型化、独立、便携、低功耗、供电方便、性能可靠。针对这些新问题和新要求,作者设计实现了一种基于嵌入式系统和MPEG-4编码标准的数字录像机,系统集成度高、体积小、功耗低、独立、便携,适合大量的各类视频监控和记录应用。

1 系统框架及原理说明

本系统选用的主要模块是低功耗ARM9系列微处理器EP9315和专业视频压缩编码处理芯片IME6400,周围外部设备有SAA7118 A/D数模转换芯片,RAM芯片,ROM芯片,网络模块和电源模块。系统电路原理图如图1所示。整个电路采用5V电源供电,系统启动后,外部输入的视频和音频信号分别经过视频数模转换模块和音频模块进行解码,随后通过IIC总线送入IME6400视频处理芯片生成MPEG-4视频音频复合数据流,系统控制芯片EP9315从IME6400的HOST总线将数据流取出存放到硬盘中,并且控制与外部设备的通信。

图1:系统总体框图

2         MPEG-4标准

2.1 MPEG-4压缩算法的基本原理

MPEG-4视频压缩算法采用了基于对象的处理方案,对视频图像中的每个目标进行单独处理,能够在保证图像质量的情况下,极大的降低码率。在相同的图像质量下,MPEG-4的输出码流可以比MPEG-2降低一半。正因为如此,MPEG-4压缩算法已得到了广泛的应用。MPEG-4中视频对象(VO)可能是场景中的某一物体、某个区域、也可能是计算机产生的二维、三维图形等。VO的选定依赖于具体的应用和系统所处的环境:在要求超低比特率的情况下,VO可以是一个矩形帧,与以前的MPEG-1、H.263标准兼容;对于基于内容的应用,每一个VO有三类信息描述:运动信息、形状编码、纹理编码。MPEG-4的编码结构中,首先是从原始视频流中分割出VO,之后由编码控制机制为不同的VO及相应的3种类型的信息分配码率,然后是各个VO独立编码,最后将各VO的码流复合成一个位流。解码过程是编码的逆过程。编码的图2所示:

 

 

2.2 MPEG-4码流的形成

如图3所示,MPEG-4压缩算法将一幅图象分为多个对象,这些对象按不同的层,每个层又分为不同的平面按顺序变换为视频码流。它的基本视频流格式如图3所示。每个视频对象分为多个视频对象层,每个视频对象层形成一个基本流,这一基本流类似与MPEG-2中的GOP。每个基本流都有自己的视频对象序列头,不同的视频对象序列头可以分别按不同的顺序传送,这就极大地提高了MPEG-4传送流的灵活性。

 

图3  MPEG-4视频码流的基本构成

3 硬件设计

3.1 控制模块设计

系统控制模块选用CIRRUS LOGIC公司的EP9315A微处理器,此处理器是基于ARM920T内核,高性能,低功耗,32位CPU,自带MMU,16k指令cache和16k数据cache和Maverick Crunch数学协处理器;主频200MHz,系统总线100MHz;所支持的操作系统包括WINCE , Linux【1。为了便于设计和调试,硬件设计上采用核心板加底板的模块化设计方法,在核心板上集成了基于EP9315的最小系统,通过底板来扩展外部功能。在核心板上主要配置了64MB的NAND Flash 和64MB的SDRAM及提供RTC时钟和工作时钟的晶体,并将其丰富的外设接口资源引出。在底板上扩展出USB主机接口、以太网口、UART接口、IDE接口等,以实现与外部设备间的数据传输和通信。

EP9315支持硬盘的挂载,可以通过外部IDE接口将视频数据直接存入硬盘,但在开发初期采用通过与PC机服务器网络挂载方式,将记录数据通过网络协议存入PC机硬盘中,便于回放和调试。IME6400的HOST接口映射到处理器的第6个Memory Bank中,将EP9315的nGCS3片选管脚直接连接IME6400的nCS,地址线ADD[1:5]通过总线驱动芯片后与HOST接口的HA[0:4]相连【2】,同时将IME6400异步模式下的中断管脚GPIO0与EP9315的中断管脚FPGIO1相连。

3.2 视频音频编解码模块设计

视频A/D芯片选用Philips公司的高性能可编程解码芯片SAA7118,该芯片支持多种输入模式,具有抗混叠滤波、自动钳位、自动增益变换、亮度、对比度、饱和度调整等功能,其工作时钟为24.576MHz。通过设定SAA7118的内部的配置寄存器93H[6]为1使能其HOST端口,实现与IME6400的无缝连接。音频A/D芯片采用BURR-BROWN公司的PCM1800,它对模拟音频进行高信噪比20bit数字采样,生成PCM数字音频流。

压缩编码采用INTIME公司的MPEG-4编码芯片IME6400。该芯片是一款高性能的单片多通道MPEG-4数字压缩编码芯片,它支持多种编码模式和比特率控制,并提供了丰富的外围硬件接口。IME6400总线具有四种工作模式,通过mode管脚定义,在这里mode[1:0]设定为11,即异步工作模式。在这种模式下,当IME6400将GPIO0管脚置低电平时,FIFO缓冲区中存满NFIFOSIZE=1k大小的输出数据流,外部接口在得到GPIO0下降沿电平后便可以从IME6400的HOST接口寄存器Encodedstream中读取数据流。GPIO0管脚直接与EP9315的中断管脚FGPIO相连,在处理器获取下降沿信号后便中断当前操作,从IME6400读取数据。在读取完毕后,EP9315要向IME6400的HOST总线寄存器USER4发送一个不同值,通知IME6400数据读取完成。随后IME6400可以在FIFO中装载新的压缩数据流以保证EP9315的继续读取3

4 软件设计

 Linux系统具有稳定、高效、易定制、易裁减、开放源码等优点,因此本系统选用嵌入式Linux作为操作系统,在芯片中植入Linux系统作为视频记录的应用环境。编写Linux环境下的硬件设备接口程序主要分两个部分:硬件设备驱动程序和应用程序,驱动程序需要在视频录像前加载到Linux内核中,然后运行记录程序,本系统采用的动态加载驱动的方式。在前面说过用网络挂载硬盘来记录视频可以便于测试视频录像质量和调试软硬件,具体的操作是:在PC服务器上用nfs协议共享一个硬盘空间作为记录硬盘,然后通过minicom串口通信定义EP9315启动时首先通过网络挂载记录硬盘,

fconfig

fis load zImage

exec -c "root=/dev/nfs nfsroot=主机地址:共享硬盘空间 ip=嵌入式系统地址console=ttyS0,57600 devfs=mount"

随后视频录像数据的处理就相当于在PC机上进行操作,可以克服嵌入式操作系统功能不全,可视化程度不高的缺点【4】

4.1 驱动程序编写

编写linux驱动程序的最主要工作就是file_operations结构中各入口点的实现,即对应于open()、release()、read()、write()、ioctrl()等系统调用子函数的编写5

·Open函数ime6400_open(struct inode *inode, struct file *filp),IME6400打开后用于模块加载后的计数,防止系统非法释放模块资源。

·Read函数ime6400_read(struct file *fp, char *buf, size_t size),在IME6400数据缓冲区读满后从内核空间传送到用户空间。

·Write函数ime6400_write(struct file * fp, const char * buf, size_t size, loff_t *ppos),将摄像头获取数据从用户空间传送到内核空间。

·Ioctrl函数ime6400_ioctl(struct inode *inode, struct file *filp, unsigned int command, unsigned long arg),用于从用户空间向内核空间传递定义参数。

此外,驱动程序中还包括:

·IME6400片选的声明

#define BASE_ADDR                  0x28000000   

将IME6400的片选信号映射到片选4(ncs4管脚)。

·IME6400中断的申请

set_external_irq(IRQ_EINT8,EXT_FALLING_EDGE,GPIO_PULLUP_DIS); request_irq(IRQ_EINT8, &ime6400_irq, SA_INTERRUPT,"ime6400", NULL)。

根据硬件手册,这里将中断定义为中断8,用于在IME6400存入内核缓冲区后通知EP9315读取数据流。

4.2 应用程序编写

本系统应用程序主要实现在加载设备驱动后将视频流从硬件接口层拷到存储设备,具体操作上运用了多线程设计方法,这种方法的优点在于可以共享进程资源,线程间的转换和调用时间短,效率高,声明的几个线程可以相互独立地完成各自任务,并进行实时通信,传递参数。这里主要创建了三个线程:读数据线程,写数据线程,串口监听线程。

    pthread_create(&t1,NULL,(void *)read_thread,NULL);

    pthread_create(&t2,NULL,(void *)write_thread,NULL);

    pthread_create(&t1,NULL,(void *)listen_thread,NULL);

系统启动后,系统首先通过IIC初始化EP9315和IME6400,然后串口监听线程listen_thread()调用函数侦测是否有来自串口的控制指令输入,如果没有输入指定指令将无限期等待,如果得到输入指令则向读线程read_thread()发送信号量sem,通知读线程准备调用读取数据函数IME6400_read()。在IME6400中FIFO缓冲区内记录数据满后系统获得中断,中断程序将数据流拷入内核空间,若缓冲区满则读线程调用ime_read()拷贝数据到用户空间,并向IME6400寄存器USER4发送新的值通知IME6400可以存入新的记录数据流,从而进行下一步编码。ime_read()拷贝完成后返回,由读线程向写线程发送信号量sem1通知写线程write_thread()调用fwrite()函数将数据写到硬盘,完成后发送信号量sem2通知读线程,然后再由读线程进行下一轮类似前面的操作。与此同时,监听线程一直在侦测是否有串口输入的用户指令,如果有则调用中止函数或重新初始化函数来退出程序或重新启动系统。

5 结论

该录像系统已经基本完成了测试工作,可以选择8种分辨率和两种帧率,最高标准可以达到720×576分辨率,25fps。在选择640×480分辨率,25fps录制模式时,图像质量最好,图像显示稳定,对于快速运动的物体可以无码字丢失;在选择720×576,全帧率模式时,硬盘可以连续录制4~5个小时。目前系统需要解决的问题是改进录制高质量图像的码流的稳定性问题,可以考虑在EP9315和硬盘之间加驱动芯片以提高处理器挂载能力。

 

参考文献:

【1】         EP9315 User`s Guide. CIRRUS LOGIC, Inc. 2004

【2】         EP9315 User`s Guide. CIRRUS LOGIC, Inc. 2004

【3】  IME6400 firmware manual. Intime Corporation. 2003

【4】  FS-EP9315 USER GUIDE ISSUE 1.8. Shenzhen uCdragon Technology Co. Ltd. 2005.6

【5】  钱晨 徐荣华 王钦若,基于linux操作系统的设备驱动程序开发,微计算机信息,2004.09, 131-133

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

物联网正在扩大规模并加速发展,进而驱动着全新的经济。而Arm生态系统正是这一巨大机遇背后的推动力。

关键字: ARM 物联网

ARM公司是一家知识产权(IP)供应商,它与一般的半导体公司最大的不同就是不制造芯片且不向终端用户出售芯片,而是通过转让设计方案,由合作伙伴生产出各具特色的芯片。

关键字: ARM

2018年10月26日,深圳星河丽思卡尔顿酒店,ARM中国CEO吴雄昂在ARM年度技术论坛上对记者如是说,彼时的吴坚定,温雅,意气风发。时隔两年,ARM中国CEO吴雄昂再次回到媒体视线,这一次,ARM中国与来自投资方和剑...

关键字: ARM 芯片 集成电路

喜欢折腾主机的小伙伴一定都知道X86和ARM架构的区别,前者在PC领域已经统治了几十年;后者则主要应用于移动领域,尤其是近几年,ARM的产品在终端应用特别是手持终端应用飞速发展。

关键字: 国产 ARM 主机

科技公司们认为,收购将使英伟达控制一个重要的供应商,该供应商向苹果、英特尔、三星电子、亚马逊和华为等公司授权基本的芯片技术,同时也向不计其数的中小技术企业提供授权。总部位于英国的ARM公司将芯片设计和相关软件代码授权给所...

关键字: 英伟达 ARM 半导体公司

在去年九月,英伟达宣布以400亿美金收购ARM时,就注定这场收购不会太顺利。因为一旦ARM成功被英伟达收购,这将使ARM改变在全球半导体市场中的中立立场,因为ARM的很多客户,都是英伟达的直接或者间接的对手。除此之外,还...

关键字: 英伟达 ARM 半导体

以下内容中,小编将对工控主板的相关内容进行着重介绍和阐述,希望本文能帮您增进对工控主板的了解,和小编一起来看看吧。

关键字: ARM 工控主板 主板

在这篇文章中,小编将为大家带来工控主板的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: ARM 工控主板 主板

今年8月份公布的财报显示,软银公司报亏3.16万亿日元(约合1644亿元人民币),比上一季度的2.1万亿日元亏损额继续扩大,这意味着软银连续第二个季度创下有史以来最大的季度亏损。

关键字: ARM 软银集团 NVIDIA

据业内消息,ARM公司称已准备进行公开上市,新的首席财务官Jason·Child已经上任。

关键字: ARM CFO

单片机

21600 篇文章

关注

发布文章

编辑精选

技术子站

关闭