基于USB摄像头的嵌入式图像采集系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

USB总线技术的应用
目录
一、课题简介 (3)
二、系统框图 (3)
三、系统工作原理 (4)
3.1 USB设备基础 (4)
3. 2 USB驱动体系结构 (5)
四、硬件设计 (7)
4. 1 USB 摄像头SPCA561A (7)
4. 2 USB 主机控制器CH374 (8)
4. 3 USB 同步传输原理 (8)
4. 4 视频数据采集过程 (9)
五、软件设计 (9)
5. 1 USB 摄像头初始化 (9)
5. 2 同步传输和图像帧处理 (10)
5. 3 图像数据的预编码 (11)
六、结语 (12)
基于USB摄像头的嵌入式图像采集系统设计一、课题简介
名称:手势识别
功能:通过摄像头对手势的前后左右的识别,使显示器上的页面完成转向、翻页、放大、缩小等操作。

包含的总线:USB总线
VGA总线
CPU内部的数据和地址总线等
本文主要介绍与USB相关的内容。

二、系统框图
摄像头采集图像信息,通过USB总线传到MCU的FIFO缓冲区,MCU对图像信息数据进行识别和处理,并控制显示器的页面做出与手势动作相对应的操作。

系统框图如下所示:
图2 系统框图
三、系统工作原理
典型的USB 图像采集系统如图3 所示。

USB 系统包含主机和物理设备两个最基本的元素, 一个USB 系统只能有一个USB 主机, 可以连接多个物理设备。

本设计中的设备是USB 摄像头, USB 主机由USB 主机控制器、微处理器及驱动软件构成。

USB 系统工作层次分明: USB接口层提供主机控制器和设备的物理连接;
设备层中,USB 主机调用驱动程序通过端点0 发送并获取USB 设备的控制信息; 功能层进行实际数据的传输, 主机必须选择合适的接口和端点, 调用底层驱动提供的接口函数获取USB 摄像头的视频数据流。

图3 USB视频采集系统示意图
3.1 USB设备基础
USB设备由断点、接口和配置组成,USB驱动程序通常绑定到USB接口上,而不是整个USB设备。

下面介绍几个重要的概念:
1.端点
U SB通信最基本的形式是通过一个名为端点(endpoint)的东西。

USB端点只能往一个方向传送数据,从主机到设备(称为输出端点)或者从设备到主机(称为输入端点)。

端点可以看作是单向的管道。

USB端点有四种不同的类型,分别具有不同的传送数据的方式:
(1)控制端点:它用来控制对USB设备不同部分的访问。

它们通常用于配置设备、获取设备信息、发送命令到设备,或者获取设备的状态报告。

每个USB 设备都有一个名为“端点0”的控制端点,USB核心使用该端点在设备插入时进行设备的配置。

USB协议保证这些传输始终有足够的保留带宽以传送数据到设备。

(2)中断端点:当USB宿主要求设备传输数据时,中断端点就以一个固定的速率来传送少量的数据。

它们通常还用于发送数据到USB设备以控制设备,不过一般不用来传输大量的数据。

USB协议保证这些传输始终有足够的保留带宽以传送数据。

(3)批量端点:它传输大批量的数据。

这些端点通常比中断端点大得多(它们可以一次持有更多的字符)。

它们常见于需要确保没有数据丢失的传输的设备。

USB协议不保证这些传输始终可以在特定的时间内完成。

如果总线上的空间不足以发送整个批量包,它将被分割为多个包进行传输。

这些端点通常出现在打印机、存储设备和网络设备上。

(4)等时端点:它同样可以传送大批量的数据,但数据是否到达是没有保证的。

这些端点用于可以应付数据丢失情况的设备,这类设备更注重于保持一个恒定的数据流。

实时的数据收集(例如音频和视频设备)几乎毫无例外都使用这类端点。

2.接口
USB端点被捆绑为接口。

USB接口只处理一种USB逻辑连接,例如鼠标、键盘或者音频流。

一些USB设备具有多个接口,一个USB接口代表了一个基本功能,而每个USB驱动程序控制一个接口,因此对于具有多个接口的USB设备来说,Linux需要有多个不同的驱动程序来处理一个硬件设备。

3.配置
USB接口本身被捆绑为配置。

一个USB设备可以有多个配置,而且可以在配置之间切换以改变设备的状态。

3. 2 USB驱动体系结构
通用串行总线(USB)是一种外部总线结构,特点是接口统一、方便扩展、支持热插拔,简化了计算机与不同类型外设间的连接。

USB是一种分层总线结构,并且由一个主机控制器来控制,USB主机控制器(host controller)负责询问每一个
USB设备是否有数据需要发送,USB不支持设备的直接通信。

图3.2给出了Linux中USB驱动的体系结构。

图3.2 Linux下USB驱动体系结构
Linux USB主机驱动由三部分组成:
USB主机控制器驱动、USB驱动和不同的USB设备类驱动。

其中USB主机控制器驱动(HCD)是USB主机直接与硬件交互的软件模块,它为上层提供统一的接口,屏蔽掉硬件具体细节。

USB驱动(USBD)是整个USB主机驱动的核心,主要为USB设备类驱动提供相关的接口、提供应用程序访问USB系统的文件接口。

而USB设备类驱动是最终与应用程序交互的软件模块,主要为访问特定的USB设备和应用程序提供接口。

四、硬件设计
图4 初步设计框图
4. 1 USB 摄像头SPCA561A
视频信号的采集一般选择USB 摄像头来实现。

如图4.1.1所示, USB 摄像头SPCA561A 集成了镜头、CMOS 传感器、USB 图像处理器以及USB 控制器。

图4.1 SPCA561A芯片示意图
比起直接与微处理器接口的CMOS 传感器, 使用USB 摄像头虽然成本偏高, 但是易于实现, 节省CPU 资源, 传输速度远远高于串口、并口的速度,而且驱动支持非常丰富。

SPCA561A 提供了一种单芯片摄像头解决方案, 它将一个CIF 的CMOS 传感器、一个图像处理器和USB 控制器集成于单芯片, 从而大大降低了成本和开发难度; 缺点是只有10 万像素, 每秒帧数较少, 然而非常适合应用于图像要求不高的小型监控系统。

4. 2 USB 主机控制器CH374
CH374 是一个嵌入式USB 总线的通用接口芯片, 支持USB 主机方式和USB 设备方式, 支持低速和全速的控制传输、批量传输、中断传输以及同步传输。

在本地端,CH374 具有8 位数据总线和读、写、片选控制线以及中断输出, 可以方便地挂接到DSP/ MCU/ MPU 等控制器的系统总线上。

大多数嵌入式的USB主机接口芯片并不提供同步传输模式, 而CH374 的一大特点就是提供了同步传输, 使得视频和音频流的传输成为可能。

本系统使用CH 374 作为USB 主机控制器, 如图4所示。

CH374 用总线方式与S3C44B0相连, 微控制器通过读写CH374寄存器实现USB 主机驱动。

4. 3 USB 同步传输原理
同步传输主要用来传输音频或视频信号。

这种信息是周期的, 又是实时的, 对信息实时性有很高的要求, 但是对误码率却可以容忍。

所以USB 为这种信息保留90%的带宽, 其他类型的传输在同步传输期间不可以占用。

为保证数据传输的实时性, 同步传输不进行数据错误的重传, 也不在硬件层次上响应一个握手资料包。

同步传输的主机每隔1 ms 发送一个SOF 同步信号, 随后接收设备发送的信号, 其数据流程如图4.3 所示。

图4.3 同步传输流程图
在同步传输中, 每一个信包的容量是一定的。

拿SPCA561 来说, 在启动同步传输之前必须设置相应的接口号。

不同的接口号决定将要发送多大的信包容量, 如接口号1 每次发送的信包容量是128 字节, 接口号6 的信包容量是896字节。

接口号通过USB标准设备请求SET _INTERFACE 来设置。

由于CH374 的缓冲区最大为128字节, 所以本设计中使用接口号1, 同步传输每接收一个信包的大小是128 字节容量的信包。

4. 4 视频数据采集过程
如图4.4所示, 视频信号由摄像头SPCA561A采集得到, 经过内部的图像处理芯片后编码为规定的格式, 一般为RGB 或者YUV 格式, 但是SPCA561 采用比较特殊的S561 图像格式( 类似于RGB 格式) 。

因为一帧图像的数据量很大, 无法在一个同步信包内传送, 所以将其分割成多个单元, 每个单元前添加包头( 包头的内容包括当前包序号和此图像帧信息) , 组成多个同步信包, 通过FIFO缓冲发送到USB总线上。

主机控制器用同步方式接收每个信包, 并去除包头合并成S561 格式的数据, 组成一个完整的图像帧。

最后由软件将此图像帧预编码成为YUV420格式的图像数据, 以便后续的压缩处理。

图4.4 视频数据采集示意图
五、软件设计
5. 1 USB 摄像头初始化
初始化一个USB 摄像头有两个步骤, 第一步是摄像头的枚举, 第二步是摄像头的自定义设置。

( 1) 设备枚举
设备的枚举就是标准设备请求的过程。

对USB 摄像头来说, 枚举的过程依次如下:
①获取设备描述符。

通过设备描述符得到端点0 的负载, 也就是最大传送包容量。

②设置地址。

给设备分配一个默认地址0 之外的地址。

③获取配置描述符。

这个过程包括两个阶段, 第1次获取的配置描述符的前4 个字节得到配置描述符的真实长度; 再以真实长度第2 次获取配置描述符, 此描述符包含了设备的配置信息和多个接口信息。

可以从这里得到可以使用的接
口号和对应的信包负载。

④设置配置信息。

设置的主要信息是配置描述符中的第5个字段bConf igurationValue。

⑤设置接口。

USB摄像头不同的接口号对应不同的信包负载。

本设计选定的接口号为2, 对应信包负载是128字节。

( 2) 自定义设置
USB 摄像头并不是标准USB 外设, 需要很多自定义设置, 可以称之为/ 自定义设备请求0, 它是用标准设备请求包方式传送的, 目的是修改内部寄存器, 对采集图像和压缩方式进行配置。

自定义设备请求的内容非常丰富, 它包含以下几个方面:
①时序产生设置。

包括图像采集频率和振荡器的设置等。

②图像处理设置。

包括图像窗口大小、压缩类型、色彩分配等配置属性。

③存储器设置。

对图像缓冲进行设置。

④控制及状态设置。

包括启动及停止图像采集、数据传输方式、当前状态等配置属性。

初始化结束后, 可以根据需要进行图像格式的设定, SPCA561A 支持SQVGA ( 160 x 120) 、QCIF( 176x 144) 、QVGA( 320 x 240) 、CIF( 352 x288) 四种格式。

设定结束后启动摄像头采集, 进行数据传输。

5. 2 同步传输和图像帧处理
同步传输的过程非常简单, 甚至不包含握手信息; 但是因为同步传输对时序的要求很高, 所以对同步传输数据的处理颇困难。

此驱动的设计将同步数据的接收用中断服务程序进行处理, 同步数据的处理放在中断服务之外执行。

图5.2.1 同步传输中断
①中断服务程序流程如图5.2.1所示。

每次同步中断发生时, 首先从USB
主机控制器的缓冲区内读取接收到的128字节同步信包, 将数据存储到
数据处理程序提供的存储单元中。

再发送PID_IN标志和端点号, 设置
同步传输类型并启动下一次传输。

CH374主机会在每 1 ms 发送1个
SOF同步标志, USB设备接收到SOF 标志后, 会传送下一个同步信包。

②同步数据处理程序如图5.2.2 所示。

图5.2.2同步数据处理程序流程图
中断结束后, 执行数据处理程序, 程序读取同步信包的第一个字节, 确认同步帧处理包的序号, 此序号的范围是0~ 0x FF。

如果此序号为0xFF, 则说明是无效包, 需要丢弃。

如果此序号为0, 则可能是首次采集得到的第一个同步数据包, 直接存储此数据到图像帧; 也可能是当前图像帧结束后开始的下一帧图像的第一个同步信包, 则需要处理已经结束当前帧图像, 同时将当前帧设置为下帧。

至此得到了一帧图像数据。

5. 3 图像数据的预编码
经过处理后的图像帧为S561格式数据, 它是一种RGB 格式的图像, 无法被后续的图像编码器利用。

常用的视频压缩标准( 如H . 263、MPEG4 等) 输入
的视频数据为YUV420 格式, 所以必须对当前的S561 格式数据进行预编码, 使之成为YUV420 格式。

至此, 基于CH 374 的摄像头驱动完成。

六、结语
基于CH374的USB摄像头驱动,提供了低成本嵌入式平台实现视频图像采集的方案,使视频图像采集系统不再高不可攀,对视频监控的普及起到了积极作用。

相关文档
最新文档