基于ARM嵌入式IPCamera的设计与实现

基于ARM嵌入式IPCamera的设计与实现,第1张

  0 前言

  随着社会的发展,人们对安全防范工作日益重视,监控产品也从以前只在重要单位使用发展到各个领域都在应用。监控产品的技术也从模拟向数字和网络技术发展。网络监控产品使用较多的是硬盘录像机,但价格比较高。有些场合对监控的要求并不高,也不需要录像,但有时又要在远程了解一下当地的画面,这时就希望使用一种低价的,又能实现远程 *** 作的监控产品。所以就计划设计IPCamera(网络照相机),它能够接受网络或手机短信发来的命令进行拍照,并将照片发布到Web服务器上或手机上供用户浏览。

  1 IPCamera系统总体设计

  IPCamera系统的总体设计思路是:采用ARM9作为系统的处理器,利用普通USB摄像头完成图像采集。系统设计一块网卡和一个GPRS模块,用户可以根据需要决定选用其中的一种、或者二种同时使用。手机能够通过GSM网向IPCamera的GPRS发送拍照控制命令,系统会自动将拍下的照片通过GPRS模块发回给手机;网络用户可以利用telnet协议向IPCamera发送拍照控制命令,然后再利用浏览器查看IPCamera上的照片。

  2 IPCamera的硬件设计

  在设计IPCamera时,考虑到系统的稳定性和成本等因素,因此将系统硬件设计为3个部分,即核心板、主板和GPRS模块,如图1所示。www.51kaifa.com

  核心板采用三星公司生产的S3C2410处理器;SDRAM采用2片HY57V561620AT-H构成64M;将它连接到系统nGCS6,所以它的起始地址为:0x03000000。NAND FLASH 采用SAMSUNG K9F1208芯片,FLASH芯片连接到系统的nGCS0,所以它的起始地址为:0x00000000。要系统从NAND FLASH启动,应将S3C2410的OM0和OM1引脚都接地。

  主板主要是一些接口电路。串行接口采用MAX3232芯片,由于本系统只使用一个串口,所以和S3C2410的TXD0和RXD0相连,构成第一个串口电路。JTAG接口直接由S3C2410处理器控制,只不过在连接电路上要加上接电阻。USB接口电路直接采用S3C2410内部的USB主机控制器,然后接上限流电阻和保险丝和USB插座。网卡采用AX88796-X86芯片,接在BANK2的位置上,所以片选接处理器的nGCS2信号,其地址为0X200,所以IO_BASE0、IO_BASE1、IO_BASE2三个引脚悬空,中断选用INT2。网卡的逻辑地址是0x10000200。

  GPRS模块采用SIMCOM公司生产的SIM100-E芯片。通过第三个串口信号线TXD2和RXD2和处理器相连接。

  基于ARM嵌入式IPCamera的设计与实现,第2张

  图1 IPCamera硬件结构图

  3 IPCamera引导程序、 *** 作系统和驱动程序

  IPCamera引导程序选用韩国Mizi公司开发的vivi。vivi必须经过裁剪、交叉编译、下载到IPCamera等几个过程。首先使用make menuconfig命令裁剪vivi,然后make命令编译生成vivi的二进制镜像文件,使用的编译器是armv4l-unknown-linux-gcc和armv4l-unknown-linux-as,最后使用JTAG将vivi烧写到IPCamera的flash芯片上。

  考虑到成本,以及系统对实时性的要求不高等因素,所以决定选用Linux *** 作系统。目前发行的Linux *** 作系统都能支持ARM机的体系结构,所以只要根据平台的具体结构进行移植。系统移植主要包括建立交叉编译环境、修改内核源码、内核裁剪和内核编译4等个环节。内核裁剪时,要让系统包括telnet和ftp服务。telnet服务主要实现能够对IPCamera远程 *** 作,ftp服务主要实现IPCamera的文件上传和下载。最后将编译好的内核映象文件利用vivi软件烧写到IPCamera的flash芯片上。www.51kaifa.com

  IPCamera需要串口、USB、视频设备和网卡等多个设备驱动程序[2],由于这些设备都是标准设备,所以可以到厂家去下载相应的设备驱动源程序,然后交叉编译成Linux下的驱动程序,最后通过insmod[3]命令向内核加载驱动程序。如:Linux系统提供了视频设备的内核驱动video4linux(简称V4L),它为视频设备的应用程序编程提供一系列接口函数,所以USB摄像头

  就可以采用V4L驱动程序。

  4 IPCamera应用程序的设计

  IPCamera主要包括3个应用程序,即:USB摄像头拍照、Web服务和GPRS *** 作控制等程序。这些应用程序都是用C语言来编写,然后通过交叉编译生成可执行文件。

  4.1 USB摄像头拍照程序的设计

  USB摄像头采用video4linux驱动,V4L图像采集的方法有两种,即overlay和mmap。本系统采用mmap,这种方法是通过将设备文件影射到内存的方法,直接通过指针 *** 作内存的方式读取摄像头采集到的图像数据。控制拍照功能函数如下:

  int cap(char * fileName)

  {┅

  /***初始化设备***/

  if (device_init(DEFAULT_DEVICE, &vd, 0, 3) == -1)www.51kaifa.com

  { perror(“device_init: failed.。。”);

  return -1; }

  /***内存映射***/

  if (v4l_grab_frame(&vd, 0))

  return -1;

  if (v4l_grab_sync(&vd))

  return -1;

  img = device_get_address(&vd);

  /***读取图像数据***/

  p=img;

  for (i=0;i《PAL_NC_HEIGHT;i++)

  for (j=0;j《PAL_NC_WIDTH;j++)

  { tmpc=*(p);

  *(p)=*(p+2);

  *(p+2)=tmpc;

  p+=3; }

  /***转换图像数据格式,保存为jpg文件***/

  if (write_jpeg(fileName, img, 70, 0))www.51kaifa.com

  return -1;

  ┅

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2714254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存