版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 摘要 近年来随着国民经济的持续快速发展,在工业、民用等诸多领域,视频信息无线传输的需求在日益增长。比如在电力系统中,随着输电电压等级的不断提高,电网的分布也越来越广,实时远程视频传输成为必要。本文在对嵌入式系统和3G网络大量研究的基础上提出了一套无线视频传输系统架构,该系统基于ARM技术进行了视频采集,视频传输的硬件电路和软件程序的设计,使得通过摄像头采集的视频数据能够从局域网传到客户机上,实现了实时的视频监控。该设计中基于ARM系统的主要单元完成了实验室模拟仿真。验证了设计的正确性。为3G网络应用于电力系统及其他领域的远程无线视频监控奠定了基础。 关键词:图像,视频,3G,ARM,嵌入式系
2、统,Linux ABSTRACT Recent years, with sustained rapid growth in the industrial, civil and other areas, the demand for wireless transmission of video information in ever-increasing.In power system, with the continuous improvement of the transmission voltage levels, more and more extensive distribution
3、network, real-time remote video transmission become necessary.In this paper, in the embedded system and a large number of 3G networks based on a set of wireless video transmission system architecture, which is based on ARM technology, video capture, video transmission hardware and softwaredesign, ma
4、kes the adoption of camera can capture video data transmitted from the LAN client to achieve the real-time video surveillance.The ARM system design based on the completion of the main unit of the laboratory simulation.Verify the correctness of the design.For the 3G network to other areas of power sy
5、stems and remote wireless video surveillance basis. Keywords: Video,Photo, 3G, ARM, embedded system, Linux摘要.I第一章. 绪论.3 1.1 课题的背景 1.2 课题的研究意义 1.3 论文的主要工作内容第二章.3G网络及视频传输的研究与介绍.8 2.1 第三代移动通信系统(3G) 2.2主要图象压缩方法和视频压缩标准介绍第三章.基于ARM的图像采集和基于3G传输模块的硬件设计.11 3.1 S3C2410存储器控制器与存储器接口电路 3.2处理器S3C2410网络接口扩展的电路设计 3.
6、3 USB控制器及USB电路 3.4 S3C2410的UART端口及由其扩展的串口电路第四章.基于ARM的图象采集模块的软件设计.15 4.1嵌入式LINUX系统的移植简介及调试方法 4.2基于USB接口的视频图象采集的软件实现 4.3图像数据的M-JPEG压缩编码第五章系统通信功能实验室仿真及调试结果.30 5.1 C/S模式下网络通信程序的设计 5.2具体各个应用程序和在图象传输系统中程序集成后的运行结果致谢.34参考文献.35 第一章 绪 论 图像的获取是由视频采集部分来完成的,采集的视频可以分成模拟视频和数字视频两种。图像的转换和播放是由终端的计算机或者其他嵌入式产品程序完成,属于对图
7、像的应用范畴。很显然,视频的采集与对视频展开的应用常常不是在同一个地方完成的,因此有一个通信过程:负责将前端采集的模拟或者数字视频进行有效、可靠地传输。特别是针对图像应用而进行的通信研究被称为图像通信。随着3G技术的日渐成熟和Internet网络的普及,随时随地查看需要的视频资料或者监控图像成为一个趋势,有着极其广泛的市场和应用。而计算机技术是通信技术发展的强大技术支撑,信息社会是这两大技术完美融合的产物。计算机的硬件系统有朝着面向应用的片上系统(SOC:System On Chip)发展的趋势:片上系统就是指将某类应用有关的常用外设与计算机的CPU集成在一个芯片上,做到系统与其它外设的无缝衔
8、接。计算机操作系统也有朝着面向应用的嵌入式操作系统发展的趋势:嵌入式操作系统是指可以由用户根据应用的变化而自行裁减的操作系统。图像通信与嵌入式硬件系统相结合,将能够给人们提供一个灵活的、便携的、功能丰富的应用终端,能够开展丰富的图像应用服务,因此对基于嵌入式的传输系统展开研究将是非常有意义的。本文的工作正基于此,对嵌入式图像视频传输系统在实现上的若干关键问题展开深入研究,给出了系统的构成框图,并最终完成了整个系统的实验室下的仿真。1.1课题的背景 图像视频传输概念广泛,包括多种用途:可视通话、视频点播,视频监控等等,基于安防需求的实时远距离视频监控系统有着很广泛的应用价值,是图像视频传输的典型
9、运用,本课题的提出是针对视频监控的新需求,采用ARM微处理器设计实现的对设备的远程监控系统。本章将主要介绍视频监控系统的发展现状以及所用到的嵌入式系统和微处理器ARM的发展现状。1.1.1嵌入式系统的发展现状 嵌入式系统是指操作系统和功能软件集成于计算机硬件系统之中。简单的说就是系统的应用软件与系统的硬件一体化,类似与BIOS的工作方式。具有软件代码小,高度自动化,响应速度快等特点。特别适合于要求实时的和多任务的体系。从功能应用特征上定义,嵌入式系统则是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统已经在家庭和
10、工业的各个领域得到了应用,因为计算机芯片是嵌入在有关的设备中的,所以没有自己独立的外壳。目前大多数嵌入式系统还处于单独应用的阶段,以MCU为核心,与一些监测、伺服、指示设备配合实现一定的功能。在一些工业和汽车应用中,为了实现多个MCU之间的信息交流,利用CAN,RS-232,RS-485等总线将MCU组网,但这种网络的有效半径比较有限,并且一般是孤立于Internet以外的。二十一世纪无疑是一个Internet时代,这一时代的到来正在不可避免地逐步改变人们日常的工作、学习和生活习惯,以手持电脑、机顶盒、网络电话、住宅网间连接器等为代表的移动办公设各和家庭网络产品将在不久的将来形成时尚,在未来的
11、信息社会中扮演重要的角色。嵌入式系统接入Internet是一种必然的发展趋势。嵌入式系统连接到Internet上面,可以方便、低廉地将信息传送到几乎世界上的任何一个地方。利用该技术,能够将Internet延伸到嵌入式系统,并实现基于Internet的远程数据采集、远程控制、自动报警、上传/下载数据文件、自动发送e-Mail等功能,为IST(Internet Sensor Technology)网络传感器技术)、HVAC(家庭环境自动控制)、信息家电、工业自动化(制药土业过程控制、电力系统、电网安全、电网设备监测、石油化工系统)、局部环境自动监测、智能小区管理、网络自动抄表、高速公路出入口管理、
12、POS网络及电子商务等技术的应用与发展提供了技术保证。将嵌入式系统与Internet结合起来的想法其实很早以前就有了,主要的困难在于,Internet上面的各种通信协议对于计算机存储器、运算速度等的要求比较高,而嵌入式系统中除部分32位处理器以外,大量存在的是8位和16位MCU,若支持TCP/IP等Internet协议将占用大量系统资源,或根本不可能。因而采用高性能的嵌入式处理器成为设计嵌入式Internet系统的关键。随着技术的小断发展,高性能的嵌入式处理器不断涌现,如IBM PowerPC,Motorola PowerPC.Intel x86,MIPS,ARM等系列。因此采用高性能的嵌入式
13、处理器设计嵌入式Internet成为可能。1.2课题的研究意义 近年来随着国民经济的持续快速发展,输电电压等级不断提高,电网的分布也越来越广,电力安全问题也表现得尤为突出。输电线路具有分散性大、距离长、难以维护等特点,近年来事故逐年上升,传统的巡视方式已不能满足现有的安全需求。因此,急需一种有力的监控、监测手段对输电线路上的重要设备和周边状况进行全天候监测,使输电线路运行于可视可控之中。本课题利用嵌入式系统、视频压缩及3G网络可进行随时随地的将视频监控图象传送到远程监控中心和用户的PDA手机中,完成实时的视频采集和浏览,并可以利用本系统进行多种基于3G无线网络的视频扩展,最终可以达到移动终端对
14、移动终端、移动终端对Internet网络之间的相互实时和预存视频传送。整个系统的框图如图1.1所示: 图1.1基于3G网络的视频传输系统 系统主要分为四个部分:视频采集端、视频发送模块、流媒体服务器端,用户终端。1.视频采集端(图中的蓝框部分)为对模拟的监控摄像头进行A/D转化,并通过DSP进行H.264视频编码,在后一章将会介绍H.264视频压缩编码是目前最适合无线网络传输的一种编码格式。将视频数据通过USB接口传给ARM处理器。2.视频发送端(图中的红框部分)将读取进来的已压缩好的视频数据对其进行TCP/IP协议的打包,并通过3G的无线模块进行发送到远程的流媒体视频服务器上。3.流媒体视频
15、服务器(图中紫框部分包含)进行对各个端点的视频接收和回应用户的需求,建立一个用户同远程监控端的桥梁,并保证视频数据随时复制备份。用户终端(图中黑框部分),用户可以分为PDA手机和接入Internet网络的计算机用户,通过C/S构架和B/S构架两种方式经流煤体服务器浏览所需实时视频内容。而在本文中,由于3G网络还未成熟,目前也没有3G模块,而在视频采集端的设计部分还有待完善,所以在本论文主要进行了基于ARM核心系统的研究与设计,将原本设计中的1、3、4部分都进行了有效的替代,主要对第1,2部分也就是核心的ARM处理器进行了系统的研究和软硬件的设计和实现。如图1.2所示。视频采集端由USB数码摄像
16、头代替对模拟摄像头的转换和编码,用ARM实现M-JPEG压缩代替原有的DSP中H.264的编码。4.视频发送模块,利用ARM处理器连接DM9000芯片与局域网连接传输代替原3G模块。利用实验室局域网的传输代替原来的通过无线网络和INTERNET的传输路径。用局域网电脑终端代替原有的手机用户和INTERNET网络用户。 图1.2实验室模拟结构图1.3论文的主要工作内容 系统在经过对3G网络的学习和深刻理解后,对于嵌入式系统的整体架构进行了设计,并进行了可实现性的分析和调研,对于整体工作架构进行了完整的设计和分工,并对其中的核心部分(基于嵌入式Linux系统的ARM控制器)进行了电路设计和软件设计
17、,并对3G网络和视频压缩系统进行了有效的替代和模拟,不仅完成了视频数据在网络中的传输,而且对于一些细节问题在实际的实验中对一些原有的东西进行了改进。由局域网代替模拟,而在进行DSP视频压缩的时候,由于这个也是比较大的工程,实验室目前条件有限,所以我们由USB数码摄像头代替模拟摄像头和A/D转换,在ARM处理器里用相对简单的M-JPEG压缩算法代替原本需要DSP中进行的H.264视频压缩,因为在局域网中面对的网络环境和带宽都比较好,所以这样的实验是完全可行的。本课题的主要工作1.熟悉嵌入式Linux开发环境。2.研究了3G网络的业务特点,主要对其中的关于视频传输的业务进行了解。3.对图像压缩的相
18、关技术进行了研究。4.研究并了解视频监控和视频传输系统。5.研究USB的驱动开发,特别是针对USB摄像头驱动,研究Video4Linux编程。6.研究对USB摄像头操作的上层应用程序开发。7.研究Linux下Socket通信编程。 第二章3G网络及视频传输的研究与介绍 本章首先对3G网络进行了详细的研究,并结合多种视频压缩技术和视频传输技术,最终结合3G网络、视频压缩标准及视频传输方法得出,利用H.264视频编码标准,利用流媒体视频传输技术在3G无线网络上传输远程视频的系统。2.1 3G网络及其多媒体业务简介2.1.1第三代移动通信系统(3G) 20世纪90年代以来,随着数字技术的发展,以数字
19、传输、时分多址/频分双工、码分多址/频分双工为主体的第二代数字移动通信系统(2G)逐渐代替了第一代模拟移动通信系统。其技术进步表现在以下几个方面:完善了呼叫处理和网络管理功能、频谱效率提高、系统容量增大、保密性好、标准化程度高。第二代数字移动系统的成功不仅体现在技术上,在商业上也取得很大的成就,国际上商用的2G系统有欧洲的GSM系统、日本的PDC和美国的CDMA(IS-95)等。国内目前2G系统有两大运营商,中国移动采用GPRS系统(GSM升级版),而中国联通采用CDMA系统。1998年起,ITU-T综合标准化组织综合各国标准化组织提出的建议,开始制定和不断完善第三代移动通信标准IMT-200
20、0。第一、二代蜂窝移动通信系统主要针对传统的语音和低速率数据业务,而第三代移动通信系统(3G)主要面向高速率数据业务。3G有更大的系统容量和更灵活的高速率、多速率数据传输,除了语音和数据传输业务,还能提供高达2Mbps的高质量多媒体业务。根据无线空中接口技术的不同,现有3G技术大致可以分为3类:由欧洲和日本提出的WCDMA系统、由美国提出的CDMA2000系统和由中国提出的TD-SCDMA系统。其中WCDMA-FDD系统采用码分多址、频分双工的工作方式,上下行频率间隔为95MHz,采用直接序列(DS)作为信息扩频方式。而WCDMA-TDD系统和TD-SCMDA系统都采用码分多址/时分多址、时分
21、双工的工作方式,两者的区别在于扩频码的速率不同,前者采用高码片速率3.84Mcps,而后者采用地码片速率1.28Mcps。CDMA2000采用码分多址、频分双工的工作方式,在下行链路传输中,定义了直扩和多载波两种工作方式,码片速率分别为3.6864Mcps和1.22Mcps。而在欧洲,采用WCDMA作为无线空中接口技术的3G系统又被称为通用移动通信系统UMTS(Universal Mobile Telecommunications System)。现有支持IMT-2000的标准化组织主要是3GPP和3GPP2。其中3GPP称为3G合作伙伴项目,负责制定以原有GSM核心网络演变的3G标准,以WC
22、DMA,TD-SCDMA为空中接口技术。3GPP称为3G合作伙伴项目,负责制定ANSII-41核心网为基础,CDMA2000为无线空中接口的3G技术规范。现在成熟的3GPP2版本主要有CDMA2000-1X和CDMA2000-1XE,其中后者是前者的增强技术。我们有理由相信,3G网络的到来代表着视频传输的新时代到来。2.2主要图象压缩方法和视频压缩标准介绍 视频传输应用系统多以数字视频处理技术为基础,利用图像数据压缩的国际标准(M-JPEG,MPEG-1或MPEG-4,H.264等),综合利用图像传感器、计算机网络、自动控制和人工智能等技术的流媒体传输系统。这类应用系统将视频捕捉设备获得的模拟
23、视频信号转变为数字视频信号以便于计算机处理,或者由数字摄像机直接输出数字视频信号,经过压缩处理,再通过网络将数据传输到对方。数字视频信号具有频谱效率高、抗干扰能力强、失真少等模拟信号无法比拟的特点,同时也具有信号处理数据量大、占用资源多的问题,正由于这个原因,造成数字视频传输应用系统虽然具有很多的优点,但其实际应用范围不能得到更大的扩展。只有对数字视频信号实现更有效地压缩,使之在通信和存储方面的开销降到最低,它的优点才能表现出来,数字视频应用才有可能全面发展起来。将模拟视频信号转化为数字视频信号包括不少技术问题。模拟视频的数字化主要包括色彩空间的转换、光栅扫描的转换以及分辨率的统一。模拟视频一
24、般采用分量数字化方式,先把复合视频信号中的亮度和色度分离,得到YUV或YIQ分量,然后用三个模数转换器对三个分量分别进行数字化,最后转换成RGB(Red,Breen,Blue,三原色)空间。根据电信号的特征,亮度信号的宽度是色度信号带宽的两倍。因此其数字化时可采用幅色采样法,即信号的色差分量的采样率低于对亮度分量的采样率。用Y:U:V来表示YUV三分量的采样比例,则数字视频的采样格式分别有4:1:1,4:2:2和4:4:4三种。电视图像既是空间的函数,也是时间的函数,而且又是隔行扫描式,所以其采样方式比扫描仪图像的方式要复杂的多。分量采样时采集到的隔行样本点,要把隔行样本组合成逐行样本,然后进
25、行样本采样点的量化,YUV到RGB色彩空间的转换等等,最后才能得到数字视频数据。2.2.1图象压缩的主要基本方法简介 数据之所以能够压缩是基于原始信源的数据存在着很大的冗余度。随着数字通信技术和计算机技术的发展,数据压缩技术日臻完善,适合各种应用场合的编码方法不断产生。目前常用的压缩编码方法可以分为两大类:一类是无损压缩法,也称冗余压缩法或嫡编码法;另一类是有损压缩,也称嫡压缩法。1.帧内和帧间压缩帧内数据是指一帧画面内水平和垂直方向取样点的集合,或称图像空间。把只利用空间冗余度的技术归类为帧内编码技术。帧内编码的例子有帧内预测编码(DPCM)、二维离散余弦变换(DCT)、矢量量化(VQ)、子
26、带编码和塔形编码等。由于帧内编码不涉及时间维的信息量,不能获得如帧间编码那样高的压缩水平。在帧间方法中,需要同时考虑空间和时间的冗余度。然而,帧内编码的实现相对而言比较简单,编码器中不需要用以处理相邻帧数据的存储器,不需要在1个帧的间隔时间内处理来自多帧的信息。2.预测编码预测编码的原理是由邻近的像素值预测当前的像素值,然后对当前的像素和预测像素的差值进行量化和编码。考虑到在高性能和复杂性之间的折衷,通常用于帧内预测的邻近像素的个数并不多(不超过4个),使用更多的像素并不会显著改进预测性能。对于帧间预测,一般只用相邻帧的对应像素进行预测。图像的相关性越大,预测误差就越小,取得的压缩比也就越大。
27、相对说来,DPCM是一种比较容易实现的压缩方法,但在较低的速率时,其压缩能力一般不如变换编码好。3.变换编码正交变换的理论证明,通过某种正交变换,可以把数据从图像域映射到变换域中去,总能量不变,但其分布则发生改变,集中分布在少数区域,形成一种更紧凑的形式。这使得图像在变换域中可以用更少的比特数表示,以此获得压缩。尽管正交变换有许多种,但实用中大都选用二维DCT(离散余弦变换)进行变换编码。这是因为其性能优越,接近最佳的K-L变换。将一幅图像分割为多个相邻小方块,对每个单独的图像方块进行DCT变换。图像块尺寸的选择是在图像质量、压缩效率和实现难度之间进行折衷而决定的。在实际应用中,常选8X8或1
28、6X16的图像块。4.变长编码它包括2部分,即一维游程编码和霍夫曼编码。图像经DCT(离散余弦变换),变换和量化后形成为数众多的零系数,而且这些系数大部分集中在高频部分。为了充分利用这一点,在进行游程编码时,对8X8图像块的DCT系数采用曲折扫描顺序处理,以期获得较长的连零值,有利于其后的游程编码。游程编码将曲折扫描后的系数变成若干对(游程一幅值)数据这里,游程是指连零的个数,幅值是指非零系数的值。 第三章 基于ARM的图像采集和传输模块的硬件设计 本系统以基于ARM9的嵌入式处理器三星S3C2410芯片为核心,S3C2410芯片的功能很强大,集成了各种常用的重要接口,如USB接口、UART、
29、SPI、I2C、SD卡、ADC通道和触摸屏接口等。接口应用范围很广,适用于信息家电、智能电话、工业控制、手持设备、移动终端等领域15。利用S3C2410强大的扩展功能,根据本项目的实际需要设计了如图3.1中的硬件系统,其中USB接口数码摄像头、串口、网口作为输入输出设备,FLASH和SDRAM作为存储器设备,JTAG口是用来把嵌入式Linux操作系统和应用程序烧写进FLASH存储器的,下面具体介绍各部分的设计。其中RS232接口是从PC机的串口下载编译的内核和软件,FLASH和SDRAM则相当与PC机上的硬盘和内存,JTAG接口为调试所使用,数码摄像头和DM9000芯片为实验室下的视频数据采集
30、和发送端。数码摄像头和S3C2410芯片共同构成了视频数据采集端,通过以太网控制芯片DM9000构成数据发送端,完成了数据的采集和发送的任务。 图3.1系统硬件结构框图3.1 S3C2410存储器控制器与存储器接口电路 S3C2410存储器控制器提供外部存储器存取的控制信号,它具有如下特性:数据存储在存储器的方式可以通过软件设置成大端和小端两种方式,系统的存储空间分成8个bank,每个bank的大小是128M字节,共1G字节,采用nGCS7:08个通用片选线信号选择8个bank区,图3.2是S3C2410复位后的存储空间分布图;bank0到bank5的开始地址是固定的,用于ROM或SRAM;b
31、ank6和bank7用于ROM、SRAM或SDRAM,bank6地址也是固定的,bank7的开始地址是bank6的结束地址,起始地址和大小编程可变;所有内存块的访问周期都可编程,外部Wait扩展了访问周期;除了bank0,其余的存储段可以通过程序控制存取的位数8/16/32;支持SDRAM的自动刷新和电源关模式等。从上可知S3C2410存储器控制器支持多种类型的存储器,针对本项目需求,下面讨论一下存储器的如何选用和接口设计问题。3.2处理器S3C2410网络接口扩展的电路设计 处理器S3C2410中没有集成网络控制器,要实现网络连接,必须使用网络接口芯片进行扩展。DM9000是完全综合的、成本
32、较低的快速以太网控制器芯片,具有通用的处理器接口,10/100M自适应,以及4K双字节静态存取存储器。它具有低功耗、高处理性能的特点,支持3.3V到5V的容差,支持MII接口和可选的EEPROM配置,支持8位16位32位的接口来适应不同的处理器对内部存储器的访问,完全支持IEEE802.3u规格和IEEE 802.3X全双工流控制以及支持连接状况变更和远程唤醒功能,因此本系统采用它来进行网络功能扩展。 S3C2410与DM9000的连接框图如3.5所示,通过网络变压器连接的RJ45接口可以直接连接到外部网络中去。DM9000支持ISA异步总线接口,该ISA接口支持对内部存储器数据操作的8位和1
33、6位I/O模式,这里采用的是其中16位数据I/O模式,DM9000的16位数据线SD00:15与CPU S3C2410的低16位数据总线DATA00:15相连,DM9000的地址线SA4SA9用来选择其中的I/O端口的基地址,基地址是可在300H370H范围内进行设置的, 图3.2 S3C2410芯片复位后的存储空间复位图 图中把SA9和SA8连接到VCC,SA4SA7接GND,这样就把DM9000的I/O基地址设置为300H,如果在DM9000外围配置了EEPROM的话,也是可以通过对EEPROM编程来重新设置这个地址值的;引脚AEN起地址使能作用,S3C2410利用片选控制线nGCS1提供
34、对AEN的信号输入,实现对DM9000的片选,这样DM9000位于存储空间的nGCS1+300H位置;CMD引脚来决定操作时访问的是数据端口还是地址端口,这里由S3C2410的地址总线中的ADDR2信号来提供,当输入为低电平时,访问的是地址端口,DM9000设备地址端口为nGCS1+300H+0,当输入为高电平时,访问的是数据端口,DM9000设备数据端口为nGCS1+300H+4;DM9000占用S3C2410的24路外部中断的EINT0,引脚PW_RST#与S3C2410的nRESET相连实现硬件复位功能,引脚X2_25M和X1_25M外接一个25M晶体产生DM9000本身的系统时钟和网络
35、时钟;网络连接及数据收发状态由LED指示,LINK_ACT引脚引出的指示灯表示连接状态,SPEED引脚引出的指示灯表示数据收发状态。3.3 USB控制器及USB电路 S3C2410集成了USB主机控制器和设备控制器,在外部有2个USB主机接口和一个设备接口。通用串行总线(USB)设备控制器设计用DMA接口提供一个高性能完备的速率功能控制解决方案,它支持USB1.1协议版本,有悬空和唤醒功能,USB控制器允许使用DMA的批量传输、中断传输和控制传输三种传输方式。S3C2410引出USB连接口十分方便,按照USB1.1标准协议连接即可,同时支持低速和高速的USB设备传输。在这里我们扩展的是主USB
36、接口,应将D+接S3C2410的DP,D-接DN,电路如图3.3所示,本系统中的USB口数码摄像头就是连接在USB_CON上。 图3.3 S3C2410芯片与USB接口框图3.4 S3C2410的UART端口及由其扩展的串口电路 图3.7 S3C2410芯片与UART接口电路框图 S3C2410的UART提供3个独立通道的异步串行输入输出口,每一个都可工作在中断模式和DMA模式下。如果用系统时钟,UART可支持达230.4Kbps的位速率;如果用外部设备通过UCLK提供的时钟,那么UART可工作在更高的速率;3个UART都可用作红外线接口。S3C2410可以很方便地用UART实现RS-232串
37、口功能,但S3C2410的供电电压为1.8V/3.3V,所以I/O口的最大逻辑电平也是3.3V,要实现RS232串口功能还要加电平转换电路,我们用MAX3232来实现这一功能。MAX3232单+3.3V电源供电,仅需外接几个电容即可完成从TTL/CMOS电平到RS-232电平的转换。 第四章基于ARM的图象采集模块的软件设计 本章介绍ARM图象采集端中软件的设计方法和主要内容。包括程序的移植和调试方法,同时包括了主要的2个部分:USB口数码摄像头的视频采集模块编写(包括摄像头驱动和Video4Linux下摄像头采集编程)和M-JPEG压缩算法。4.1嵌入式LINUX系统的移植简介及调试方法4.
38、1.1 BOOTLOADER(引导加载程序)移植BOOTLOADER(引导加载程序)是在操作系统内核运行之前运行的第一段代码通过这段代码。我们可以初始化硬件设备、建立内存空间的映射图。从而将系统的软硬件环境带到一个合适的状态.以便为最终调用操作系统内核准备好正确的环境。对于PC机的Linux体系结构.PC机中的引导加载程序由BIOS和位于硬盘MBR的操作系统引导加载程序组成BIOS在完成硬件检测和资源分配后.将硬盘MBR中的BOOTLOADER读到系统的RAM中。然后将控制权交给操作系统BOOTLOADER引导加载程序的主要运行任务就是将内核映像从硬盘上读到RAM中。然后跳转到内核的入口点去运
39、行。即开始启动操作系统在嵌入式系统中。通常并没有像BIOS那样的固件程序。因此在整个系统的加载启动任务就完全由BOOTLOADER来完成。4.1.2 Linux内核编译 交义编译工具被安装到/usr/local目录下,故应该设置环境变量PATH,使其包含/usr/local/bin路径。在这个目求包含arm linux的源码压缩包以及一此例子程序。#PATH=/usr/local/bin:$PATH内核都是常驻内存的,当需要调用应用程序时,再把需要的程序从磁盘调入内存运行。构建内核常用的命令如下:.make config:配置内核,调用./scripts/Congigure来进行配置.make
40、 dep:链接程序代码及函数库,创建依赖性列表.make clean:清除原有的编译生成的文件.make zlmage:生成可压缩的内核映象文件./arch/$(ARCH)/bcot/zlmagearm linux的内核在编译结束后会在arm linux-dist/目求下产生两个新的目录images/和romfs/。Images目录中包含了编译完成后可以下载到目标板上运行的arm linux内核映象的二进制文件。我们可以在rom fs/bin/目录下添加自己的应用程序,当然这里的应用程序是指经过arm-elf交叉编译工具编译,可在目标板上运行的程序。4.1.3软件调试方法 绪论中提到,由于嵌入
41、式系统平台资源有限性的特点,其软件开发时采用一种交叉编译调试的方式,交叉编译调试环境建立在宿主机(通用PC机)上,开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,通过NFS方式把宿主机上可执行文件mount加载到目标平台上,调试信息通过串口打印在宿主机的minicom屏幕上,通过在串口终端这样反复调试、更改、编译再调试,而不必每次烧写到目标平台的FLASH中,直至程序工作正常,得到正确的运行结果,然后才把可执行文件下载烧写到目标平台上(在这里指以S3C2410为处理器的嵌入式系统平台)运行,可执行文件是烧写在平台上的FLASH中, 图4.1 FLASH中代码存放位置 4.2
42、基于USB接口的视频图象采集的软件实现 本嵌入式系统平台上运行的是armlinux,在启动后启用了MMU,系统进入保护模式,所以应用程序就不能直接读写外设的I/O区域(包括I/O端口和I/O内存),一般这时就要借助于该外设的驱动来进入内核态完成这个工作。所以本系统中的视频采集要分两步实现:一步是为USB口数码摄像头在内核中写个驱动,另一步是要再写个上层应用程序获取视频数据。下面分别进行讨论。4.2.1 USB口数码摄像头的驱动实现 图4.2 Linux下的驱动实现原理框图 在Linux下,所有外部设备被看成是一类特殊文件,称之为“设备文件”,系统中的所有硬件设备都可使用一个特殊的设备文件来表示
43、,例如,系统中的数码摄像头使用/dev/Video0来表示。每个设备文件对应有两个设备号:一个是主设备号,标识该设备的种类,也标识了该设备所使用的驱动程序;另一个是次设备号,标识使用同一设备驱动程序的不同硬件设备。设备文件的主设备号必须与设备驱动程序在登录该设备时申请的主设备号一致,否则用户进程将无法访问到设备驱动程序。在Linux操作系统下有两类主要的设备文件:一类是字符设备,另一类则是块设备。字符设备是大多数只能顺序访问的数据通道,不能完全象访问普通文件数据流一样前后移动访问指针,不需要经过系统的快速缓存,在对字符设备发出读写请求时,实际的硬件I/O操作紧接着就发生了,一般来说字符设备中的
44、缓存是可有可无的;然而也存在和数据区特性类似的字符设备,访问它们时可前后移动访问指针,例如,帧捕捉卡和本系统平台用的USB口数码摄像头就是这样一个设备,应用程序可以用mmap或lseek访问所抓取的整个图像。块设备则是利用一块系统内存作为缓冲区,当用户进程对设备进行读写请求时,驱动程序先查看缓冲区中的内容,如果缓冲区中的数据能满足用户的要求就返回相应的数据,否则就调用相应的请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,其目的是避免耗费过多的CPU时间来等待操作的完成。本系统平台使用的USB口数码摄像头是字符设备,因此要做的工作是Linux下字符型设备驱动的实现。相对于系
45、统调用看成是Linux内核和应用程序之间的接口,设备驱动程序可以看成Linux内核与外部设备之间的接口,设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。Linux抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待,可以使用和操作文件相同的、标准的系统调用接口来完成对硬件设备打开、关闭、读写和I/O控制等操作,而驱动程序的主要任务也就是要实现这些系统调用函数。具体来说,Linux下的字符设备驱动程序大致可以分为如下几个部分:驱动程序的注册与注销、设备的打开与释放、设备的读写操作、设备的控制操作、设备的中断和轮询处理。1.驱动程序的注册与
46、注销向系统增加一个驱动程序意味着要赋予它一个主设备号,这可以通过在驱动程序的初始化过程中调用register_chrdev()来完成。而在关闭字符设备时,则需要通过调用unregister_chrdev()从内核中注销设备,同时释放占用的主设备号。2.设备的打开与释放打开设备是通过调用file_operations结构中的函数open()来完成的,它是驱动程序用来为今后的操作完成初始化准备工作的。在驱动程序中,open()需要完成下列工作:1)检查设备相关错误,如设备尚未准备好等。2)如果是第一次打开,则初始化硬件设备。3)识别次设备号,如果有必要则更新读写操作的当前位置指针f_op。4)分配
47、和填写要放在file->private_data里的数据结构,private_data是跨系统调用时保存状态信息的非常有用的资源。5)使用计数增1。释放设备是通过调用file_operations结构中的函数release()来完成的,这个设备方法有时也被称为close(),它的作用正好与open()相反,要完成下列工作:1)使用计数减1。2)释放由open分配的保存在file->private_data中的所有内容。3)如果使用计数为0,则关闭设备。3.设备的读写操作字符设备的读写操作相对比较简单,直接使用函数read()和write()就可以了。4.设备的控制操作除了读写操作外
48、,应用程序有时还需要对设备进行控制,这可以通过设备驱动程序中的函数ioctl()来完成。ioctl()的用法与具体设备密切关联,因此需要根据设备的实际情况进行具体分析,在下面视频采集程序中用到的多种方式的控制函数都是在摄像头驱动实现的。5.设备的中断和轮询处理对于不支持中断的硬件设备,读写时需要轮流查询设备状态,以便决定是否继续进行数据传输。如果设备支持中断,则可以按中断方式进行操作。本系统平台使用的嵌入式armLinux系统在内核主要功能上与Linux操作系统没本质区别,所以驱动程序要实现的任务一样,只是编译时使用的编译器、部分头文件和库文件等要涉及到具体处理器体系结构,这些都可以通过在Ma
49、kefile文件中具体指定。Video4Linux(简称V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,这些视频设备包括现今市场上流行的TV卡、视频捕捉卡和USB摄像头等。具体对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open、read、write、close的实现,对中断的处理实现,内存映射功能以及对I/O通道的控制接口函数ioctl等,并把他们定义在struct file_operations中。这样当应用程序对设备文件进行诸如open、close、read、write等系统调用操作时,嵌入式Linux内核将通过file
50、_operations结构访问驱动程序提供的函数。例如,当应用程序对设备文件执行读操作时,内核将调用file_operations结构中的read函数,具体实现原理如图4.2所示。Linux下的设备驱动程序可以按照两种方式进行编译,一种是直接静态编译成内核的一部分,另一种则是编译成可以动态加载的模块。如果编译进内核的话,会增加内核的大小,还要改动内核的源文件,而且不能动态地卸载,不利于调试,所以摄像头驱动使用模块方式加载。在系统平台上对USB口数码摄像头驱动,首先把USB控制器驱动模块静态编译进内核,使平台中支持USB接口,再在需要使用摄像头采集时使用insmode命令或系统自动(此时要求在/
51、etc/modules.conf中设备名与驱动模块对应起来)动态加载其驱动模块(此驱动模块为.o后缀名文件,通过使用针对于具体处理器的arm-gcc命令行里加上-c的参数和D_KERNEL_DMODULE参数,把使用C语言编写的驱动程序模块编译成.o目标文件,加入到/lib/modules/目录下,然后用depmod-a使此模块成为可加载模块),驱动程序中的模块加载函数int init_module(void)会被自动调用,负责进行设备驱动程序的初始化工作,这样驱动就会根据自己的类型(字符设备类型或块设备类型,例如摄像头就是字符设备而硬盘就是块设备)向系统注册,注册成功系统会反馈一个主设备号,
52、这个主设备号就是系统对它的唯一标识(摄像头设备在/proc/devices中显示的主设备号为81,我们用ls-l/dev/Video0看到的主设备就肯定是81)。驱动就是根据此主设备号来创建一个一般放置在/dev目录下的设备文件(mknod命令用来创建它,它必须用主设备号这个参数),这样摄像头就可正常工作了,4.2.2 Video4Linux下的摄像头采集编程在USB摄像头被驱动后,只需要再编写一个对视频流采集的应用程序就可以了。根据嵌入式系统开发特征,先在宿主机上编写应用程序,再使用交叉编译器进行编译链接生成在目标平台的可执行文件,在宿主机上与目标板通信采用打印终端的方式进行交叉调试,成功后
53、移植到目标平台。(1)程序中定义的数据结构struct video_capability grab_cap;struct video_picture grab_pic;struct video_mmap grab_buf;struct video_mbuf grab_vm;这些数据结构都是Video4Linux支持的,它们的用途如下:video_capability包含摄像头的基本信息,例如设备名称、支持的最大最小分辨率、信号源信息等,分别对应着结构体中成员变量name32、maxwidth、maxheight、minwidth、minheight、channels(信号源个数)、type等;
54、video_picture包含设备采集的图象的各种属性,如brightness(亮度)、hue(色调)、contrast(对比度)、whiteness(色度)、depth(深度)等;video_mmap用于内存映射;video_mbuf利用mmap进行映射的帧信息,实际上是输入到摄像头存储缓冲中的帧信息,包括size(帧的大小)、frames(最多支持的帧数)、offsets(每帧相对基址的偏移); 图4.3视频采集程序流程图程序中用到的主要系统调用函数:open(“/dev/video0”,int flags);close(fd);mmap(void*start,size_t length,
55、int prot,int flags,int fd,off_t offset);munmap(void*start,size_t length);ioctl(int fd,int cmd,);前面提到Linux系统中把设备看成设备文件,在用户空间可以通过标准的I/O系统调用函数操作设备文件,从而达到与设备通信交互的目的,当然在设备驱动中要提供对这些函数相应的支持。这里说明一下ioctl(int fd,int cmd,)函数,它在用户程序中用来控制I/O通道,其中fd代表设备文件描述符,cmd代表用户程序对设备的控制命令,省略号一般是一个表示类型长度的参数,也可没有。(2)采集程序实现过程首先打
56、开视频设备,摄像头在系统对应设备文件为/dev/video0,采用系统调用函数grab_fd=open(“/dev/video0”,O_RDWR),grab_fd是设备打开后返回的文件描述符(打开错误返回-1),以后的系统调用函数就可使用它来对设备文件进行操作了;接着利用ioctl(grab_fd,VIDIOCGCAP,&grab_cap)函数读取struct video_capability中有关摄像头信息,该函数成功返回后这些信息从内核空间拷贝到用户程序空间的grab_cap各成员分量中,使用printf函数就可得到各成员分量信息,例如Printf(“maxheight=%d”,grab_fd.maxheight)获得最大垂直分辨率的大小,再用ioctl(grab_fd,VIDIOCGPICT,&grab_pic)函数读取摄像头缓冲中video_picture信息,在用户空间程序可以改变这些信息,具体方法为先给分量赋新值,再调用VIDIOCSPICT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业环保标语宣传标语范文两篇
- (高级)三级炼化贮运工职业技能鉴定理论考试题库(含答案)
- 2025年河北工艺美术职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 专题06 统一多民族国家的巩固与发展(第1期)
- 电动车购销合同年
- 幼儿园主题教育活动策划方案五篇
- 艺考培训合同协议书
- 经销商合作合同范本
- 餐饮承包合同范本
- 全日制劳动合同范本
- 第1课 隋朝统一与灭亡 课件(26张)2024-2025学年部编版七年级历史下册
- 【历史】唐朝建立与“贞观之治”课件-2024-2025学年统编版七年级历史下册
- 产业园区招商合作协议书
- 人教版八级物理下册知识点结
- 2021年高考真题-生物(湖南卷) 含解析
- 幼儿园2024-2025学年第二学期园务工作计划
- 2024公路工程施工安全风险辨识与管控实施指南
- 新疆2024年新疆和田师范专科学校招聘70人笔试历年典型考题及考点附答案解析
- 【正版授权】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024时事政治考试题库(基础题)
- 2024山西文旅投资集团招聘117人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
评论
0/150
提交评论