埃德蒙顿华人社区-Edmonton China

 找回密码
 注册
查看: 782|回复: 0

嵌入式ARM的图像采集与传输设计

[复制链接]
鲜花(0) 鸡蛋(0)
发表于 2010-5-19 20:02 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
本文在基于嵌入式Linux系统平台上,采用USB摄像头捕捉视频信号,利用V4L内核应用编程接口函数,实现了视频连续帧图像的采集,并保存成文件的形式利用无线传输方式传输给接收端。这里着重讨论视频采集发送端的实现。1 w" U2 _2 _4 W& r" C
  1 系统组成' s# R4 R  W: _
  1.1 统的硬件构成. O% F# l' C" K; }2 u7 E7 k0 a
  本系统包括发送端和接收端2部分,两部分均采用Samsung公司生产的S3C2410处理器做硬件开发平台。S3C2410在片上集成了丰富的组件:分开的16 KB指令Cache和16 KB数据Cache、用于虚拟存储器. a* a/ w  k/ }+ e+ K6 o% V

9 j: U; X. u/ ~- R! [' k  \9 \. P管理的MMU、支持STN和TFT的LCD控制器、NAND Flash启动装载器、具有片选逻辑和SDRAM控制器的系统管理器、3通道UART、4通道DMA、4通道PWM定时器、I/O口、RTC、8通道10位ADC和触摸屏接口、I2C' e* B8 t7 a# x8 n6 O

' A$ H" Y0 t1 k0 r' a总线接口、I2S总线接口、USB主设备、USB从设备、SD卡和MMC卡接口、2通道的SPI以及PLL时钟发生器,还采用了AMBA(advanced micrcocontroller bus architecture)新型总线结构。6 |6 H: a* q+ \. w& E8 w
  应用S3C2410处理器平台搭建的发送端硬件结构如图:包括S3C2410处理器、RS232接口、JTAG接口、RJ-45接口、SDRMA、Flash、电源、通过USB口连接的视频采集模块和通过USB接口连接的视频发射" N) Y! m6 }+ }- T+ n. e3 y( y
, u' {2 b6 W+ Z) Z  p' W
模块。RS232串口用于人机交互及低速数据的收发,应用电平转换芯片MAX-323进行串口电平和TTL/CMOS电平的转换。JTAG接口用于下载Bootloader。RJ-45接口用于和以太网连接,下载操作系统Linux内! R* B! D1 S# X7 x' l3 ~. [" _

5 y+ |6 e( T3 V4 p+ ]( i核、根文件系统和应用软件。SDRMA用于系统的数据存储器、Flash用于系统的程序存储器。应用S3C2410处理器平台搭建的接收端硬件电路:与发送终端相比,多了SD卡和LCD显示器。SD卡主要用来存储: t! x4 G& O  ^* z: @
7 S# j8 c# }4 c2 [1 D: m- W
数据,LCD显示器主要用来显示视频图像。
: D# y0 g9 ^# x  {  1.2 系统软件设计0 Z# f. W5 r: J2 Y: w  J$ x
  系统的软件构成分为引导驱动程序、操作系统、文件系统和应用程序4部分。引导驱动程序在系统启动时进行内存重映射,将保存在Flash中的操作系统和应用程序重新映射到SDRAM中。Linux的内核7 H$ `, g. ?% U* ?- G: x2 A
: K0 L& f7 R6 D
版本为LinIix2.6。文件系统是Yaffs,它包括模块、配置文件和库等。系统的应用程序建立在嵌入式Linux内核、摄像头驱动和文件系统之上。" _  [0 d7 |9 _3 A$ D; T' M. q
  2 视频采集的具体实现/ C" d9 j1 l' N) z& _
  USB摄像头连接简单、使用灵活、价格低廉且具有良好的性能,因此,得到了广泛的应用。Linux内核包含了多种USB摄像头驱动,最常用的有基于OV5ll及其兼容芯片。OV511芯片主要包括CAMERA接口& ?$ x) ^2 z" ?- H

3 U! ]9 m- U! g9 L2 j7 X- h3 _6 D、DRMA接口、ISO FIFO接口和OmniCE以及USB控制器等部分。本设计使用的是在低端市场占有率较高的中芯微公司生产的ZC030x系列摄像头芯片。Linux系统中的视频子系统’Vide04linux为视频应用程序* e: q7 {  H+ F7 Z" H( V( A
8 z  b8 B1 D- X% B* R  x
提供了一套统一的API,视频应用程序通过调用API即可操作各种不同的视频捕获设备,包括电视卡、视频捕捉卡和USB摄像头等。本设计的具体实现过程如下所述:' R5 u% i" h; l9 N( E, l5 E
  2.2 利用Vide041inux实现图像采集
& J1 I5 K0 o2 V  在安装了图像采集设备驱动后,只需要再编写一个对视频采集的应用程序就可以采集视频图像。在Linux系统中,视频文件是设备文件,可以像访问普通文件一样对其进行读写,摄像头文件一般是/
4 v9 `' m$ A! z( n7 i4 ?, t1 v# o. e# @) f2 c! X7 l- W7 @* b
dev/v4l/video。在进行视频捕捉之前,需要做一些必要的设置工作。这些设置涉及到如下结构:8 L6 e" A' R/ y0 g) o3 g
  V4L下视频采集编程首先要打开视频设备:6 \; p  _1 I/ g% z
  Int fd="open"(“/dev/v4l/video”,O_RDONLY);( D" A* i5 y2 }/ M9 k
  If(fd<O)return-l;$ `, |- U, S9 l3 P9 a2 ~
  接着对摄像头参数进行设置。一般是先通过I/O控制命令读取设备信息,然后对特定项进行修改,最后通过I/O控制命令保存到内核中。由于篇幅有限源程序不再赘述。. t& z; _4 D! x4 v
  获取基本信息后,可以输出显示,也可以通过ioctl系统调用对这些值进行修改。然后调用函数Char*Carmera_get_image(video_device*vd)获得图像数据指针。此函数比较重要,关系到图像采集的
8 a  k! G" Z  k# S: B7 W6 u6 U+ ~6 K+ `* T) `: k5 r5 X
效率。获取图像数据有2种方法:一是通过映射得到视频驱动的数据缓冲,然后直接对映射后的缓冲进行读操作;二是直接读设备,及调用read函数。下面分别介绍:
! o# l1 t3 }3 C2 d7 G! {  (1)read系统调用方式比较简单,只需将前面得到摄像头参数传入read函数中,得到图像数据指针picture_p后返回即可:read(vd->fd,picture_p,width*hight);其中vd_>fd为设备文件描述符。
; N2 u/ Q9 H+ X; i) }. X! `) z  (2)利用mmap方式先使用ioctl(fd,VIDIOCGMBUF,&grab_vm)函数获得摄像头存储缓冲区的帧信息,之后修改voideo_mmap中的设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式,使用) _- J6 P! T  m9 V- d# F8 t9 y  m6 Z
' q; K5 T  S6 q7 k! G
如下语句:. R% X+ j6 I) h, P9 ?- [
  grab_buf.height=240;) D- G" W( c- N& r+ ~  k
  grab_buf.width=320;
+ b+ z6 Y& K+ a7 l) V/ O  grab—buf.format=VIDEO_PALETTE_RGB24;) ]" B( O9 u) {$ {4 F. }5 @
  接着把摄像头对应的设备文件映射到内存区,具体使用grab_data=(unsigned char*)mmap(O,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grab_fd,O)操作。这样设备文件的内容就映射5 U& ~1 u* n% j. i- z

( I1 D. W4 `% ~到内存区,该映射内容区可读可写并且不同进程间可共享。该函数成功时返回图像数据的指针,失败时返回值为-1。+ m  v2 U# T" d3 P* q
  2.1 摄像头驱动的实现
% q# q9 b1 S: V# i/ X" x  1)配置Vide04linux内核
# ~( I1 Y4 k/ l& ~0 t  在终端使用make menuconfig命令打开S3C24lOlinux内核编译的main menu窗口,并进入“multimedia device--->”菜单选项,然后将Video for Linux配置为模块,即:6 ~! F$ T% _6 B7 g0 q2 j/ j7 }0 H
  Device driver--->7 \4 Q& W& B! X
  Multimedia devices--->
2 t4 w" @+ S8 p) p  <*>Video for linux
0 e& d' v% e$ a0 K  d* k  2)配置OV511驱动
: }( q3 }6 v9 Q/ i- y4 Y  返回主菜单,在进入“USB support--->”菜单选项,然后将USB OV5llcamera support设置为模块,即:$ ?: e5 h; J2 f+ S
  SUB suppor--->0 n% r  N: K( H) c) a3 ?  n
  <*>USB OV5llcamera support(NEW)
6 Z& [; h: Y8 X- f- N9 k  3)模块安装  W4 y8 z, v! d1 g7 }( H
  执行以下命令安装视频输入模块:
( u( G4 d& C+ r* a" v  insmod videodev.o3 l8 l9 _- X2 s/ I
  执行以下命令安装视频输入设备驱动模块:
' w2 A% A: S. A. i& w: o  _  insmod usbcore.o
  X: K) S% V8 y- ~+ g& H  insmod usb-ohci-s3c2410.ko) U, y. v) `5 t# }: `3 O6 o
  insmod ov511.o
% c6 @9 J% z% A0 r0 H) I  由于使用的设备是USB接口的摄像头,所以在加载ov511.o模块前,需要加载USB内核驱动和主机控制器驱动。
  a! _5 z: [' s; ]+ I9 g  3 无线传输模块
& y% V1 }% C2 ], |5 G  S  本系统选用西门子的MC235作为GPRS通信模块,来实现图像的无线传输。该模块结合语音、数据传输、短信服务等功能,最大传输速率可以达到85.6 Kbps,具有丰富的AT指令使模块与微处理器通信,功能强大,操作灵活方便,特别适用于数据的监测和传输。在进行GPRS传输操作之前需对模块进行设置,主要有:(1)设置通信波特率;(2)设置接入网关;(3)设置移动终端类别;(4)测试GPRS服务是否开通,激活GPRS功能。这些设置都在主程序的初始化代码段完成。通过测试,GPRS驱动正常工作,能很好地支持数据/命令复合协议传输,其协议的丢包率、吞吐量等性能指标与无线模块的指标无实质性差别,整个系统工作正常,基本达到设计要求。' y( v7 S" l0 Y, L, c. I$ F
转自:http://www.3gtarena.com/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|小黑屋|手机版|Archiver|埃德蒙顿中文网

GMT-7, 2026-8-14 05:58 , Processed in 0.078863 second(s), 10 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表