搜索
您的当前位置:首页正文

基于S3C2410的嵌入式图像传输系统的设计与实现

来源:知库网
维普资讯 http://www.cqvip.com

2007年第5期 福 建 电脑 7 基于¥3C2410的嵌入式图像传输系统的设计与实现 李金广 ,罗 飞2’杨【摘的实现。 晖 ,刘祥利 (华南理工大学自动化科学与工程学院广东广州510640) 要】:本文详细介绍了图像传输系统的硬件构造,以及基于该硬件模块下通过USB摄像头采集现场图像数据并通 过[ntemet传输到远程终端的嵌入式图像传输系统的设计与实现。主要内容包括图像采集部分的软件实现及网络传输部分 【关键字】:¥3C2410 USB摄像头Video4Linux套接口内存映射 1.引言: 嵌入式技术、网络技术、多媒体技术的发展使得远程监控功 能的数字化、智能化及微型化成为可能,不仅解决了模拟图像在 远程传输过程中的易受干扰及失真问题.还使得设备的体积更 加小型化、智能化、网络化。随着互联网的普及,利用INTERNET 作为传输媒介的图像监控系统及数据采集及传输系统也越来越 流行 尤其随着芯片行业的迅猛发展及Linux系统的更加完善, 越来越多的嵌入式系统告别资源较少的单片机时代.转而步人 ARM化和Linux化。 众所周知.ARM处理器作为32位微控制器一经面世。便产 生了划时代的意义。它不仅资源丰富,运行速度更快。稳定性更 高.也更易于扩展 同时Linux作为一种开源的操作系统。不仅 内核更小、效率更高、还直接提供网络支持等优点,并且其动态 模块加载使得对Linux的裁减极为方便.而且可以针对具体应 用配置内核.裁减SHELL并对嵌入式C库进行系统定制。二者 的诸多优点造就了二者作为嵌入式系统的完满组合.从而成为 大部分嵌入式系统开发者的首选方案。 本文这详细介绍基于ARM920T内核的¥3C2410的嵌入式 远程图像传输系统的设计与实现.该系统设计目标是为用于远 程门禁系统.实现通过互联网对远程图像的监控及传输功能.硬 件部分采用中芯微ZC301芯片系列USB摄像头获得远程图像 或视频.软件通过基于Video4Linux编程进行图像或视频数据的 采集.并编写相应的网络传输程序实现对采集数据的远程传输。 2.硬件结构: 2.1系统硬件结构框图如下图1 其中处理器采用Samsung公司的集成有ARM92 内核的 处理器¥3C2410.该处理器资源丰富.分开的16KB的指令 Cache和16KB数据Cache、MMU虚拟存储器管理、LCD控制器 (支持STN&TFr)、支持NAND Flash系统引导,RAM控制器、3 通道UART、4通道DMA、4通道带PWM定时器、RTC、并行∞ 口、8通道1O位ADC、触摸屏接口、IIC接口、IIS接口、2个USB 接口控制器、2通道SPI及内部PLL时钟倍频器,主频最高可达 203MHz。摄像头为市场上应用最广泛的ZC301芯片摄像头。,此 外.在处理器丰富资源的基础上还进 行了相关的配置和扩展.配置了 4MB16位的nash和8MB32的 SDRAM 通过以太网控制器芯片 DM9000E扩展了一个网口.另外引 出了一个H0ST USB接口 通过在 USB接口上外接一个带USB口的摄 像头.将采集到的视频图像数据放入 输入缓冲区中 然后通过网络接口将 采集到的图像或视频数据发送到Inte 主要用来调试系统 3.软件部分 基金项目:国家自然科学基金资助项目(69684001)。 3.1视频采集的实现步骤 由于该系统采用ARMLINUX。系统启动后启用MMU并进 入保护模式.应用程序不能直接读写外设的I/0区域(包括I/0 端121和YO内存).所以这时一般就要借助于该外设的驱动来进 入内核完成这个工作。本系统的视频采集分两步实现:首先为 USB摄像头在内核中写入驱动.其次写入上层应用程序获取视 频数据。 我们可以通过http://mxhard.free.fr/下载相应嵌入式环 境的驱动并进行相应的修改、编译、MAKE、INSMOD实现新内核 的加载 本文主要对图像的采集编程做详细介绍。 3.2视频图像的采集编程实现 Video4Linuxf简V4L)是Linux中关于视频设备的内核驱动. 它为针对视频设备的应用程序编程提供一系列接口函数.这些 视频设备包括现今市场上流行的Tv卡、视频捕捉卡和USB摄 像头等。对于USB口摄像头.其驱动程序中需要提供基本的I/O 操作接口函数open、read、 ̄a'ite.close的实现。对中断的处理实 现.内存映射功能以及对I/O通道的控制接口函数ioct1的实现 等.并把它们定义在struct ifle operations中。视频图像的采集编 程流程如图2所示: 3.2.1.在Video4Linux编程中定义 的数据结构如下: 1.struct video—capability ca— pability:包含设备的基本信q息: 设备名称、支持的最大最小分辨 率、信号源信息,分别对应着结构 体中成员变量name f321、 maxwidth、maxheight、minwidth、 minheight、channels(信号源个数)、 type等;; 2.struct video—picture picture:设备采集图像的各种属性;如 brightness( ̄度)、hue(色调)、contrast( 比度)、whiteness(色度)、 depth(深度)等: 3.struct video—channel channel:关于信号源的属性,用于多 个摄像头: 4.struct video、vindoW window:包含关于capture area的信 息: 5.struct video mbuf mbuf:利用mmaD进行映射的帧的信 息:实际上是输入到摄像头存储器缓冲中的帧信息,包括size (帧的大小)、frames(最多支持的帧数)、offsets(每帧相对基址的 偏移)。 6.struct video—mmap mmap:用于内存映射法采集图像数据 或视频流 3.2I 2l在Video4“nux编程中使用的函数如下: 1.int v41_open(char*dev,v41_device*vd);打开视频设备,该 函数采用系统调用函数ioctl(vd_fd=open(”/dev/video0",O—RD— WR)),vd->fd是设备打开后返回的文件描述符(打开错误返 维普资讯 http://www.cqvip.com

8 福建电脑 2.绑定地址和端口函数bindn: 3.建立套接口队列函数listenO: 4.接收连接函数accept0: 5.处理连接函数readO/writeO: 6.关闭套接口close0.三 2007年第5期 回一1),以后的系统调用函数就可使用它来对设备文件进行操作 了。 2.int v41 ge(capability(v41 ce*vd .devi1:读取设备基本信息,利用(vdjd,VIDIOCGCAP,&(vd_capablility)函数读取struct video _capability 中有关摄像头的信息。该函数成功返回后.这些信息从内核空间拷贝到用户程序空间 aJ) 各成员分量中,cap _使用pfinff函数就可得到各成员分量信息,例如prinff(”max. height=%d",grabfd.maxheight)获得最大垂直分辨率的大小。 _与之对应的客户程序的基本结构如下所示: 1.建立套接字函数socket0: 2.连接服务器connect0: 3.处理连接函数write0/read 0: 4.关闭套接口close0; 本系统中为了能够正确发送一帧数据.要把定义的帧的结 3.int v41get_picture(v4Ldevice vd);通过ioctl(vd_fd,VID— _IOCGPIT,&fvd picture))读取摄像头缓冲区中图像属性。可以通 过给分量赋值改变这类信息 hic4.int v41 annelsfv 41deve*vd );该函数依赖于读取 t c设备基本信息函.ge数返回信号源信息5.int v41 );关闭设备。close(v41_device*vd 6.int ioctl(int fd,int cmd,&(vd x));其中fd代表设备文件描 述符,cmd代表用户程序对设备的控制命令.X表示上面所列的 某个数据结构 3.2_3.图像采集的实现 该环节有两种方法可以实现:直接读取和内存映射 直接读 取法需要用read0函数。本系统采用内存映射法.即In/naP0方式 截取图像或者视频。mmap()系统调用使得进程之间通过映射同 个普通文件实现共享内存 该映射内容区可读可写并且不同 进程间可共享。不需要任何数据的拷贝。具体操作步骤如图3所 。。_一刁 。 构体设置为单字节对齐.具体方法是在结构体的定义后面加上 attribute f(packed))。并且为了处理多个连接请求,使用多线程 编程.在处理连接时建立子进程.如果要实现视频流的不间断传 输.可以将发送环节加入到连续帧采集环节的内循环中进行处 理。该步骤的简单实现放在对采集到的图象处理环节.即在获得 连接请求并截取单帧图像成功后实现网络的发送功能。其中多 线程编程部分用到的主要函数有: 互斥量初始化函数pthread mutex init0 互斥量锁定函数pthread mutex lock0 互斥量解锁函数pthreadmutexunlock0、 互斥量注销函数pthread mutex des ̄oy0 线程创建函数pthread create0、 线程同步函数pthread join0。 ..・__...5.结论: 本文提出了一套基于S3C24l0平台和linux系统的嵌入式 图象采集、传输系统的具体设计和试验。并在实验中获得验证: 系统很好的完成了图象采集和传输。得到的图象清晰。服务器可 图3 以稳定运行.一般不会发生断开或退出的现象。本系统不仅可以 在上面获取的摄像头存储缓冲区帧信息中.最多可支持的 良好的实现监控系统的linux化及数字化.还可以提高图像传输 帧数frames的值)一般为两帧。采集方式也可以分成单帧采集 效果和质量.具有较好的应用前景及可扩展性。比如手机安防及 和连续帧的采集。对于单帧采集只需设置bmuf.frame=0.即采集 基于GPRS或者CDMA的远程监控系统等。 其中的第一帧.成功截取之后就可把图像数据保存成文件的形 式。而连续帧采集则是在单帧的基础上.利用设置循环完成连续 参考文献: deo4Linux的USB摄像头图像采集实现。 采集。在循环语句中。也是使用VID10CMCCAPTURE ioctl和 1戴丽.基于Vin Cox.<<video41inux programrmng>> VIDIOCSYNC ioctl函数完成每帧截取.但要给采集到的每帧图 2.AlLinux网络编程,科学出版社,2000. 像赋地址。若要继续采集可再加一个外循环.在外循环语句只要 3.朱刚等.4.于明俭等.finux程序设计权威指南机械工业出版社2001. 给原来的内循环再赋frame=0即可。 4.网络传输: 5.htt-p://mxhaard、free、tf-/embedded.html 套接口是网络通信的基础.在linux下定义的一些套接口的 函数大致如下:对于一个简单 FCP/IP服务器.其基本结构如下 所示、 6.Alessandro Rub 著LISOLEG译,linux设备驱动程序开发,中国电 力出版社.2002 7.乔晓丹张鹏,一个基于Lmux操作系统的嵌入式网关的实现.微计算 1.建立套接字函数socket0; 机信息.2005年第21卷第7-2期 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top