基于USB摄像头的嵌入式图像采集系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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摄像头驱动,提供了低成本嵌入式平台实现视频图像采集的方案,使视频图像采集系统不再高不可攀,对视频监控的普及起到了积极作用。