埃德蒙顿华人社区-Edmonton China

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

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

[复制链接]
鲜花(0) 鸡蛋(0)
发表于 2010-5-19 20:02 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
本文在基于嵌入式Linux系统平台上,采用USB摄像头捕捉视频信号,利用V4L内核应用编程接口函数,实现了视频连续帧图像的采集,并保存成文件的形式利用无线传输方式传输给接收端。这里着重讨论视频采集发送端的实现。5 U/ `4 ^; l4 P. k1 V( z1 I: P
  1 系统组成9 S8 B4 x, ~" T6 x
  1.1 统的硬件构成1 F7 q- \5 }) U. o  r
  本系统包括发送端和接收端2部分,两部分均采用Samsung公司生产的S3C2410处理器做硬件开发平台。S3C2410在片上集成了丰富的组件:分开的16 KB指令Cache和16 KB数据Cache、用于虚拟存储器
2 @; L  V" k1 R- n
. b5 |- I$ ?7 L: ^5 }( F9 H管理的MMU、支持STN和TFT的LCD控制器、NAND Flash启动装载器、具有片选逻辑和SDRAM控制器的系统管理器、3通道UART、4通道DMA、4通道PWM定时器、I/O口、RTC、8通道10位ADC和触摸屏接口、I2C
3 V% A# N: s& x) H5 l3 R' z  q6 s; q2 |* B$ k1 g  g" V
总线接口、I2S总线接口、USB主设备、USB从设备、SD卡和MMC卡接口、2通道的SPI以及PLL时钟发生器,还采用了AMBA(advanced micrcocontroller bus architecture)新型总线结构。) P9 ^3 M' }0 n8 z
  应用S3C2410处理器平台搭建的发送端硬件结构如图:包括S3C2410处理器、RS232接口、JTAG接口、RJ-45接口、SDRMA、Flash、电源、通过USB口连接的视频采集模块和通过USB接口连接的视频发射
/ Z' P. p' J. Q- i: R2 U7 Y: L. u; Z* }
模块。RS232串口用于人机交互及低速数据的收发,应用电平转换芯片MAX-323进行串口电平和TTL/CMOS电平的转换。JTAG接口用于下载Bootloader。RJ-45接口用于和以太网连接,下载操作系统Linux内9 n" F: M, U# x0 q7 S8 Q
- f/ p1 }" ~1 {/ }2 {+ w. H
核、根文件系统和应用软件。SDRMA用于系统的数据存储器、Flash用于系统的程序存储器。应用S3C2410处理器平台搭建的接收端硬件电路:与发送终端相比,多了SD卡和LCD显示器。SD卡主要用来存储8 @; k% C" L3 `8 v. z
1 l0 F% U7 v0 B
数据,LCD显示器主要用来显示视频图像。0 d3 \" E4 {1 d/ M" d
  1.2 系统软件设计9 G' H7 t+ j; J) ?+ P3 v* \0 Q; z
  系统的软件构成分为引导驱动程序、操作系统、文件系统和应用程序4部分。引导驱动程序在系统启动时进行内存重映射,将保存在Flash中的操作系统和应用程序重新映射到SDRAM中。Linux的内核" R3 F* N. _# y' A0 G9 c
' H, N- N4 Y8 A) C  H6 p6 t
版本为LinIix2.6。文件系统是Yaffs,它包括模块、配置文件和库等。系统的应用程序建立在嵌入式Linux内核、摄像头驱动和文件系统之上。; K' `2 r$ G: n% s
  2 视频采集的具体实现4 G6 x8 _8 n, G
  USB摄像头连接简单、使用灵活、价格低廉且具有良好的性能,因此,得到了广泛的应用。Linux内核包含了多种USB摄像头驱动,最常用的有基于OV5ll及其兼容芯片。OV511芯片主要包括CAMERA接口( |$ |( y$ H# Q4 H% E! ~5 V3 k
* l3 W  u1 E) c& Q
、DRMA接口、ISO FIFO接口和OmniCE以及USB控制器等部分。本设计使用的是在低端市场占有率较高的中芯微公司生产的ZC030x系列摄像头芯片。Linux系统中的视频子系统’Vide04linux为视频应用程序% @7 e1 v" S0 G& J0 z) [/ E4 l

% {0 g. P" J# c/ H! T0 M提供了一套统一的API,视频应用程序通过调用API即可操作各种不同的视频捕获设备,包括电视卡、视频捕捉卡和USB摄像头等。本设计的具体实现过程如下所述:4 M4 X: J) z5 ~. J
  2.2 利用Vide041inux实现图像采集
2 q0 w4 l! ^) I+ T- a1 Z  在安装了图像采集设备驱动后,只需要再编写一个对视频采集的应用程序就可以采集视频图像。在Linux系统中,视频文件是设备文件,可以像访问普通文件一样对其进行读写,摄像头文件一般是/% l: a8 L/ j  n- w# @

) T. h- F) N) q. W8 v5 X8 Adev/v4l/video。在进行视频捕捉之前,需要做一些必要的设置工作。这些设置涉及到如下结构:
' l1 H3 T- L# J: K/ X" [& V  V4L下视频采集编程首先要打开视频设备:
$ V4 w5 {9 X( H% Z- G7 o. i  Int fd="open"(“/dev/v4l/video”,O_RDONLY);
4 c) H: U. B( `, Y: h  If(fd<O)return-l;% V. |4 T) Z! M
  接着对摄像头参数进行设置。一般是先通过I/O控制命令读取设备信息,然后对特定项进行修改,最后通过I/O控制命令保存到内核中。由于篇幅有限源程序不再赘述。4 C4 z+ |& ?' P1 Y
  获取基本信息后,可以输出显示,也可以通过ioctl系统调用对这些值进行修改。然后调用函数Char*Carmera_get_image(video_device*vd)获得图像数据指针。此函数比较重要,关系到图像采集的$ \! V5 T. B2 A9 b
. G( f7 x1 l9 w& f
效率。获取图像数据有2种方法:一是通过映射得到视频驱动的数据缓冲,然后直接对映射后的缓冲进行读操作;二是直接读设备,及调用read函数。下面分别介绍:$ b9 K& _( I  l1 F
  (1)read系统调用方式比较简单,只需将前面得到摄像头参数传入read函数中,得到图像数据指针picture_p后返回即可:read(vd->fd,picture_p,width*hight);其中vd_>fd为设备文件描述符。
4 ^3 T8 ~! u( ^% }  (2)利用mmap方式先使用ioctl(fd,VIDIOCGMBUF,&grab_vm)函数获得摄像头存储缓冲区的帧信息,之后修改voideo_mmap中的设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式,使用6 O6 _0 d! g% T: V  J
# |1 c1 N; j+ s' |7 T: h" D; H$ ^
如下语句:$ a! Y# f# W# }) L4 f$ v
  grab_buf.height=240;
4 V- ], F# D2 B' U  Y/ H  grab_buf.width=320;  Z- k; b- D' D' ^9 ^7 Y
  grab—buf.format=VIDEO_PALETTE_RGB24;- Z& Q# S) O( Z9 g! p
  接着把摄像头对应的设备文件映射到内存区,具体使用grab_data=(unsigned char*)mmap(O,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grab_fd,O)操作。这样设备文件的内容就映射- {1 j  G% N6 |! W# m: G/ l: W

5 E) J( u, M1 R, n( x: m到内存区,该映射内容区可读可写并且不同进程间可共享。该函数成功时返回图像数据的指针,失败时返回值为-1。9 h9 }6 {  D6 d* r
  2.1 摄像头驱动的实现- M0 y  [* {+ Y1 c* h* ~5 h8 ^2 i
  1)配置Vide04linux内核1 ?/ z. K2 V: m1 A- g7 r
  在终端使用make menuconfig命令打开S3C24lOlinux内核编译的main menu窗口,并进入“multimedia device--->”菜单选项,然后将Video for Linux配置为模块,即:
4 M' H" w2 a/ n5 N6 l% U  Device driver--->
, C3 [0 ]$ ?) S9 E  Multimedia devices--->
9 u1 X6 |; C2 C4 @7 s$ u  r6 D  <*>Video for linux
. O1 L) T  A9 I4 K7 m* ?' H& D  2)配置OV511驱动
7 s3 J( K0 y' K) v7 n  返回主菜单,在进入“USB support--->”菜单选项,然后将USB OV5llcamera support设置为模块,即:
% }$ B; G- N& {. d& C' o' ^% B  SUB suppor--->, v, Y) L1 ?; R7 i* Y5 V. W) ~, R
  <*>USB OV5llcamera support(NEW)
2 T# z! z$ l# m4 v6 O6 s  3)模块安装
! e+ y* U  S, `4 h+ V; O  执行以下命令安装视频输入模块:5 l. I; Z, M3 t) k6 \
  insmod videodev.o% R. C- l( v, X5 d9 [  d0 @
  执行以下命令安装视频输入设备驱动模块:
6 s4 f2 @- k, |1 W4 |8 ]* V  insmod usbcore.o4 l5 j: S6 T# ]& R9 ~2 `  X
  insmod usb-ohci-s3c2410.ko! I2 ~; @7 |( V& A9 T% `' N
  insmod ov511.o5 y) i* ?' o, Q* Q" {0 ^! j' p
  由于使用的设备是USB接口的摄像头,所以在加载ov511.o模块前,需要加载USB内核驱动和主机控制器驱动。
+ y' Y) x+ P& T! Z  3 无线传输模块
( U3 A2 s9 P* D( \2 C6 A# Q2 N  本系统选用西门子的MC235作为GPRS通信模块,来实现图像的无线传输。该模块结合语音、数据传输、短信服务等功能,最大传输速率可以达到85.6 Kbps,具有丰富的AT指令使模块与微处理器通信,功能强大,操作灵活方便,特别适用于数据的监测和传输。在进行GPRS传输操作之前需对模块进行设置,主要有:(1)设置通信波特率;(2)设置接入网关;(3)设置移动终端类别;(4)测试GPRS服务是否开通,激活GPRS功能。这些设置都在主程序的初始化代码段完成。通过测试,GPRS驱动正常工作,能很好地支持数据/命令复合协议传输,其协议的丢包率、吞吐量等性能指标与无线模块的指标无实质性差别,整个系统工作正常,基本达到设计要求。4 P0 U$ ?- L. u# b
转自:http://www.3gtarena.com/
理袁律师事务所
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-9-4 10:17 , Processed in 0.486082 second(s), 10 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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