随着3G网络技术的快速发展以及3G手机各项功能的增强, 使得利用3G手机实现随时随地的视频监控已成为可能。而嵌入式技术作为当今IT业的热门技术,各种嵌入式芯片如DSP, ARM, SOC 等被广泛应用于数码、安防、交通信号采集、远程医疗等领域,可以预见未来便携式多功能的个人医疗数字服务终端会像手机一样普及,用户可以随时随地地将自己重要的生理信息实时、准确、快速地传送到远程医疗中心或家庭护理专家处,从而得到医生的专业建议和指导,实现远程医疗监护的应用。本文设计一种基于ARM9芯片的3G手机嵌入式视频采集系统,该系统与一般的视频采集系统相比,具有体积小、能耗低、更新维护方便、开发难度低等特点。
1 系统硬件结构
本系统的硬件平台实物如图1, 鉴于系统的可靠性、可扩展性、可维护性, 本系统采用模块化的设计原则, 整个系统的视频采集系统硬件由3 个部分构成。
1. 1 微系统核心模块
该模块是由嵌入式微处理器S3C2440A, NANDFALSH 接口电路、SDRAM 接口电路和总线接口电路组成。S3C2440 是三星公司基于ARM920T 内核的32 位RISC 微处理器芯片, 为手持设备及一般类型的应用提供低价格、低功耗、高性能小型微控制器的解决方案。采用了新的总线架构AMBA, 其内核还实现了MMU, Har vard 高速缓冲体系结构。另外其加强的ARM 体系结构MMU 支持WinCE, Linux 和EPOC32等操作系统[ 9] , 支持ARM 调制体系结构, 支持从NAND FLA SH 存储器启动。而且, 它还集成了丰富的片上功能, 如LCD 控制器、UART 接口、USB 主从接口、I2C 接口、CAM IF 单元等。
SDRAM 虽掉电不能保存数据, 但它有非常高的读写速度, 故适合主程序的运行。本系统采用2 片32 MB型号为HY57V561620 的芯片级联构成64 MB 的SDRAM 存储器, 该芯片的内部存储结构是4 Banks×4M×16 b, 共4 个Bank。NAND FLASH 存储系统采用三星公司的K9F1208U0M 芯片, 存储容量为64M× 8 b。核心模块与外设控制模块的接口连接由总线接口实现。
1. 2 视频采集模块
该模块采用Micro2440 开发板自带的CMOS 摄像头接口, 直接使用友善之臂提供的CAM130 摄像头模块, 该模块由一个130 万像素的CMOS 图像传感器OV9650 及其接口电路、电源电路组成。选择CMOS传感器是因为它有集成度高、体积小、功耗低、编程方便、易于控制、成本低等优点, 并且该类型的传感器正向低噪声和高灵敏度等方向发展, 故CMOS 传感器是目前低像素图像采集系统的最佳选择。接口电路将图像信号进行A/ D 转换和处理, 传送到处理器的CAM IF。
微系统核心模块通过I2C 串行总线实现对传感器的控制。电源电路由电源转换芯片A S1117 为摄像头提供1. 8 V 和2. 8 V 电压, 其中2. 8 V 电压是通过可调压芯片分压得到( 即为图2 中的VDD_CAM) 。该模块的供电电压为3. 3 V, 与微系统核心模块的供电电压是一致的, 无需另外单独提供。
1. 3 外设控制模块
该模块由LCD 与触摸屏接口电路、JTA G 调试接口电路、U SB 主从口电路、复位电路、电源电路、RS 232串口电路等构成。LCD 与触摸屏接口电路用于显示应用程序编写完成后采集的视频数据、接受用户的外部控制命令等, 起到人机接口的作用。JAT G 调试接口提供硬件调试的功能, 它遵循IEEE 11491 标准, 利用边界扫描技术, 通过边界扫描链实现对芯片输入输出信号的观察控制。JATG 在本系统中的一个重要功能就是将引导加载程序Boot loader 烧写进开发板, 用于进一步的内核加载。USB 主口用于外接U 盘、移动硬盘和鼠标等支持U SB 总线接口的设备, 可以扩展存储空间。
USB 从口则用于向系统烧写WinCE 内核文件以及系统与PC 机之间的通信。复位电路采用既有电源监控和数据保护又有看门狗作用的专门复位芯片MAX811来保证系统出现异常时能可靠复位。RS 232 用于通过超级终端或DNW 工具查看Bo ot loader 程序启动的情况以及扩展串口通信功能。该处的电源电路提供5 V( 为整个系统提供外部电源) 、3. 3 V( 核心模块、外设控制、图像采集模块供电) 和1. 3 V( 核心模块供电) 。
2 图像传感器接口电路与工作原理
摄像头使用的是CAM130 模块, 其中的图像传感器为OV9650, 该部分原理图及接口电路如图2 所示。
图2 CAM130 模块原理图及OV9650 接口电路
OV9650 与处理器的接口包括SCCB( 串行摄像机控制总线) 接口、数据输出接口和控制接口等3 部分。
SCCB 接口起到传递处理器提供的初始化OV9650内部寄存器参数的作用, 其数据线SIOD 和时钟线SI-OC, 相当于I2C 总线中的SDA 与SCL。也就是说, SC-CB 起到I2C 总线的作用。OV9650 是I2C 总线的从器件, S3C2440 是对应的主器件。I2 C 总线采用串行方式从高位到低位传输字节数据, 每个字节传输完后, 主控制器将SDA 置为高电平并释放, 等待从设备发送确认信号。OV9650 内嵌了一个10 位A/ D 转换器, 对应有10 个数据输出口D[ 0: 9] 。输出图像数据的格式可以为10 位原始RAW, RGB 或经过内部DSP 转换的8 位RGB/ YCbCr。本系统选择的微处理器芯片S3C2440的CAM IF 单元支持8 位的YU V/ YCbCr 格式, 故需将OV9650 的数据接口D[ 9: 2] 与CAM IF 的数据口CAMDAT A[ 7: 0] 相连接。OV9650 的XVCLK 用于接收CPU 输出的24 MHz 的工作时钟。OV9650 内部产生的帧同步信号VSYNC、行同步信号HREF、像素时钟信号PCLK 等3 个时钟信号传入ARM 芯片中, 用于控制图像采集。每一个VSYN C 脉冲表示一帧图像数据采集的开始, HREF 的高电平则表示采集一行图像数据, 图像传感器按从左到右的顺序在每个PCLK脉冲过程中依次采集一个字节的数据, 直到一帧图像数据全部采集完成。
3 3G图片传输流程
图片传输流程图如图3 所示, 3G 手机向MINI2440开发板发送短信请求发照片, ARM9 控制中心接收到信息,发送出文件名与文件大小, TCP 服务器收到信息接收完图片并关闭窗口, 同时向3G 手机回馈图片已接收完毕的信息, 接着3G 手机向服务器发送请求接收照片, T CP 服务器向3G 手机发送图片数据, 直到图片接收完毕, 当接收完毕, 3G 手机向服务器反馈图片接收完毕。
图3 3G 图片传输方案
有关Micro2440 开发板发送图片及3G 手机接收图片的部分程序如下所示:
/ / TCP 监听
UINT ListenT hread( vo id * p)
{
/ / 准备接收请求
CGSMW_CameraDlg * pDlg = ( CGSMW_CameraDlg* ) p;
SOCKET s= pDlg??> m_hSo cket;
CStr ing strFileName = temp; / / 得到文件名
st rcpy( temp, buffer + i+ 1) ;
lo ng lFileSize = ato l( temp) ; / / 得到文件大小;
st rFilePath= " 123ARM "+ strFileName; / / 进度条操作,接收并保存文件
CFile file( strFilePath, CFile: : modeCreate | CFile: : mode??Write) ;
long iTemp = 0;
while ( 1)
{
rcv = r ecv ( s, buffer, 1024, 0) ;
if ( rcv = = 0)
{
break;
}
file. Wr ite( buffer, rcv) ;
iTemp + = rcv ;
}
file. Close( ) ;
send( s, " [ ! %] " , 4, 0) ; / / 发送接收文件结束请求
int ret1= send( pDlg> m_hSo cket, buffer, iSize, 0) ;
/ / 发送文件的名称和大小
/ / 发送文件
if ( iEnd= = SOCKET_Error)
{
strError. Format( _T( " Send File: %d") , er ro r= WSAGetLast Error( ) ) ;
AfxM essag eBox ( strErr or) ;
break;
}
iT mp + = iEnd;
pDlg> m_pro gr ess. Set Pos( iTmp) ;
Sleep( 10) ;
/ / 判断发送是否成功、结束处理
if ( iTmp = = lFileSize)
{
}
CSt ring st rTemp= "发送文件结束" ;
/ / 回复对方接收完毕
pDlg> SendMessag e( NULL, NULL) ;
pDlg> m_cState. SetWindowTex t( st rTemp) ;
/ / shutdow n( ) ;
ExitThread( 0) ;
return 0;
4 应用软件设计及实验结果
操作系统与硬件平台间采用虚拟串口进行通信,EVC 在实现串口数据通信中存在2 个局限性: 一是EVC 不支持串口通信控件MScomm, 另一个是WinCE不支持重叠I/ O 操作。因此, 要采用WinCE 的API 函数和多线程技术进行数据串口通信的底层开发[ 10] 。
Window s API 函数将串口视为文件, 对于串口的操作类似于对于普通文件的操作。在EVC 环境中, 通过调用CreateFile 函数来打开串口, 设置串口读写模式:
H ANDLE m _ hComm = Cr eateFile ( szPor t, GENERIC _READ| GENERIC _WRIT E, 0, NULL, OPEN _ EXISTING, 0,NULL) ;因为WinCE 不支持重叠I/ O, 所以CreateFile 的第6 个参数不能设置为: FILE _ FLAG _ OVER _LAPPED, 这里设置成通用常数“ 0”, 否则串行通信处理将被系统信息阻塞。
打开串口以后, 可以使用串口初始化函数SetCommState( ) 来获取串口当前的配置, 如串口号、波特率、奇偶校验、数据位、停止位等:
BOOL CGSM W_CameraDlg: : OpenPo rt ( UINT port No , / * 串口号* /
UINT baud, / * 波特率* /
UINT parity, / * 奇偶校验* /
UINT databits, / * 数据位* /
UINT sto pbits / * 停止位* / )
初始化缓冲区的信息:
Purg eComm( m _ hComm, PURGE _ TXCLEAR | PURGE _RXCLEAR) ;
m _ hReadCloseEv ent = CreateEvent ( NULL, T RUE,FALSE, NU LL) ;
m_ hReadT hread = Cr eateThread ( NU LL, 0, ReadT hr ead Func, this, 0, & m_dw ReadT hreadID) ;
应用程序开发是在EVC 集成开发环境中进行的。
用EVC 的AppWizard 向导建立基于MFC 的对话框程序架构, 在进行页面布局“图像显示区域”、“初始化”、“接听”、“拨号”、“挂机”等按钮后, 为各种按钮添加各种消息响应时间以及完成对各按钮进行的设置, 以响应用户期待的命令。“初始化”按钮是进行3G 网络的初始化。“接听”按钮就是响应3G 手机发送给开发板的命令,“拨号”按钮所需进行的设置有对方号码、拨号时发送的消息以及服务器IP 和端口号, 设置完这些就可进行拨号等待响应了;“挂机”按钮实现退出应用程序和关闭摄像头驱动的功能。实现这些按钮的单击事件响应函数的添加是比较容易的, 在EVC 环境中直接双击按钮, 进入代码编辑区就可进行编程调试。这里给出"初始化"和"拨号"按钮的部分代码, ……后面为省略的部分。
OpenPor t( 7, 115200) ; / / AT Com
if ( m_hComm ! = INVALID_H ANDLE_VALU E) / / 如果初始化按钮被按下
{
/ / 3G 初始化
UpdateData( TRUE) ;
SendCommand( "ATE0 r n" ) ; / * 取消回显命令* /
…}
else
{
st r = "WCDMA 没有连接上";
Messag eBox ( st r) ;
return;
}
…
CStr ing str ( "AT D") ;
UpdateData( TRUE) ;
m_hut. EnableWindow( TRUE) ;
st r+ = m_RecvTele;
st r+ = " ; r n";
UpdateData( ) ;
SendCommand( str ) ; / * 读取SIM 中的第一条短信* /
…
系统应用软件开发完成之后, 在3G 手机应用程序中打开手机主控端软件, 单击 初始化按钮完成 拨号前的设置, 将信息发送给Micro2440 开发板, 等待响应,顺利地采集图片并最终显示到3G 手机上, 图4 为3G手机主控终端软件界面及图片显示结果。
5 结 语
该系统实现基于ARM9 平台和WinCE 操作系统,通过CMOS 摄像头采集现场照片信息, 然后通过WCDMA 无线网络连接到万维网服务器, 手机端设计出满足条件的软件, 最终在3G 手机上实现图片监控的功能。该系统具有实时性较好、成本较低、便于携带等优点, 非常适合在安保、交通、手持设备、家电、学校巡防等方面的应用, 它是实现视频监控部分的重要组成部分。
目前只实现了图像的传输及在3G 手机上的显示, 视频部分的传输显示, 由于时间原因, 还暂时没有完成。下一步将采用合适的视频压缩编码算法如H. 264,MPEG4 编解码技术, 实现视频监控功能。