基于S3C2440和USB摄像头的网络视频采集系统

发布者:ping777最新更新时间:2023-01-09 来源: elecfans关键字:S3C2440  USB摄像头 手机看文章 扫描二维码
随时随地手机看文章

  本文根据网络视频采集的需要,将网络传输与视频采集相结合,设计了以S3C2440为核心的USB摄像头视频采集和嵌入式Linux系统下的视频服务器,从而实现了远程网络视频信息采集。


  1 系统总体设计

  该系统是以ARM9处理器S3C2440为核心,在嵌入式Linux系统平台下,通过USB摄像头采集视频信息,然后对所得到的视频数据通过内部总线送到视频服务器MJPG-streamer上,视频服务器经过对图像压缩处理,经过以太网传输出去,远端客户机通过浏览器或者专用软件访问视频服务器,即可浏览现场信息,从而实现网络视频采集。系统总体如图1所示。

  

  2 系统硬件设计

  系统的硬件框图如图2所示。

  

  系统处理器采用高性能ARM9处理器S3C2440,S3C2440是基于ARM920T核心的RISC处理器,主频为400 MHz,实现了MMU,具有AMBA总线和哈佛结构高速缓冲体系结构,有独立的16 KB的指令缓存和16 KB的数据缓存。主要应用于高性能,低价格,低功耗的嵌入式设备和手持设备。处理器内部集成了完备的硬件资源,外部存储控制器,4通道DMA,3通道的UART,2通道SPI,2通道USB主机和1通道USB设备,4通道PWM定时器和内部看门狗定时器,130个GPIO等。


  NAND FLASH采用K9F2G08,该存储芯片容量大,高达256 MB,改写速度非常快,易于使用,具有可靠的耐用性,适合用于大量数据存储,该FLASH以512 B为块进行读写操作,通过输入输出接口传送地址和命令,传递专门的数据接口与CPU相连,数据总线为8 b,写入操作必须在空白区域进行,所以在改写数据时要先进行擦除,然后再写入。


  NAND FLAsH在本系统中用来存放bootloader引导代码,Linux内核代码以及Yaffs文件系统。SDRAM为同步动态随机存储器,类似于PC机的内存,在系统启动时,先将内核代码从FLASH复制到SDRAM中,用来程序的读取,存储,执行,从而提高CPU读取和写入数据的速度。本采用2片32 MB的HY57V作为系统内存,把他们并联起来形成32位的数据总线,提高CPU的访问速度,增加运行Linux系统的流畅性。由于SDRAM掉电不能保存数据,所以要不断的进行动态刷新来保存数据,使用之前要进行初始化。


  目前最流行的以太网控制器是DAVICOM公司的DM9000网卡芯片,该芯片自适应10 Mb/s和100 Mb/s的网络,处理器通过GPIO与网卡相连,支持3.3 V接口电压,32位接口存储器可以方便直接与S3C2440相连,在连接RJ-45接口,即可实现以太网物理层和数据链路层的连接。设备驱动程序在Linux操作系统下可以方便的移植,故选择此网卡芯片作为以太网控制器。摄像头采用市场普通USB摄像头,即插即用,处理器通过USB控制器控制摄像头。


  3 系统软件设计

  本系统软件可分为Bootloader,Linux内核,Yaffs文件系统和MJPG-streamer视频服务器,系统框图如图3所示。

  

c.jpg

 

  “Bootloader是在操作系统运行之前运行的一段小程序,来完成硬件设备的初始化,从而将系统软硬件环境带到合适状态,为最终调用操作系统做好准备”。Bootloader可以从SAMSUNG公司官方网站下载,经过交叉编译生成Bin文件,下载到板子上。


  Linux内核采用Linux 2.6.32版本,运行make menuconfig配置万能驱动USB摄像头,在Device Drivers下,选择MulTImedia device,选择Video Capture adapters,选择V4L USB devices,选择GSPA based webcams,即可选择万能驱动USB摄像头。


  系统采用Yaffs文件系统,Yaffs是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。它减少了一些功能,速度更快,挂载时间很短,对内存的占用较小,所以系统采用Yaffs文件系统。


  MJPG-streamer是一款免费基于IP地址的视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生视频数据并将视频数据复制到内存中,它有多个输出插件将这些视频数据经过处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中,MJPG-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。MJPG-stream er源码包可从SourceForge网站下载使用。各个文件如下:

  (1)input_testpicture.so。这是一个图像测试插件,它将预设好的图像编译成一个头文件,可以在没有摄像头的情况下传输图像,从而方便调试程序。

  (2)input_uvc.so。此文件调用USB摄像头驱动程序V4L2,从摄像头读取视频数据。

  (3)input_control.so。这个文件实现对摄像头转动的控制接口。

  (4)output_http.so。这是一个功能齐全的网站服务器,它不仅可以从单一文件夹中处理文件,还可以执行一定的命令,它可以从输入插件中处理一幅图像,也可以将输入插件的视频文件根据现有M-JPEG标准以HTTP视频数据服务流形式输出。

  (5)output_file.so。这个插件的功能是将输入插件的JPEG图像存储到特定的文件夹下,它可以用来抓取图像。


  将MJPG-streamer视频流服务器移植到目标板上运行,从而可以实现网络视频数据的采集,具体移植过程:

  (1)首先移植MJPG-streamer依赖的jpeg库。在/usr/local目录下解压源码包tar xvzf jpegsrc.v8b.tar.gz。

  (2)修改配置文件./configure--prefix=/usr/video/jpeg--host=arm-linux-gnueabi,编译:make,安装:make install,最后将/usr/local/video/jpeg/lib目录下的libjpeg.so.8文件拷贝到文件系统中的lib目录下。

  (3)解压源码包:tar zxvf mjpg-streamer.tar.gz;

  (4)修改源码:修改顶层Makefile及plugins目录中的各级Makefile将所有CC=gcc修改为CC=arm-linux-gcc。修改/usr/local/mjpg-streamer-r63/plugins/input_uvc目录下的Makfile文件,在CFLAGS+=-O2-DLINUX-D_GNU_SOURCE-Wall-shared-fPIC后加上I//usr/loc al/video/jpeg//include,把$(CC)$(CFLAGS)-ljpeg-o$@input_uvc.c v412uvc.lo jpeg_uTIls.lodynctrl.lo代码修改为$(CC)$(CFLAGS)-ljpeg-L/usr/local/video/jpeg/lib-o$@input_uvc.c v412uvc.lojpeg_uTIls.lo dynctrl.lo,从而加载前面编译安装的jpeg库文件,使得MJPG-streamer能够调用到jpeg库。

  (5)交叉编译:make CC=arm-linux-gcc,交叉编译器为arm-linux-gcc4.3.2,生成ARM板可执行的二进制文件。

  网络视频采集系统软件流程图如图4所示。

  

  4 系统测试

  将应用程序通过超级终端工具传输到ARM板上,设置视频服务器应用程序start_uvc.sh开机启动,将交换机引出的双绞线通过RJ-45接口连接到ARM板,在超级终端下进入ARM板,用ifconfig命令配置服务器相应网段的IP地址,将板子上电之后即可执行视频采集程序。从客户端浏览器输入ARM板IP地址发出访问请求,服务器接收到请求后与客户端建立连接,将视频数据发送到客户端监听端口,客户端就可以得到连续的现场现场画面,从而实现网络视频采集功能。客户端测试画面如图5所示。

  

  5 结语

  随着互联网的不断发展,视频信息采集进入到一个新的时代,本系统设计基于S3C2440的高速信息处理能力和丰富的硬件接口,在网络功能强大的Linux操作系统平台下,移植MJPG-streamer视频流服务器,模块结构清晰,易于管理,利用现有网络资源,很容易实现远程的网络视频采集,克服了现有视频采集的距离问题,开发简单,可移植性高,并且系统运行稳定。


关键字:S3C2440  USB摄像头 引用地址:基于S3C2440和USB摄像头的网络视频采集系统

上一篇:基于S3c2440的I2C驱动与测试程序追踪交叉分析
下一篇:s3c2440如何设置fclk

推荐阅读最新更新时间:2024-11-07 12:01

S3C2440时钟计算
学习一段时间的S3C2440,将其系统时钟的来源进行说明,如有错误之处请指正,将不胜感激。 Mpll = (2*m * Fin) / (p * 2s) m = M (the value for divider M)+ 8, p = P (the value for divider P) + 2 时钟FCLK为ARM内核CPU运行的时钟 FCLK = (2*m * Fin) / (p * 2s),此时钟由PLLCON控制寄存器所决定 Fin :为外部连接时钟(S3C2440的开发板上接的是12MHZ) m : M (the value for divider M)+ 8 P :P (the value for divider P)
[单片机]
S3C2440看门狗解析
S3C2440A的看门狗定时器是用于当其由于噪声和系统错误引起的故障干扰时恢复控制器的工作。它可以被用作普通16位内部定时器来请求中断服务。看门狗定时器产生128个PCLK周期的复位信号 也就是说,在某些环境下,看门狗可以当做定时器使用,当他中断的时候并不发生复位,只发生中断,我看看图 看门狗的中断和复位信号是可以依靠wtcon来切断的(看门狗的时钟是无法切断的) 使用看门狗主要靠这几个寄存器 用来选择时钟源,分频系数,启动看门狗以及看门狗中断和复位的连接 流程基本上就是,第一次对wtcnt赋值之后启动看门狗,看门狗自动减,到达0的时候触发中断,如果连接了复位则触发复位 未连接则触发中断,另外, 看门狗定时
[单片机]
<font color='red'>S3C2440</font>看门狗解析
S3C2440裸机------SDRAM
1.配置内存控制器的寄存器 我们的S3C2440在访问SDRAM的时候,首先发出地址,然后内存控制器首先根据地址范围发出片选信号nGCS6,然后根据片选信号的类型得知是SDRAM,然后拆分地址为 bank地址,行地址和列地址,具体应该怎么把地址拆分成bank地址,行地址,列地址则由我们配置的SDRAM寄存器决定,然后开始读数据。 1.1BWSCON寄存器设置 由于我们的SDRAM只连接到了片选6上面,所以我们只看该寄存器的与6相关的几项,由于我们使用了两篇SDRAM组成32位的,所以DW6我们设置成10,WS6表示是否使用wait信号,wait信号是指如果内存芯片的速度很慢,当cpu发出读写命令之后,内存控制器开始驱动相关
[单片机]
<font color='red'>S3C2440</font>裸机------SDRAM
S3C2440裸机------NandFlash编程_时序及初始化
1.NandFlash初始化 Nandflash初始化主要包括时序图的设置和Nandflash控制器的使能,我们首先看一下S3C2440芯片手册里面的时序图。 上图中的HCLK我们已经设置成了100M。那么时钟周期是1/100M=10ns 然后下图是NandFlash芯片手册里面的时序图。 我们将S2C2440里面NandFlash控制器的时序图和NandFlash时序图结合起来看。 左图中的TACLS表示当我们的CLE/ALE发出之后,再过多长时间再发出WE信号,就是右图中的tcls-twp,而我们从右下图可以看到,tcls的最小值是12,twp的最小值也是12,就表明tcls-twp可以为零,也就表明CLE
[单片机]
<font color='red'>S3C2440</font>裸机------NandFlash编程_时序及初始化
基于S3C2440和DM9000移植LWIP(一)
使用mini2440已经有一段时间了。诸如裸机的LED,键盘开关等等等等也都试验过了,uCOS,WinCE也是浅尝了一下。如今想到了以太网。 由于mini2440的板上集成了一个DM9000的网卡,并且在CE系统里面成功的使用以太网与PC连接了。于是自然而然的想,能不能在uCOS下也实现以太网接口呢? 一上来什么都不懂,于是找一些资料,在这里要谢谢焦海波老师所著的嵌入式网络系统设计一书,移植过程中很多资料都来源于这本书。其次是mikenoodle的单片机驱动DM9000网卡一文,里面详细地讲述如何在2440裸机下驱动DM9000网卡。 首先明确我们需要做的事情是什么?为了实现在uCOS下的LWIP协议。我们当然需要一个LWIP协议
[单片机]
S3C2440开发板裸机程序系列09—PWM控制舵机
1. Timer1的PWM控制舵机 S3C2440的Timer0、Timer1、Timer2和Timer3具有PWM功能,以前的blog已经叙述过,详见: S3C2440开发板裸机程序系列05—定时器PWM TQ2440开发板的Timer0的TOUT0输出连接了Beep,所以,这次利用Timer1的TOUT1输出来连接舵机的控制信号。 舵机的内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。通过调整控制信号的高电平宽度,即可实现舵机不同转角的控制。 舵机控制原理详见:舵机的原理和控制 程序思路很简单: 设置GPB1为TOUT1的输出格
[单片机]
<font color='red'>S3C2440</font>开发板裸机程序系列09—PWM控制舵机
1.2__S3C2440时钟简介
S3C2440的时钟和电源管理模块由三个部分构成:时钟控制,USB控制和电源控制。 有两个锁相环,一个用来提供FCLK,HCLK和PCLK,另一个则用于USB时钟。其中,FCLK的最大频率达到400MHz,HCLK的最大频率达到136MHz,PCLK的最大频率达到68MHz。 这些时钟为CPU和外设的正常运行提供时钟信号,其中CPU使用的是FCLK,外设使用的是PCLK,还有一部分使用高速总线HCLK。 要想程序按计划运行,时钟的选择和设置至关重要,下图为S3C2440的时钟发生器块图。 首先,S3C2440的时钟源可以选择外部晶振或外部时钟信号,一般情况下我们都使用的是外部晶振。时钟源的选择是通过设置OM 来进行
[单片机]
1.2__S3C2440时钟简介
【补充】s3c2440启动过程详细分析
2440启动过程算是一个难点,不太容易理解,而对于2440启动过程的理解,影响了后面裸机代码执行流程的分析,从而看出2440启动过程的重要性。 2440启动方式和启动方式选择 在S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中搜索map,可以在第5章(P195)中搜索到下图。 从此图中,可以得知 OM = 01,10,Not using NAND flash for boot ROM OM = 00, Using NAND flash for boot ROM 而OM 又是什么呢? 从S3C2440的datasheet《S3C2440A_UserMan
[单片机]
【补充】<font color='red'>s3c2440</font>启动过程详细分析
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved