请问这全局描述符表gdt什么意思有图

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
煤矿机电图例图符表
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口USB视频图象采集和处理系统研究、设计与实现(master)
代 号 分 类 号10701 TP302学 密号 级 内部题(中、英文)目 高速串行总线(USB)视频图象采集和处理系统研究、设计与实现The Design and Implementation of Video Acquisition and Processing System Based on USB作 者 姓 名 方 加 喜 指导教师姓名、职务 学 科 门 类 提交论文日期 工 学 学科、专业 李玉山 教授电路与系统二 00 三年一月 独创性(或创新性)声明本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或 其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做 的任何贡献均已在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。本人签名:方 加 喜日期 关于论文使用授权的说明本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕 业离校后,发表论文或使用论文(与学位论文相关)工作成果时署名单位仍然为 西安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学 校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保 存论文。 (保密的论文在解密后遵守此规定)本人签名: 方 加 喜 导师签名: 李 玉 山日期
摘要高速串行总线(USB)作为一种崭新的微机总线接口规范,其特点使其非常 适合作为视频图象采集和处理系统的通信接口。 本文利用 USB 传输架构为依托, 详细探讨了 USB 总线视频图象采集和处理系 统的设计过程。包括系统硬件设计,固件(firmware)设计,驱动程序设计以及视 频图象处理系统结构的设计。该系统主要利用 USB 总线数据传输速率高、热插拔 的特点,较好地实现了视频图象处理系统在进行高质量图象处理时对数据输入的 要求。 本论文在进行系统设计时,以大量的软件模拟作基础,充分利用了 FPGA 技 术,努力做到系统中硬件的设计更加合理和完善,同时使得在调试的过程中对控 制电路的修改非常方便。 关键词: USB 视频图象采集 WDM 固件 FPGA AbstractThe Universal Serial Bus is the most compatible serial bus interface with the greatest transmitting speed at present that was applicable for video acquisition and processing system. This paper mainly deals with the concepts of Universal Serial Bus in computers and investigates in detail the design of video acquisition and processing system based on USB, including the design of hardware, firmware, USB device driver and video processing system. This system takes advantage of the high rate of data transmission and hot plug and play of USB to meet the requirement for real-time transfer when high quality image processing is performed. In the video acquisition and processing system design, FPGA technique is used to make modification of control circuits in the process of debugging more convenient. In this case it is easy to improve the design on the basis of a great amount of soft simulation. Keyword: USB Video Acquisition WDM firmware FPGA 目绪录1 3 3 5 6 6 6 9 11 12 13 13 14 14 15 16 17 19 19 20 22 24 25 26 29 29 31 33 38 38 39 40 41 45 47 50 51 55论 ……………………………………………………………………………...第一章 总体方案设计 …………………………………………………………... 1.1 系统总线选择 …………………………………………………………. 1.2 用 FPGA 替代 DSP 实现视频图象处理 ………………………………. 第二章 视频图象采集系统的相关技术 ………………………………………... 2.1 USB 总线体系结构 ………………………………………………….…. 2.1.1 USB 总线信号环境 ……………………………………………… 2.1.2 USB 数据流类型 ………………………………………………… 2.1.3 USB 设备的逻辑结构 ……………………………………………. 2.2 I2C 总线系统 ………………………………………………………. …. 2.2.1 I2C 总线的基本结构 ……………………………………………. 2.2.2 双向传输的接口特性 …………………………………………... 2.2.3 I2C 总线上的时钟信号 …………………………………………. 2.2.4 数据传送 ………………………………………………………... 2.3 Windows WDM 设备驱动程序 …………………………………………… 2.3.1 Windows 2000 驱动 ……………………………………………... 2.3.2 WDM 驱动程序基本结构 ………………………………………… 第三章 USB 接口的视频图象采集系统的设计及实现 ………………………… 3.1 视频图象采集系统的硬件开发 ………………………………………. 3.1.1 视频图象的采集 ………………………………………………. 3.1.2 USB 接口总线控制器 ………………………………………….. 3.1.3 图象存储电路设计 ……………………………………………. 3.1.4 I2C 总线控制电路 ……………………………………………... 3.1.5 系统控制电路设计 ……………………………………………. 3.2 视频图象采集系统的软件开发 ………………………………………. 3.2.1 系统固件代码设计 ……………………………………………. 3.2.2 快速传输方式的实现 …………………………………………. 3.2.3 主机应用程序的设计 …………………………………………. 第四章 USB 接口驱动程序设计 ………………………………………………… 4.1 WDM 驱动程序原型 ………………………………………………….…. 4.2 USB 视频图象采集系统驱动程序的分析 ………………………….…. 4.2.1 初始化创建设备 ………………………………………………. 4.2.2 分发例程 ………………………………………………………. 4.2.3 即插即用的实现 ………………………………………………. 4.2.4 电源管理的实现 ………………………………………………. 4.3 视频图象采集系统中 USB 驱动程序接口设计 ………………………. 4.3.1 USBDI 的 IOCTL ………………………………………………… 4.3.2 USB 设备的配置和接口选择 ……………………………….…. 4.4安装驱动程序 …………………………………………………………. 4.4.1 WDM 驱动程序的安装过程 ………………………………….…. 4.4.2 INF 文件 …………………………………………………….….56 56 57 59 59 60 61 62 64 66 66 66 66 67 69 70 72 73 73 74 75 76 77第五章 视频图象处理系统结构研究 …………………………………………... 5.1 基于 FPGA 的视频图象处理模块设计 ………………………………… 5.1.1 Sobel 算子边缘检测 ……………………………………….…. 5.1.2 体系结构设计 …………………………………………………. 5.1.3 Sobel 的具体实现 ………………………………………….…. 5.1.4 实验结果分析与小结 …………………………………………. 第六章 总结与展望 ……………………………………………………………... 6.1 总结 ……………………………………………………………………. 6.2 技术展望 ………………………………………………………………. 6.2.1 视频图象处理硬件的发展 ……………………………………. 6.2.2 USB 总线发展前景 ………………………………………….…. 致 谢 ……………………………………………………………………………...参考文献 …………………………………………………………………………... 在读期间发表的论文 ……………………………………………………………... 附 录 ……………………………………………………………………………... 附录 A USB 接口电路的原理图 ……………………………………….…… 附录 B USB 接口电路的 PCB 图 ……………………………………………. 附录 C 图象采集电路的原理图 …………………………………………... 附录 D 图象采集电路的 PCB 图 …………………………………………… 附录 E 视频图象采集与处理系统实图 …………………………………... 绪 论1绪论视频图象是空间和时间的多维数字信号,视频图象分析和估计就是在检测几 何信息的基础上对空间物体运动,包括一阶(旋转加位移)、二阶、三阶等参数进行 求解和预测外推。数字图象处理 (DIP , Digital Image Processing) 超大规模集成 (VLSI , Very Large Scale Integration) 专用集成电路 (ASIC , Application Specific Integrated Circuit)的结构与电路设计从八十年代起就是数字信号处理(DSP,Digital Signal Processing)类芯片设计中最活跃的领域。而视频图象分析系统集成芯片设计 属于其中的前沿课题,其应用前景诱人。但是目前有实用价值的视频图象分析系 统还仍然是围绕相机中心坐标系的刚体运动为主。 在视频图象分析研究领域有不少是中国学者首创的理论成果。我们认真研究 了国内外的相关结果,认为要使图象分析 DIP 真正走向实用,必须:①寻找简便 高效的估计算法;②研究适用的体系结构和硬件电路设计。在这一研究思路上国 外已经不乏有人投入,相比之下国内更多的还是聚焦在算法改进与创新上,而将 计算理论、算法结构与硬件实现三者结合起来研究者不多。 我们试图探索的是一条在图象视觉视频处理方面进行成象接口后尽早进行图 象运动分析估计的 DIP 单片式 CMOS 系统集成之路,力图在国内设计研制出有应 用前景的实时 DIP 运动图象分析专用系统集成芯片。 本论文的研究和设计工作是国家自然科学基金“运动图象分析系统集成芯片 设计”项目的一部分,主要完成其体系结构和硬件电路设计,即视频图象的采集 及处理。 众所周知,视频图象数字化后数据量非常庞大,对如此大量高速的数据进行 实时处理是计算机应用领域中技术难度最大的部分,如何实现视频图象的高保真 数字化并且采取科学合理的方法实现数据的采集和传输是该领域中必须解决的首 要问题。 为了能采集并送出高质量的图象信号,研究一种易于和计算机相连且高速实 时的图象采集系统已成为当前的热点。在视频会议和可视电话等多媒体应用中, 具有数字接口的图象采集系统(image acquisition)是一个关键的部件,它完成视 频图象的采集、处理,并通过数字接口送进计算机进行显示和进一步的处理。 USB 总线是一种新型的高速串行总线,它具有传输速率高、支持异步和等时 传输,支持热插拔等优点,适合于多媒体数据传输。目前国内的视频图象采集系 统普 遍利用个人计算机上的 ISA 总线、PCI 总线或者 EPP 口来实现。 这不仅 给使用者带来极大的不方便,而且图象的实时传输效果也不好。 随着数据融合的进一步发展,系统的设计和实现需要更大的灵活性,以解决 2高速串行总线(USB)视频图象采集和处理系统研究、设计与实现将完全不同的标准和要求集成为同类产品时引发的诸多问题。实时视频处理对系 统性能的要求极高, 因此几乎所有只具最简单功能的通用 DSP 都不具备这项功能。 可编程逻辑器件 (FPGA) 允许设计人员利用并行处理技术实现视频信号处理算法, 并且只需单个器件就能实现期望的性能。 为此,我们以 USB 为开发平台,结合 FPGA 可根据设计工程师的实际需求提 供不同层次的灵活性的特点,开发了一套性能优越的视频图象采集和处理系统, 并完成相应软件的设计。 论文共分以下几个部分。 第一章:总体方案设计,在分析目前视频图象采集和处理系统的基础上提出 了本系统的总体设计方案。 第二章:视频图象采集系统的相关技术,分析了 USB 总线,I2C 总线和 WDM 驱动程序,确定了视频图象采集和处理系统的实现路线。 第三章: 详细介绍基于 USB 接口的视频图象采集系统的硬件设计和 USB 外设 端的固件代码(Firmware)以及客户端应用程序的设计。 第四章:USB 接口驱动程序设计,详细介绍 USB 接口驱动程序的设计思想和 流程以及实现方案。 第五章:视频图象处理系统结构研究,提出基于 FPGA 的实时视频图象处理 的方案及其方案的实现。 第六章:总结与展望,讨论视频图象采集和处理系统以及 USB 总线的发展趋 势。 第一章 总体方案设计3第一章总体方案设计现代的视频图象采集技术发展非常迅速,各种基于 ISA、PCI 等总线的图象 采集卡已能在市场上买到,但是价格比较昂贵,使用起来不方便,并且处理功 能简单。对于特殊需要不能很好的满足,往往还需要加上后续处理部分,这给 特殊需要的用户带来了极大的不方便。 正是为了解决以上的缺点, 我们采用 USB 总线作为图象传输的接口,现场可编程芯片(FPGA)作为图象处理芯片,开发 了一套性能优越的视频图象采集和处理系统(见图 1.1) 。此系统可以根据不同 的需要进行现场编程,具有通用性好、价格相对便宜等特点。RAM视频图象采集 数字Camera 芯片 (OV6620)图象处理 (FPGA)控制电路 USB总线 控制器I2C总线控制电路USB总线接口计算机图 1.1系统原理图1.1 系统总线选择系统设计中首先考虑的是通过何种外部总线来传送数据。目前可供选择的 总线有:PCI、ISA、ESIA、USB 和 IEEE 1394 总线。 ISA 数 据 总 线 最 早 用 于 PC/AT 机 ,也 被 称 为 AT 总 线 。它 是 对 XT 总 线 的 扩 展 , 以 适 应 8/16 位 数 据 总 线 。 PCI 总 线 是 INTEL 公 司 于 1993 年 推 出 的 新 一 代 局 部 总 线 标 准 。 它可 同 时 支 持 多 组 外 围 设 备 。 PCI 采 用 高 度 综 合 化 的 局 部 总 线 结 构 , 并 能 完 全 兼 容 现 有 的 ISA 、 EISA 和 MCA 扩 展 总 线 。 为了解决功能扩展接口插卡的配置问题, 90 年 代 中 期 推 出 了 即 插 即 用 接 口 卡 标 准 (PCI 和 ISAPnP) , 即 插 即 用 BIOS 和 即 插 即 用 操 作 系 统 来 完 成对接口卡资源的自动配置,使功能扩展接口卡的使用变得简便。但扩 展接口卡仍存在以下几个问题: 第 一 ,接 口 卡 在 插 拔 过 程 中 必 须 停 机 , 并 且 需 打 开 PC 机 箱 进 行 安 装 和拆卸,这个过程需要一定层次的技术支持; 4高速串行总线(USB)视频图象采集和处理系统研究、设计与实现第 二 ,接 口 插 卡 设 备 驱 动 程 序 的 安 装 、调 试 直 至 正 常 运 行 的 过 程 需 要 各 种 技 术 的 支 持 ,特 别 是 接 口 插 卡 作 为 一 种 硬 件 设 备 插 入 PC 后 ,总 是 要 占 用 PC 的 各 种 硬 件 资 源 ; 第 三 ,接 口 插 卡 的 质 量 高 低 、兼 容 性 和 标 准 化 的 程 度 以 及 驱 动 软 件 的 可靠性将直接影响计算机的寿命和系统的稳定性、可靠性; 第 四 ,对 象 笔 记 本 电 脑 之 类 的 小 体 积 PC 很 难 用 接 口 插 卡 进 行 功 能 扩 展; 第 五 ,当 接 口 卡 不 是 全 数 字 化 的 时 ,PC 插 槽 中 的 各 种 接 口 卡 受 到 PC 内部很强的电磁辐射干扰,使其性能受到很大影响。 那 么 ,当 把 外 设 连 接 到 PC 上 对 其 进 行 功 能 扩 展 时 ,能 不 能 简 单 到 用 户只需拿起外设的接线,把接线插入接口中就行了呢?答案是肯定的, 那 就 是 采 用 USB 总 线 技 术 。 USB 技术的提出是基于实现外设的简单快速连接,以达到方便用户、降低 成本、扩展 PC 机连接外设范围的目的。与扩展插卡相比,USB 设备不占用 PC 的硬件资源(如 I/O 地址、内存、中断、DMA 等) ,设备的控制、管理和信息 交换完全是由系统软件按 USB 协议进行传输的,因此具有更高的可靠性和兼容 性。 尤其,USB2.0 的推出使 USB 技术得到了迅速地发展。USB 接口的各类设备 发展之快让人目不暇接,不仅成熟的 USB 硬盘伴随着 USB 2.0 那高达 480Mbps 的带宽一举突破瓶颈成为人们瞩目的焦点,便携刻录机、闪盘存储器也因为速 度的提高而为人们所接受。 目前,能够成为 USB 竞争对手的总线就是 IEEE 1394。现在使用的 1394a 标准于 1995 年就开始制订,到现在持续了 7 年之久,是一个相当成熟的外设规 范。 它之所以没有普及, 关键在于它高贵的身价和定位。 从技术上看, IEEE 1394 确实非常先进,无论从任何方面说,它都有相当良好的发展前景。但是, IEEE 1394 未必可以取代 USB 技术,最关键在于它的市场定位。 而且,新一代 USB 的标准 USB2.0 规范目前正在得到越来越多的支持,比 如最近英特尔公司将上市支持 USB2.0 规范的主板芯片组。由此可以预见,下 一代个人电脑将标准支持 USB2.0。在软件方面,据说微软公司将在其新一代面 向消费者的 Windows 操作系统中全面支持 USB2.0。看一看当前推出的无线新 品,你就会发现 USB 接口的强大魅力了,几乎每一款都支持 USB 规范。 由此可见,USB 作为我们开发整个系统的平台是非常合适的,它不仅方便, 成本低,而且具有广泛的应用范围。 第一章 总体方案设计51.2用 FPGA 替代 DSP 实现视频图象处理实时视频处理对系统性能的要求极高,因此几乎所有只具最简单功能的通 用 DSP 都不具备这项功能。可编程逻辑器件允许设计人员利用并行处理技术实 现视频信号处理算法,并且只需单个器件就能实现期望的性能。基于 DSP 的解 决方案通常需要在单板上嵌入许多 DSP,以得到必需的处理能力,这无疑将增 加程序资源开销和数据存储器资源开销。 随着业界积极推动高质量视频开发以及压缩格式的不断改进,系统处理速 度也不断提高。由于 FPGA 工艺的发展遵循摩尔定律,因此与稍早开发的同种 产品相比,新产品能以更具吸引力的成本优势实现相同的功能和性能。 标准 DSP 自身性能上的缺陷促进了专门解决此难题的专用设计芯片(如媒 质处理器)的发展。但是,这些器件极低的灵活度往往使其局限于非常有限的应 用中并容易产生性能瓶颈。在高分辨率系统(如 HDTV 和医疗成像系统)中,基 于处理器的方法受到的限制尤为明显。从根本上讲,处理器的分辨率受限于分 配给滤波器每个抽头或每个转换阶段时钟周期的数目。一旦达到极限条件,通 常除了增加额外的 DSP 部件外别无选择。FPGA 可以通过定制调整提供最具实 用价值的高性能高效率产品。 设计人员可在适用范围和速率之间进行折衷考虑, 从而以比 DSP 时钟低得多的速率实现指定功能。 为此,在本系统中,我们采用 FPGA 代替 DSP 来实现图象处理,使该系统 具有极大的灵活性,为以后进一步实现运动图象的分析建立了良好的平台。 6高速串行总线(USB)视频图象采集和处理系统研究、设计与实现第二章视频图象采集系统的相关技术2.1 USB 总线体系结构随着通信领域和计算机领域技术的不断发展,传统的通信和计算机功能已经 出现了融合趋势,并很有可能成为下一代应用产品的基础。而且社会的飞速发展 使得人们需要交换的信息种类越来越多,数量也越来越大,这就要求提供一种廉 价的,遍布全球的连接手段。能不能提出一种新的技术来实现计算机和通信设备 之间的互连呢? 现在,由于 PC 机在进行重新配置时缺乏足够的灵活性,已经影响了 PC 机的 进一步普及。随着友好的用户图形界面和新的硬件、软件机制的结合以及与之相 对应的诸如 PCI、PnP ISA 和 PCM CIA 等新一代的总线体系结构的提出,使得计 算机看起来已经不象当初那么直观了,而且要重新配置它,也不是那么容易了。 那么有没有一种可以使用户使用起来更简便的技术呢? 随着计算机的普及,人们对计算机的需求也越来越多。所以各种用来扩充计 算机功能的外设也就不断出现,与之相应的是机箱上面的端口越来越紧张了。如 果要支持具有新的功能的外设,就必须在机箱上增加一个新的接口来对其进行寻 址。谁也无法说出未来会出现什么新的外设以及会出现多少。这样以来,这种机 械地增加端口的方法就显得很不方便了。那么,能否利用新的技术来简化端口的 扩充,适应未来发展的需要呢? 这三方面的要求是相互联系的,而 USB 技术就是在这三个方面需求的推动下 发展而来的。它是一种快速的、双向的、同步传输的、廉价的、并可以进行热插 拔的串行接口,它是与当今计算机的发展趋势相适应的。 USB 总线具有一些固有的特点,使得它很容易满足外设的需要。USB 易于使 用,管理和设计,因而得到了广泛的应用。其特点主要有:● ● ● ●对用户而言隐藏了技术细节。 具有广泛的应用领域。 带宽足以保持多媒体应用的需求。 设备与系统相互独立。2.1.1 USB 总线信号环境 USB 采用四线电缆,其中两根是用来传送数据的串行通道,另两根为下游 (Downstream)设备提供电源,如图 2.1 所示。 第二章 视频图象采集系统的相关技术7图 2.1USB 电缆---- 其中,D+、D-是串行数据通信线,它支持两种数据传输率,对于高速且需要 高带宽的外设,USB 以全速 12Mbps 传输数据;对于低速外设,USB 则以 1.5Mbps 的传输速率传输数据。USB 总线会根据外设情况在两种传输模式中自动地动态转 换。VBUS 通常为+5V 电源,GND 是地线。USB 是基于令牌的总线,类似于令 牌环网络或 FDDI 基于令牌的总线。 USB 的信号如表 2.1 所示。数据 J 态和 K 态是用于在系统中传递差模数据的 两个逻辑电平。差分信号是从数据线的交叉点测得的。空闲态和恢复态在逻辑上 分别等同于 J 态和 K 态。表 2.1 总线状态 发送方驱动器 差模“1” 差模“0” 数据 J 态: 低速 全速 数据 K 态: 低速 全速 空闲态: 低速 全速 恢复态: 低速 全速 分组开始(SOP) 差模“1”和 D+& VSE(max.)和 D-& VSE(min.) 差模“0”和 D-& VSE(max.)和 D+& VSE(min.) 数据线由空闲态变换为 K 状态 差模“0”和 D-& VSE(max.)和 D+& VSE(min.) 差模“0”和 D+& VSE(max.)和 D-& VSE(min.) 差模“1” 差模“0” 差模“0” 差模“1” USB 的信号状态 信号级别 接收方(D+)-(D-)&200mV 并且 D+或 D- &VSE(min) (D+)-(D-)&-200mV 并且 D+或 D- &VSE(min) 8高速串行总线(USB)视频图象采集和处理系统研究、设计与实现 D+和 D-&VSE(min.)持续 2 个 分组结束(EOP) 比特周期,再持续 1 个比特 周期的空闲状态 断开 (仅对上行方向而言) 连接 (仅对上行方向而言) 复位 (仅对下行方向而言) ―― D+和 D-&VSE 的持续时间大 于等于 10ms ―― D+和 D-&VSE(max.)应至少持续 2.5us D+和 D-&VSE(max.)应至少持续 2.5us D+和 D-&VSE(max.)应至少持续 2.5us D+和 D-&VSE(min.)应至少持续 1 个比特周期,再持续 1 个 J 态⑴ 数据信号的发送 通过控制 D+和 D-线从空闲态到相反的逻辑电平(K 态),就可以实现源端口的 包发送(SOP)。同步字中的第一位代表了这种在电平上的转换。SE0 态通常用来表 示包的发送结束(EOP),可以通过控制 D+和 D-两位到达 SE0 态,然后控制 D+和 D-到达 J 态,就可实现 EOP 信号的发送。从 SE0 态到 J 态的变化表示接收端的包 发送的结束。图 2.2 列出了包开始和结束的信号发送波形。VIL (max) VOL (max) VSS 总线空闲 包的第一位 SOP 包的最后一位 EOP的SE0部分 EOP端总线驱动到J态 总线流动 总线空闲VIL (max) VOL (max) VSS图 2.2包事务的电压电平⑵ 复位信号的发送 复位就是将一个信号从挂起状态唤醒。 集线器信号通过控制端口上的持久的 SE0 态来实现对下行端口的复位。复位 信号清除后,设备都将处于缺省状态。 一个设备如果见其上行端口的 SE0 态持续时间超过 2.5us,则它就把该信号作 为复位信号处理。在复位信号发送结束前,它必须已产生作用。 在复位信号清除后的 10ms 的复位恢复时间后,集线器必须能接收所有集线器 第二章 视频图象采集系统的相关技术9请求,设备也必须能接收一个 SetAddress()请求。如果接收这些请求失败,则设备 将不能被 USB 系统软件所识别。 ⑶ 挂起 所有的设备都必须能支持挂起状态,并可从任一电平状态进入挂起状态。当 设备发现它们的上行总线上的空闲态持续时间超过 3.0ms 时,它们便进入挂起状 态。如果任一其它总线交通缺乏时,SOF 令牌将在每帧中出现一次,以防止高速 设备被挂起。当任一低速设备交通缺乏时,在 SOF 令牌出现的每一帧中至少有一 个低速设备处于活动态,以避免它们不被挂起。挂起又可分为全局挂起和局部挂 起。 ⑷ 唤醒 处在挂起状态的设备,当它的上行端口接收到任一非空闲信号时,它的操作 将被唤醒。唤醒信号由主机或设备发出,以使一个挂起的总线回到活动态。 USB 系统软件必须提供 10ms 的唤醒恢复时间, 在这段时间内, 它将不对与被 唤醒的部分总线相连的任一设备进行操作。 端口的中断与连接也可以使集线器发送一个复位信号,从而唤醒系统,但仅 当集线器远程唤醒使能时,这些事件才能引起集线器发送唤醒信号。 2.1.2 USB 数据流类型 USB 提供了在主机和连接的 USB 设备间的通信服务协议, 协议按不同的功能 分为功能层、设备层和接口层。图 2.3 显示了标识系统的不同的 USB 多层次通信 模型。图 2.3USB 的多层次通信模型USB 总线接口层在主机和设备间提供物理/信号/包的连接。 USB 设备层是 USB 系统软件为完成与设备的操作所必须具有的功能。功能层通过一个特定的与功能 块相匹配的客户软件层实现 USB 设备的功能。 每个 USB 设备层和功能层都设有一 个在层内的逻辑通信流, 实际上 USB 中真正的数据传送是通过 USB 的总线接口层 10高速串行总线(USB)视频图象采集和处理系统研究、设计与实现来完成的。 USB 总线拓扑结构 USB 总线拓扑是指 USB 设备和主机之间的连接模型,涉及 USB 主机、设备 以它们之间的相互连接。 如图 2.4 所示,USB 上的设备经由分层星形拓扑结构与主机进行物理连接。 USB 连接点由一个称为集线器的特殊的 USB 设备提供。 这个集线器提供的额外连 接点称为端口(Port)。 包含一个内嵌集线器的主机称为根集线器(Root Hub)。 主机通 过根集线器给 USB 设备提供一个或多个连接点。 如主机提供补充功能的 USB 设备 称为功能块。为防止循环连接,在 USB 的星型拓扑结构上强制进行分层安排,这 导致了树型配置。图 2.4USB 物理总线拓扑结构多个功能块和一个集线器可被封装在一起构成一个复合设备(多功能设备) , 在复合设备内部,各个功能块与集线器永久连接。从主机来看,一个复合设备是 一个连接了多个功能块的集线器。 USB 通信流 USB 提供了主机上软件和 USB 功能块之间的通信服务。 根据不同客户与功能 块之间相互作用的要求,功能块可具有不同的通信流。每个通信流利用一些总线 访问来完成与功能块之间的通信。 每个通信流终止于设备上的一个端点(Endpoint)。 设备的端点是 USB 设备的唯一的可标识部分,用来标识每个通信流的方向,它是 主机和设备之间通信流的信息源或终点。 对 USB 系统来说,USB 逻辑设备像是端点的一个集合。端点组合成实现接口 的端点组, 接口是面对此功能块的。 系统软件使用与端点 0 相关的缺省管道(Default Pipe)来管理设备。管道(Pipe)是描述设备上的端点和主机上软件之间的一个抽象通 道。客户软件要求数据在主机的缓冲器和 USB 设备上的一个端点之间传送。主机 控制器(或依赖于传送方向的 USB 设备)对数据进行打包使之在 USB 上传送。 图 2.5 第二章 视频图象采集系统的相关技术11说明了在端点和主机的存贮缓冲器之间的通信流是如何通过管道的。图 2.5USB 通信流USB 数据传送类型 为适应设备的多样性,USB 协议定义了 4 种传送类型:控制传输、等时传输、 中断传输、批传输。 控制传输在主机和控制端点之间传送控制信息。控制传输是一种纠错传输, 在遇到传输错误时重试三遍,如果错误仍存在就放弃传输并向上层软件报告错误。 控制端点所能指定的最大数据传输长度为 8、16、32、64 字节。一个单独的事务 可以包含少于最大数据传输长度的数据但不能多于。控制事务在 USB 中具有最高 优先级,设备必须处理控制事务。 等时(isochronous)传输可以在一个总线帧内最多传输 1023 字节数据。因为等 时传输有周期保证,因此特别适用于时间敏感的数据传输,如音频信号,但这种 周期保证是有代价的,等时传输在数据出错时不会自动重试。USB 设计者假定等 时数据流的接收者允许偶尔的数据丢失。 批量(bulk)传输能在主机和批量端点间一次传输最多 64 字节的数据。就象控 制传输一样,批量传输是纠错传输,不同的是批量传输没有任何延迟保证。如果 主机发现帧中除了预定带宽外还有剩余,它就把等待的批量传输送往总线。 中断(interrupt)传输在总线操作和涉及设备方面上几乎与批量传输完全相同。 它能把最大 64 字节的数据无误地在主机和中断端点间传输。中断传输和批量传输 仅有的不同是它必须考虑延迟。中断端点需指定一个范围在 1~255 毫秒内的查询 周期。 2.1.3 USB 设备的逻辑结构 USB 设备可分为下面三层: ?底层:发送和接收包的总线接口; ?中间层:处理总线接口和设备上的各种端点之间的按规定路径发送的数据; 12高速串行总线(USB)视频图象采集和处理系统研究、设计与实现?底层:有串行总线设备提供的功能,如:鼠标或 ISDN 接口。 图 2.6 给出了 USB 设备的逻辑结构。图 2.6USB 设备的逻辑结构每个设备内有一个或多个逻辑连接点,称为端点,每个端点指定下面的传输 类型之一:控制传输、中断传输、批量传输和等时传输。所有设备都有一个端点 0 传输,用于配置和控制设备。 主机和设备的端点 0 之间的连接称为管道,主机 USB 系统软件和设备的端点 之间的连接称为缺省管道。 一个设备对主机表现为一组合适的端点,一组相关的端点称为一个接口。有 多个接口的设备称为组合设备。 最后,设备可以有多组接口,每一组称为一个配置,一次只能有一个配置是 活动的。但是,当前配置中的所有接口(和它们的端点)可以同时活动。大多数 的设备只有一个配置和一个接口。当一个设备第一次插入系统时,Windows 提示 用户选择合适的配置。2.2I2C 总线系统I?C 是英文“Inter Integrated Circuit”的缩写,中文意思是“集成电路之间”。总线 是用来传送信息的公用线。 I?C 总线就是集成电路之间传送时钟脉冲与数据的公用 线路。采用 I?C 总线控制就是将微处理器的 SCL(串行时钟) 、SDA(串行数据) 总线(一根时钟线与一根数据线)与其它集成电路或存储器连接起来,通过总线 来交换信息,实行控制。 I2C 总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此 I2C 总线占用的空间非常小,从而减少了电路板的空间和芯片管脚的数量,进而降 低了互联成本。 第二章 视频图象采集系统的相关技术13I2C 总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行 发送和接收的设备都可以成为主总线。一个主总线能够控制信号的传输和时钟频 率。自然,在任何时间点上只能有一个主总线。 2.2.1 I2C 总线的基本结构 采用 I2C 总线标准的单片机或 IC 器件,其内部不仅有 I2C 接口电路,而且将 内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减 少了器件片选线的连接。CPU 不仅能通过指令将某个功能单元电路挂靠或摘离总 线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的 扩展与控制。I2C 总线接口电路结构如图 2.7 所示。图 2.7设备和 I2C 总线接口电路2.2.2双向传输的接口特性 传统的单片机串行接口的发送和接收一般都各用一条线,如 MCS51 系列的TXD 和 RXD,而 I2C 总线则根据器件的功能通过软件程序使其可工作于发送或接 收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从 总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上数据的传 送并产生时钟以开启传送的器件,此时任何被寻址的器件均被认为是从器件。I2C 总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既 没有中心机,也没有优先机。 总线上主和从(即发送和接收)的关系不是一成不变的, 而是取决于此时数据传 送的方向。SDA 和 SCL 均为双向 I/O 线,通过上拉电阻接正电源。当总线空闲时, 两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有 线“与”功能。I2C 总线的数据传送速率在标准工作方式下为 100kbps,在快速方式 下,最高传送速率可达 400kbps。 14高速串行总线(USB)视频图象采集和处理系统研究、设计与实现2.2.3I2C 总线上的时钟信号在 I2C 总线上传送信息时的时钟同步信号是由挂接在 SCL 时钟线上的所有器 件的逻辑“与”完成的。SCL 线上由高电平到低电平的跳变将影响到这些器件,一 旦某个器件的时钟信号下跳为低电平,将使 SCL 线一直保持低电平,使 SCL 线上 的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并 不能影响 SCL 线的状态,于是这些器件将进入高电平等待的状态。 当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL 线被释放返 回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平 期的器件又将 SCL 线拉成低电平。这样就在 SCL 线上产生一个同步时钟。可见, 时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电 平期最短的器件确定。 2.2.4 数据传送 在数据传送过程中, 必须确认数据传送的开始和结束。 在 I2C 总线技术规范中, 开始和结束信号(也称启动和停止信号)的定义如图 2.8 所示。当时钟线 SCL 为 高电平时,数据线 SDA 由高电平跳变为低电平定义为“开始”信号;当 SCL 线为高 电平时,SDA 线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是 由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的 一段时间内,总线被认为是空闲的。图 2.8启动和停止信号I2C 总线的数据传送格式是:在 I2C 总线开始信号后,送出的第一个字节数据 是用来选择从器件地址的,其中前 7 位为地址码,第 8 位为方向位(R/W)。方向位 为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将 从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总 线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被 主器件寻址的器件,其接收信息还是发送信息则由第 8 位(R/W)确定。 在 I2C 总线上每次传送的数据字节数不限,但每一个字节必须为 8 位, 而且每 个传送的字节后面必须跟一个认可位(第 9 位) ,也叫应答位(ACK) 。数据的传 送过程如图 2.9 所示。 第二章 视频图象采集系统的相关技术15图 2.9I2C 总线上的数据传送每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即释 放 SCL 线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器 件正在处理一个实时事件而不能接收数据时, (例如正在处理一个内部中断,在这 个中断处理完之前就不能接收 I2C 总线上的数据字节)可以使时钟 SCL 线保持低 电平,从器件必须使 SDA 保持高电平,此时主器件产生 1 个结束信号,使传送异 常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放 SCL 线,主器件 继续传送。 当主器件发送完一个字节的数据后,接着发出对应于 SCL 线上的一个时钟 (ACK)认可位,在此时钟内主器件释放 SDA 线,一个字节传送结束,而从器件 的响应信号将 SDA 线拉成低电平,使 SDA 在该时钟的高电平期间为稳定的低电 平。从器件的响应信号结束后,SDA 线返回高电平,进入下一个传送周期。 I2C 总线还具有广播呼叫地址用于寻址总线上所有器件的功能。若一个器件不 需要广播呼叫寻址中所提供的任何数据,则可以忽略该地址不作响应。如果该器 件需要广播呼叫寻址中提供的数据,则应对地址作出响应,其表现为一个接收器。 带有 I2C 总线接口的器件可十分方便地用来将一个或多个单片机及外围器件 构成单片机系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连 接线和连接引脚少,因此其构成的系统价格低,器件间总线简单,结构紧凑,而 且在总线上增加器件不影响系统的正常工作,系统修改和可扩展性好。即使有不 同时钟速度的器件连接到总线上,也能很方便地确定总线的时钟。2.3Windows WDM 设备驱动程序设备驱动程序提供连接到计算机的硬件的软件接口,它是操作系统的一个信 任部分。用户应用程序以一种规范的方式访问硬件,而不必考虑必须如何控制硬 件。 驱动程序是一个软件,在装入后成为操作系统的一部分。它使一个或多个设 16高速串行总线(USB)视频图象采集和处理系统研究、设计与实现备可用于用户态程序员,每个设备代表一个物理的或逻辑的硬件。在 Windows 中, 驱动程序总是使设备看起来像是一个文件,可以打开设备的一个句柄,然后应用 程序可以在设备句柄最后关闭之前向驱动程序发出读写请求。 2.3.1 Windows 2000 驱动 Windows 2000 系统可以使用多种驱动程序,图 2.10 显示了其中几种。图 2.10●Windows 2000 中的设备驱动程序种类虚拟设备驱动程序(VDD)是一个用户模式部件,它可以使 DOS 应用程序访问 x86 平台上的硬件。VDD 通过屏蔽 I/O 权限掩码来捕获端口存取操作,它 基本上是模拟硬件操作,这对于那些直接对裸机硬件编程的应用程序特别有用。 尽管这种驱动程序在 Windows 98 和 Windows 2000 中共享一个名称并且有相同的 功能,但实际上它们完全不同。我们用 VDD 缩写代表这种驱动程序,用 VxD 缩 写代表 Windows 98 中的虚拟设备驱动程序以示区别。●内核模式驱动程序的分类包含许多子类。PnP 驱动程序就是一种遵循 WDM 驱动程序是一种 PnP 驱动程序,它同时还遵循电源管理协议,并能Windows 2000 即插即用协议的内核模式驱动程序。●在 Windows 98 和 Windows 2000 间实现源代码级兼容。 WDM 驱动程序还细分为类 驱动程序(class driver)和迷你驱动程序(minidriver),类驱动程序管理属于已定义类 的设备,迷你驱动程序向类驱动程序提供厂商专有的支持。● ●显示驱动程序是用于显示和打印设备的内核模式驱动程序。 文件系统驱动程序在本地硬盘或网络上实现标准 PC 文件系统模型(包括多 遗留设备驱动程序也是一种内核模式驱动程序,它直接控制一个硬件设备层次目录结构和命名文件概念)。●而不用其它驱动程序帮助。 这种驱动程序主要包括 Windows NT 早期版本的驱动程 第二章 视频图象采集系统的相关技术17序,它们可以不做修改地运行在 Windows 2000 中。 2.3.2 WDM 驱动程序基本结构 WDM 型驱动程序是内核态程序,与标准的 Win32 用户态程序有很大的区别, 它是通过对各个回调例程的组合而形成的,每个回调例程都有确定的函数原形。 每当 Windows 系统发现满足某个回调例程的调用条件时,就会自动地对相应的回 调例程进行调用,调用结束后,又返回 Windows 系统。 WDM 型驱动程序采用了分层处理的方法(如图 2.11),通过它,用户不需要直 接和硬件打交道(在 USB 驱动程序中尤为明显) ,而只需通过下层驱动程序提供 的接口来访问硬件。终端用户 应用程序 Win32子系统用户态 内核态I/O系统服务IRP最高层驱动程序FiDO图 2.11WDM 中设备对象和驱动程序的层次结构图 2.11 中右边是一个设备对象堆栈。设备对象是系统为帮助软件管理硬件而 创建的数据结构。一个物理硬件可以有多个这样的数据结构。WDM 还引入了功能 设备对象 FDO(Functional Device Object)与物理设备对象 PDO(Physical Device Object)两个新类来描述硬件,一个 PDO 对应一个真实硬件。一个硬件只允许有 一个 PDO,却可以拥有多个 FDO,在驱动程序中直接操作的不是硬件而是相应的 PDO 与 FDO,FDO 和 PDO 处于堆栈的最底层。在 FDO 的上面和下面还会有一些 过滤器设备对象(Filter Device Object)。位于 FDO 上面的过滤器设备对象称为上层 过滤器驱动程序,通常也叫作最高层驱动程序,位于 FDO 下面(但仍在 PDO 之上) 的过滤器设备对象称为下层过滤器驱动程序,通常也叫作最低层驱动程序。在用I/O管理器中间层驱动程序FDO最低层驱动程序FiDO硬件抽象层PDO 18高速串行总线(USB)视频图象采集和处理系统研究、设计与实现户态和内核态通讯方面,系统为每一个用户请求打包形成一个 IRP 结构,将其发 送至驱动程序,并通过识别 IRP 中的 PDO 来区别是发送给哪一个设备的。 为了适应这种机制,WDM 型驱动程序采用了驱动程序栈的方法,用户态程序 的请求进入内核态时生成了一个 IRP(输入/输出请求包)结构,每个 IRP 包对于 驱动程序栈中的每层驱动程序都提供了一个 IO_STACK_LOCATION 结构的单元, 一般用户只需要关心最上层驱动程序的 IO_STACK_LOCATION 单元, 而无需去关 注别的 IO_STACK_LOCATION 单元,它由系统驱动程序来填写。 与其它的底层驱动程序一样, 一个 WDM 驱动程序没有应用程序可以使用的功 能,这是因为它负责在一个特权层实现和操作系统的通信。一个 WDM 驱动程序 可以允许或否定一个应用程序对一个设备提出的访问。例如,一个游戏杆的驱动 程序可以允许任一个应用程序来使用一个游戏杆,或者它可以为某个应用程序而 保留以供其独占使用。Windows 为其它底层设备驱动程序和 WDM 驱动程序所保 留的能力还包括对硬件中断的响应和 DMA 传输。 Win32 设备驱动程序模型是设计用来为运行在 Win98 和其以后版本(包括 Win2000 系统)下的任一设备,提供一个通用的驱动程序模型。 WDM 定义了一个基本模型,处理所有类型的数据。例如,USB 类驱动程序为 所有 USB 设备提供了一个抽象的模型,并具有由所有客户驱动程序使用的定义好 的接口。有了对所有设备类型共同的核心驱动程序模型,使驱动程序开发人员更 容易从一种类型的设备转移到另一种类型的设备上去。而且它也意味着驱动程序 模型的内核实现尽可能是固定的。如果每一种类型的设备都具有不同类型的驱动 程序模型,那么我们的开发工作无疑会变得很繁琐。 Win32 设备驱动程序模型并不是一个全新的概念。它实际上是一个 Win95 和 NT 特性的混合。 一个 WDM 驱动程序是一个 NT 内核态驱动程序再加上 Win95 的 即插即用和电源管理特性。在 Win98 系统中,对 WDM 的支持得到了进一步的扩 充和改进,并呈现出完全不同的特性。 Windows 系统提供了 PCI,PnPISA,USB 和 IEEE 1394 总线驱动程序。PCI 总线驱动程序枚举和配置 PCI 总线上的设备。PnPISA 总线驱动程序对可以使用即 插即用配置的 ISA 设备进行枚举和配置。USB 总线驱动程序则用于枚举和控制 USB 总线。主控制器驱动程序是访问两种类型的 USB 设备的标准。USB 客户驱动 程序可以通过使用 IOCTL,由 USB 类驱动程序来访问 USB 设备。IEEE 1394 总线 驱动程序枚举和控制 IEEE 1394 高速总线。 第三章 USB 接口的视频图象采集系统的设计及实现19第三章 USB 接口的视频图象采集系统的设计及实现USB 作为一种新型的扩展接口,主要致力于计算机――电话一体化和应用类 消费产品。 它的数据传输率比标准串\并口都要高。 USB 总线具有时分复用的特点, 多个不同速度的 USB 外设可以通过集线器同时连接到同一台计算机的同一个 USB 口上, 在 USB 总线带宽允许的情况下, 多个外设可以同时工作而不相互影响。 USB 传输速率适用于中、低速外设。高速模式下,USB 支持实时的视频、音频和压缩 的视频数据传输。 本章对以 CMOS 视频传感器为核心的数字图象设备(数字图象采 集芯片)与 USB 接口进行了研究, 并利用 Cypress 公司的 EZ-USB AN2131Q 芯片设 计了一种基于外接 RAM 的方案,实现了视频图象采集系统的 USB 接口。3.1 视频图象采集系统的硬件开发通用串行总线(Universal Serial Bus)适用于 USB 外围设备连接到主机上,通 过 PCI 总线和 PC 内部的系统总线连接,实现数据的传送。同时 USB 又是一种通 信协议,支持主系统和其外围设备之间的数据传送。在 USB 的网络协议中,每个 USB 的系统只能有一个主机。 USB 是一种层状的星形拓扑,其根部是主机控制器,USB 器件与根部接口连 接实现其功能。若多个器件同时行使其功能,就要通过集线器来扩展,但扩展层 不能超过 5 层。USB 器件支持热插拔,而且可以即插即用。USB 一般支持两种传 输速度,低速 1.5Mbps 和全速 12Mbps,在 USB2.0 版本中其速度提高到 480Mbps。 USB 有四种传输方式用于不同类型的数据。控制传输,主要用于设置、命令 和状态信息;中断传输,与一般的中断概念不同,主要用于打印机、扫描仪等大 量数据传输;同步传输和批量传输,用于视频、声音等实时传输。 考虑到 USB 传输速率较高,如果利用只实现工程功能的芯片,外加一个普通 微控制器(如 8051) ,其处理速度就会很慢而达不到 USB 传输要求。USB 外设作 为消费类产品的目的之一在于降低产品成本,如果采用高速微处理器(如 DSP) , 满足了 USB 的传输速率,但电路结构复杂且成本较高。在各方面比较下,我们选 择了 Cypress 公司的内置微控制器芯片 EZ-USB AN2131Q,开发了一套具有 USB 接口的视频图象采集系统。其系统结构框图如图 3.1 所示。 20高速串行总线(USB)视频图象采集和处理系统研究、设计与实现控制信号 多路转换器主机USB总线读写片选数据 缓冲128K RAM (RAMA,RAMB)数据 锁存USB总线 控制器 EZ-USB AN2131Q数据总线读写 地址产生器 (A , B)片选 控制信号视频图象采集 数字CAMERA 芯 片 (OV6620)控制信号SCL SDA I2C总线控制电路SCL SDA图 3.1系统结构框图整个系统以 USB 总线控制器为核心, 通过 I2C 总线控制电路对数字 Camera 芯 片的工作状态进行控制,数字图象数据通过控制电路送入外部 RAM;USB 总线控 制器通过控制电路从外部 RAM 中读取数据。与计算机的通讯则是通过 USB 接口 来实现的。 3.1.1 视频图象的采集 视频图象采集目前一般是采用 CCD 摄象机再通过视霸卡或实时图象采集 (压 缩) 卡对运动图象进行采集 ( 或压缩后) 送入计算机中进行处理。采用这种方法 时, 由于摄象机的输出已转换成模拟 NTSC 或 PAL 制式并以 SVideo 或混合视频信 号方式输出,且 CCD 摄象机的象素点在输出时序上很难与采集卡的采样点一一 对应,因此视频图象数字化后图象质量损失较大,图象分辩率上限受制式所限制。 另外,这种方法存在系统成本高、结构复杂等局限性,不便于推广和普及应用。 为此,我们特采用一种最新数字图象技术: CMOS 数字摄象集成电路 (CMOS digital video image IC) 。 与模拟 CCD 摄象机相比,CMOS 数字摄象 IC 的特征是将 CCD 摄象机和相 应的视频 AD 转换及视频输出电路集成在一个 IC 芯片上,从而在实现高保真数字 图象的前提下显著地降低成本和体积。我们采用的是美国 OmniVision 公司的 OV6620 CMOS 数字摄象 IC, 其内部结构如图 3.2 所示。 356 × 292 的阵列扫描输 出原始的 R、G、B 彩色图象信号,经模拟处理电路进行曝光、校正、白电平调整 等处理后,根据输出要求还可转换成 YUV 等多种信号输出形式,其模拟视频信 第三章 USB 接口的视频图象采集系统的设计及实现21号经两路 8 位视频 AD 转换后由视频接口输出 16 位的 YUV 或 RGB 4:2:2 格式 的标准数字视频图象信号。OV6620 的视频时序产生电路用于产生行同步、场同 步、水平参考信号 HREF、垂直同步信号 VSYNC、混合视频同步等多种同步信号 和象素时钟 PCLK 等多种内部时钟信号,I2C 接口使外部 CPU 通过 I2C 总线控制 OV6620 的各种工作状态、工作方式、数据输出格式和读取内部状态信息等。图 3.2OV6620 芯片结构框图OV6620 芯片还具有丰富的编程控制功能, 其图象帧频、 曝光时间、 增益控制、 Gamma 校正、图象开窗等均可通过对芯片内部寄存器的读写进行设置,数字视频 信号的输出也必须通过对寄存器读取才能实现。 之所以选用 OV6620 芯片是出于两个方面考虑:一、电路接口方便;二、可 实时进行图象数据压缩、处理、变换等工作,再将处理后的数据传给计算机。 图象格式的研究对于图象数据的传输、压缩、处理等是至关重要的,所以我 们有必要讨论一下 OV6620 的图象输出格式。 OV6620 的图象输出格式为 CIF 格式,其像素阵列为 352×288,分为 16×16 的 子块,每个子块大小为 22×18,可以在整个图像的局部开窗,输出窗口中的图象。 CIF 格式是为了视频通信的要求,不需要太大的带宽。CIF 图象的参数如图 3.3 所 示。 亮度帧为 288 行×360 列(更多的取 352 列,即象素数/每行)。色度帧为 144 行×180 列(更多的取 174 列,象素/行), 总共有 Cr、Cb 两个色差帧(从概念上仍 然是 Cr = R-Y、Cb = B-Y ),逐行扫描方式,且帧率为 30(或者 15、10、7.5)帧/ 秒。若每个象素量化为 8 位/象素,则数据率约为 37.3Mbps(当 30 帧时)。 22高速串行总线(USB)视频图象采集和处理系统研究、设计与实现从亮度 Y 和两个色差量 Cr、Cb,恢复 R、G、B 三基色值的一种变换公式如下:Y = 0.59G + 0.31R + 0.11BC r = 0.713 × (R ? Y )C b=0.564 × (B ? Y )CIFLuminance Y43524360 pelsChrominance Cb2176180 pels2Chrominance Cr21762180 pels图 3.3CIF 图象格式和分辨率为了使图象的分割保持是 16 的整数倍,许多场合下亮度帧更多地取为 288 行 ×352 列(象素/行)、色度帧取为 144 行×176 列(象素/行)。CIF 介于 PAL(625 行, 帧频 50/2)和 NTSC(525 行, 帧频 60/2)之间, 即取行数/帧= 625/2+525/2=287.5≈288, 制定时遵循了差异均摊的合作原则,使得转换更容易实现。 3.1.2 USB 接口总线控制器 目前,市场上供应的 USB 控制器主要有两种:带 USB 接口的单片机(MCU)或 纯粹的 USB 接口芯片。纯粹的 USB 接口芯片仅处理 USB 通信,必须外加一个微处 理器来进行协议处理和数据交换,这样就增加了电路的复杂性,且处理速度不高。 而带 USB 接口的单片机(如 Cypress 公司的 EZ-USB)的好处在于:开发者对系统 结构和指令集非常熟悉,且接口电路简单。为此,在该设计中,我们采用 Cypress 公司的 EZ-USB AN2131Q 总线控制器作为图象采集模块与计算机之间数据传输的 桥梁。 EZ-USB AN2131Q 的内部结构如图 3.4 所示。 它是 Cypress 公司的一种内嵌有 微控制器的 80pin 的 USB 接口控制芯片,它集成了一个加强的 8051 核、一个串行 接口引擎、一个 USB 收发模块、RAM,对外有 24 个 I/O 接口、16 位的地址线、8 位的数据线、 一个 I2C 接口和两个 USB 数据端口 (D+、 D-) 。 EZ-USB 遵从 USB1.1144lines144lines288lines 第三章 USB 接口的视频图象采集系统的设计及实现23规范(12Mbps) ,支持远程唤醒。 USB 收发器连接到 USB 总线的 D+和 D_管脚;串行接口引擎(SIE)编码和 解码串行数据并且进行错误校验、位填充和执行 USB 所需的其他信号,最后完成 数据从 USB 接口的传输。 EZ-USB AN2131Q 芯片高度集成。传统的 USB 外设的硬件设计通常包括非易失 性存储器(如 EPROM、E2PROM、FLASH ROM) 、微处理器、RAM、SIE(串行 接口引擎) 、DMA,EZ-USB 将上述多个模块集成在一个芯片中,从而减少了各芯 片接口部分时序配合的麻烦。+5v D+ DGND USB 连接器 串行接 口引擎 (SIE) USB接口 程序&数据 RAM IO端口地址 USB 收发器 通用微处理器 数据EZ-USB图 3.4 EZ-USB AN2131Q 内部结构框图EZ-USB AN2131Q 可以代替 USB 外设开发者完成 USB 协议中规定的 80 %~90 %的通信工作,使得开发者不需要深入了解 USB 的低级协议即可顺利地开发出所 需要的 USB 外设。 EZ-USB AN2131Q 接收全部 USB 的吞吐量。 这种采用 EZ-USB AN2131Q 的设计,不受端点数目、缓冲区大小、传输速度及传输方式的限制。 EZ-USB AN2131Q 芯片采用了一种基于内部 RAM 的软配置方案。如图 3.5 所示,外设未通过 USB 接口接到 PC 机之前,外设上的固件代码(Firmware)存 储在 PC 机上;一旦外设接到 PC 机上,PC 先询问外设是“谁” (即读取设备描述 符) ,然后将外设的固件代码下载到 EZ-USB 的 RAM 中,这个过程叫重新枚举。 这个特性给 USB 外设开发者带来很多方便,比如开发过程中当固件代码需要修改 时,可以在 PC 机上修改好后,下载到 EZ-USB,从而省去了烧片子的麻烦。当开 发好的外设已经批量售出,开发商需要向用户提供固件代码的升级版本时,就可 以在网上发布,允许客户随时不断地设置和升级。 片内嵌有一个增强型的 8051 微控制器,与标准的 8051 相比,它的速度快 3 倍。它是通过内部 RAM 来进行编程和数据存储的,这样使得芯片具有软特性。 USB 主机通过 USB 总线下载 8051 程序代码和设备特征到 RAM 中, 然后 EZ-USB 芯片作为一个由代码定义的外围设备重新连接到主机上。 24高速串行总线(USB)视频图象采集和处理系统研究、设计与实现图 3.5 从 host PC 下载 FirmWareEZ-USB AN2131Q 有两种同步传输方式:即普通读写方式和快速读写方式。 在普通读写方式下,芯片从外部读取或向外部写入数据的速率不会超过 1000 字节 /ms,而且数据传输指令只能一一列出,共要写出 1000 行相同的指令。中间不能 用循环来传输数据,而且也没有时间来加入其它指令。这种方式对于要求同步传 输、 每帧传输 1023 字节的设备是不可取的。 在快速读写方式下, 芯片可以在 0.5ms 内从外部读取或向外部写入 1023 字节的数据,并且还留有足够的时间可以加入其 它指令。 EZ-USB AN2131Q 使用了一个增强型 SIE/USB 接口(USB 核) ,它本身完成 了许多的 USB 协议,这样就简化了 8051 代码。 3.1.3 图象存储电路设计 存储电路用于实现图象数据的缓存。为了加快图象数据采集以及传输的速度, 我们采用了两块 RAM 来进行图象的存储,如图 3.6 所示。数据线 D7-D0 地址线 A16-A0锁存器1 图象数据 Y7-Y0 锁存器2图象存储器 RAM1图象存储器 RAM2 片选信号图 3.6图象存储电路在存储器电路中,图象存储器是由两片 RAM 组成的,两片存储器之间是交替 工作的,其工作控制是由来自系统控制模块的片选信号控制的。该设计思想主要 第三章 USB 接口的视频图象采集系统的设计及实现25是为了提高系统的工作效率,使总线上的操作可以实现并行工作。由于 Camera 芯 片的图象数据输出速度要比 USB 传输速度快, 所以必须协调好两片 RAM 的工作。 首先,当图象数据写入 RAM1 的同时,RAM2 将数据通过 USB 送往主机,由于上 面提到的速度匹配问题,所以当 RAM2 的数据被读完以后就可以直接向 RAM2 写 下一帧的图象数据,此时主机才能从 RAM1 中读取数据;然后等待 RAM1 中的数 据被读完再向其写入新的图象数据。如此循环,实现了并行工作,大大提高了系 统的工作效率。图 3.7 给出了其工作时序图。RAM1 RAM2 写操作 读操作 等待 读操作 写操作 等待 读操作写操作等待读操作写操作等待图 3.7数据存储时序图3.1.4I2C 总线控制电路设备上的串行数据线 SDA 接口电路应该是双向的,输出电路用于向总线上发 送数据,输入电路用于接受总线上的数据。串行时钟线也应该是双向的,作为控 制总线数据传送的主机要通过 SCL 输出电路发送时钟信号,同时要检测总线上的 SCL 上的电平以决定什么时候发下一个时钟脉冲电平;作为接受主机命令的从机, 要按总线上的 SCL 的信号发出或接收 SDA 上的信号,也可以向 SCL 线发出低电 平信号以延长总线时钟信号的周期。总线空闲时,因各设备都是开路输出的,上 拉电阻使 SDA 和 SCL 线都保持高电平。 任一设备输出的低电平都使相应的总线信 号线变低,也就是说各设备的 SDA 是“与”关系,SCL 也是“与”关系。 系统中 I2C 总线主要是控制 OV6620 的工作状态、工作方式、数据输出格式以 及读取 OV6620 内部状态信息。由于 EZ-USB AN2131Q 芯片的供电电压是 3.3V, 而 OV6620 的供电电压是 5V,所以就不允许把两个芯片的 SDA 和 SCL 线直接相 连,而是要通过一个电压转移电路把两根线相连。具体实现的方法见图 3.8。左边 是低电压设备通过上拉电阻 Rp 连接到 3.3V 电源上;右边是高电压设备通过上拉 电阻 Rp 连接到 5V 电源上。SDA 和 SCL 线上的电压转移电路是相同的,都是一 个 N 沟道增强型 MOS-FET。门极(g)连接到低电压源 VDD1 上,源极(s)连接 到总线低压部分,漏极(d)连接到总线高压部分。 下面我们就来讨论一下该电路的工作情况: ⑴ 没有设备下拉总线。这时总线的低压部分通过上拉电阻 Rp 被拉至 3.3V, MOS-FET 管的门极和源极电压也都是 3.3V,这样使得 VGS 小于门限电压而导致 MOS-FET 管关断。同样,总线的高压部分也被拉到 5V。这样,连接总线的两个 26高速串行总线(USB)视频图象采集和处理系统研究、设计与实现部分都处于高电平,但是电压不同。 ⑵ 3.3V 设备把总线拉至低电平。这时 MOS-FET 管的源极处于低电平,而 门极电压为 3.3V, 使得 VGS 大于门限电压而导致 MOS-FET 管导通。 这样总线的高 压部分也被拉至低电平。因此,连接总线的两个部分都处于低电平,且电压相同。 ⑶ 5V 设备把总线拉至低电平。这时由于二极管的原因使得 VGS 逐渐达到门 限电压而导致 MOS-FET 管导通。这样总线的低压部分也被拉至低电平。因此,连 接总线的两个部分都处于低电平,且电压相同。图 3.8I2C 总线电压转移电路状态 1 实现了电平转移功能;状态 2 和状态 3 实现了“线与”的功能,这些 都符合 I2C 协议。 3.1.5 系统控制电路设计在 EZ-USB 芯片中有一 8051 核,用该 8051 实现对图象采集芯片的控制。由 于图象采集芯片的控制信号较多,另外图象采集芯片内部没有 RAM,采集一帧图 象要及时保存到外部 RAM,这时的波特率较大,8051 的速度不能满足要求,并考 虑到要对图象数据进行实时运算,此时在 USB 控制器和图象采集芯片之间加入一 片可编程器件(FPGA)能较好的解决这个问题。用 FPGA 进行地址扩展,实现图 象数据的读写控制和图像采集芯片的控制,以及后续的视频图象处理。在本系统 中,我们采用了 Altera 公司的 ACEX1K50 芯片,它是一个 5 万门的 FPGA,这些 门数已经能够满足控制电路设计以及视频图象处理简单算法研究的要求。 FPGA 设计使用的开发环境为 Altera 公司的 MaxplusII。设计时采用层次结构 混合输入的方法,即结合原理图、VHDL 进行设计的输入,提高设计与调试的效 率。首先根据功能和时序的要求按层次设计各个模块,并进行综合及功能仿真。 功能无误后,由软件在人工干预下进行 FPGA 的布局布线,生成带时延参数的仿 真数据文件。再次进行仿真,确保无竞争冒险及毛刺,最后生成设计文件,下载 到 FPGA 进行下一步的硬件测试。 本系统中,对于 OV6620 我们采用的是帧曝光控制。当快门信号 FREX=1 时, 第三章 USB 接口的视频图象采集系统的设计及实现27OV6620 将迅速地预存象素阵列, 此时 OV6620 获取图象; 当 FREX=0 时, OV6620 将逐行地释放视频数据流。但是必须注意的是 FREX 要保持足够长时间的有效值, 以确保 OV6620 完成图象的获取。帧曝光控制时序图见图 3.9。图 3.9帧曝光控制时序图FPGA 的设计顶层原理图如图 3.10 所示。整体结构由时钟信号输出、控制信 号输出、数据缓冲、地址产生器等模块构成。该电路的工作原理如下: ⑴ 首先,由 USB 控制器产生 FREX 信号,图象采集芯片开始工作,时钟信 号输出模块输出有效时钟信号作为外部 RAM1 的地址计数器时钟;控制信号输出 模块产生 RAM1 的写信号 WR1,图象数据写入 RAM1 中。当图象数据往 RAM1 写的同时,USB 控制器产生快读信号 frd 作为 RAM2 的地址计算器时钟;控制信 号输出模块产生 RAM2 的读信号 RD2,图象数据从 RAM2 经 USB 控制器传到主 机。 ⑵ 往 RAM1 中传完一帧图象后,USB 控制器仍在读 RAM2 中的数据,这时 控制信号输出模块产生等待信号使 RAM1 处于等待状态。 ⑶ USB 控制器读完 RAM2 中的数据后马上往 RAM2 中写入下一帧图象数据, 时钟信号输出模块产生有效时钟信号作为 RAM2 的地址计数器时钟;控制信号输 出模块产生 RAM2 的写信号 WR2。当图象数据往 RAM2 写的同时,USB 控制器 产生快读信号 frd 作为 RAM1 的地址计算器时钟;控制信号输出模块产生 RAM1 的读信号 RD1,图象数据从 RAM1 经 USB 控制器传到主机。 ⑷ 当 RAM2 中写完一帧图象后, USB 控制器仍在读 RAM1 中的数据, RAM2 处于等待状态。RAM1 中的数据被读完后紧接着往 RAM1 中写下一帧数据。 如此循环往复,以达到图象的连续传输。 28高速串行总线(USB)视频图象采集和处理系统研究、设计与实现RAM1 地址产生器 FREXOV6620 象素时 钟信号 (PCLK)时钟信号输出 模块控制信号 输出模块RAM1,RAM2 快读信号(frd) 数据缓冲器 数据输出选择RAM2 地址 产生器图 3.10系统控制电路顶层图时钟信号输出模块 时钟信号输出模块主要是用来产生有效的视频时钟信号。由图 3.9 可以看出, 两个 VSYNC 有效信号之间表示是一帧图象, 所以我们可以利用 VSYNC 的上升沿 作为一帧图象数据的开始。如图 3.11 所示,当 HREF 信号为高时,OV6620 输出 有效图象数据。所以我们可以用 HREF 和 PCLK 的“与”信号作为图象数据的有 效信号,也就是时钟信号输出模块的输出信号。图 3.11图象数据时序图 第三章 USB 接口的视频图象采集系统的设计及实现29控制信号输出模块和地址产生器 控制信号输出模块主要是用来产生整个电路的控制信号。主要包括:RAM1 和 RAM2 的读写信号;计数器的计数和清零信号等等。 RAM1 和 RAM2 的地址产生器是由两个计算器来实现的,由于一帧图象的大 小为 352×288=101376,所以我们定义这两个计算器的模为 101376。3.2 视频图象采集系统的软件开发开发一个 USB 设备,软件设计是必不可少的,USB 应用系统软件设计分为三 部分:USB 外设端的固件(Firmware) 、主机操作系统上的客户驱动程序以及操作 界面程序。界面程序通过客户驱动程序与系统 USBI(USB Device Interface)进行通 信, 由系统产生 USB 数据的传送动作, 固件则响应各种来自系统的 USB 标准请求, 完成各种数据的交换工作和事件处理。本节主要介绍固件代码及客户端应用程序 的设计,而 USB 设备驱动程序的设计将在下一章详细介绍。 由于图象数据自身的格式以及 USB 同步传输和批传输都适合传输大量数据, 但是同步传输设备和进程的同步设计有较大的难度,且它不提供错误检查机制, 所以我们采用了批传输模式。 3.2.1 系统固件代码设计设备固件是设备运行的核心。USB 视频采集系统设备的固件主要由主程序、 USB 总线枚举、功能子程序、帧传送子程序和 I2C 子程序等组成,其功能框图如 图 3.12 所示。该 USB 设备的端点 0 被设置成“控制”传送方式,端点 2 被设置 成批传送方式。帧传送子程序 帧传送中断 主程序 返回 返回 传送数据到 USB总线 I2C和 其它控制 USB总线枚举 程序调度 “帧传送” “输出” “配置” “输入”读帧数据 缓冲区图 3.12固件(Firmware)代码的功能框图1.主程序主要完成:堆栈设置,各种工作状态标志,各种变量的 RAM 空间 30高速串行总线(USB)视频图象采集和处理系统研究、设计与实现分配和 USB 模块的初始化,端点 0 的 TX 和 RX 中断允许,数字 Camera 芯片各寄 存器初始值的设定,设置主程序的工作指示灯以及循环等待中断的产生等。 2.USB 总线枚举子程序:该部分主要完成 USB 主机与 USB 设备之间的“连 接”过程。即响应 USB 主机用缺省地址&B&的访问,送设备类型、版本 号、端点设置和参数设置等给 USB 主机。接收 USB 主机分配的唯一的地址值,接 收 USB 主机确定的一种设备配置参数等。 3.功能子程序:该程序主要包括功能子程序 1 和功能子程序 2 两个部分。主 要功能包括判断中断源是哪个端点产生的,然后调相应的中断服务子程序。即首 先检查中断源是哪个端点产生的,然后检查是“配置” 、 “输入”还是“输出”? 若是端点 0 的“输出”包,则固件将要检查 USB 主机送来的命令是哪一类命 令,以方便回答。若是“输入”包,固件将要检查它的“状态阶段” ,在“数据阶 段”中,固件将要按照 USB 主机的要求回答(送端点设置和参数设置等给 USB 主 机) 。 若是端点 2 的“输出”包,它主要是 USB 主机送给 USB 设备的命令或数据, 若是“输入”包,则主要是 USB 设备回应 USB 主机的消息。它们包括:对数字 Camera 芯片寄存器值和 USB 模块值的修改;USB 设备传送或接收 USB 主机的参 数或状态。 4.帧传送子程序:该部分程序主要是利用端点 2 的批传输方式来传送大量的 数据。具体考虑如下: (1)USB 视频采集设备要求较高的传输速度, (2)需要考 虑 EZ-USB AN2131Q 的运算速度。 5.I2C 子程序:主要是用来控制数字 Camera 芯片的。即控制输出图象数据的 色度,亮度,对比度,曝光时间和格式等。 由于 EZ-USB AN2131Q 芯片采用了一种基于 RAM 的方案,实现数据格式转 换的程序并未固化在芯片中,是一种软硬结合的固件代码(Firmware) 。当设备插 入 USB 接口时,主机对设备进行了轮询,获取了设备的 ID 号后,系统程序将 Firmware 下载到芯片内部,执行数据格式的逻辑转换。 开发工具中的 Firmware 框架是自动生成的,USB 外设开发者根据外设功能具 体要求,选择感兴趣的函数逐一填写函数体。与图 3.12 相对应的固件代码的程序 流程框图如图 3.13 所示。 开始是一段初始化程序,当外设检测到一个 Setup Packet 时,框架启动调度程 序,由调度程序按顺序反复执行以下三个任务。 ⑴ TD_Poll()中调用实现外设主要功能的用户子程序。 ⑵ 决定设备是否有未处理完的任务。如果有,则解析收到的命令,然后给主 机相应的回复。 ⑶ 决定 USB 核心是否有 USB 悬挂事件。如果是,调度程序调用用户子程序 第三章 USB 接口的视频图象采集系统的设计及实现31TD_Suspend(),如返回 TRUE,处理器挂起,当检测到唤醒事件,子程序继续 运行;如返回 FALSE,程序继续运行。 其它函数的含义为: TD_Init():用于初始化 Firmware 的全局状态变量; TD_Resume():此函数用于响应外部恢复事件,使器件恢复正常工作状态。加电 Reset初始化 状态变量调用 TD_Init()中断使能检测到 SETUP包?NO延时1s 再枚举YES 调用 TD_Poll() NO检测到 SETUP包?YES分析并执行 设备请求NOUSB总线悬空?YES调用 TD_Suspend()TRUESuspend处理器FALSE调用 TD_Resume()图 3.13Firmware 代码的流程框图3.2.2快速传输方式的实现为了达到图象数据的快速传输,在本系统中,我们采用了 EZ-USB 的快传方 式,即在 TD_Poll()函数中实现快传,这是固件代码设计的关键部分。 8051 是用 MOVX 指令来实现数据的传输。见图 3.14。8051 把 RAM 的地址存入 地址指针(DPTR) ,然后执行 MOVX 指令在累加器和 DPTR 所指的地址间传输数据, 符号@表明 8051 是执行间接寻址。 EZ-USB 监测累加器和 FIFO 之间的数据传输。如果使能批传输的快传方式 (FBLK=1 在 FASTXFR 寄存器中) , 则对 FIFO 的读操作或写操作都会使 EZ-USB 直接 把数据连接到 EZ-USB 数据线上 D[7..0],同时产生 frd/fwr 信号。一个 MOVX 指令 产生一个 frd/fwr 信号。图 3.15 给出了快读的数据流图。 32高速串行总线(USB)视频图象采集和处理系统研究、设计与实现图 3.148051 MOVX 指令的执行图 3.15快读方式此外,对于批传输,EZ-USB 提供了一个特殊的自增加(auto-incrementing)数 据指针 AUTOPTRH/L。8051 把 16 位 RAM 地址装入到 AUTOPTRH/L 寄存器中, 然后把 RAM 当一个 FIFO 来进行寻址。 下面给出了 EZ-USB 快速传输图象数据的 8051 代码,为了节省开销,加快数 据传输的速率,我们采用汇编语言来编写: mov dptr,#PORTCACFG movx a,@dptr orl a,#b movx @dptr,a mov dptr,# FASTXFR mov a,#b movx @dptr,a Init: mov dptr,#AUTOPTRH mov a,#HIGH(IN2BUF) movx @dptr,a ;AUTOPTRH/L 指向 IN2BUF ;配置批传输快传模式 ;FBLK=1 ;配置快读方式 第三章 USB 接口的视频图象采集系统的设计及实现33mov dptr,#AUTOPTRL mov a,#LOW(IN2BUF) movx @dptr,a mov dptr,#AUTODATA mov r7,#8 loop1: movx @dptr,a movx @dptr,a movx @dptr,a movx @dptr,a movx @dptr,a movx @dptr,a movx @dptr,a movx @dptr,a djnz r7,loop1 3.2.3 主机应用程序的设计 ;循环次数 ;把数据送到 IN2BUF 中主机应用程序是数据实时采集系统的中心,采用 VC++ 6.0 编程。其功能主要 有:开启和关闭 USB 设备、检测 USB 设备、设置 USB 数据传输管道(pipe) 、设 置数据采集端口、实时从 USB 接口采集数据、显示并分析数据。USB 视频采集系 统程序主框图如图 3.16 所示。启动USB设备失败检测USB设备成功设置设备参数显示错误信息请求上传数据包获得有效数据包?Y NN报告数据丢失是否读完一帧图象?Y存储,显示图象等待下一帧图象图 3.16应用程序主框图 34高速串行总线(USB)视频图象采集和处理系统研究、设计与实现1.启动 USB 设备。在 WIN32 编程中可以采用 CreateFile( )函数来打开 USB 设备,并且返回一个指向 USB 设备的句柄。该函数定义如下: HANDLE LPCTSTR DWORD DWORD DWORD DWORD ); ⑴ lpFileName:指向一个字符串,该字符串指定欲打开外设的名称。 ⑵ dwDesiredAccess:指定访问该外设的方式,包括:只读方式,只写方式,读 写方式和设备查询方式。 ⑶ dwShareMode: 设置一个标志位来表明外设如何被共享。 如果 dwShareMode 为 0, 则外设不能被共享,同时外设也不能被打开。 ⑷ lpSecurityAttributes:指向一个具有安全属性的结构,该结构决定返回的句 柄能否被子程序继承。 ⑸ dwCreationDisposition:指定如何去产生文件。 ⑹ dwFlagsAndAttributes:指定文件的属性及文件的标志。 ⑺ hTemplateFile:指定一个具有只读方式的模板文件的句柄,该模板文件提供 了文件的属性和文件的扩展属性。 本系统中采用如下的程序来打开 USB 设备。 OpenDriver(HANDLE* phDriver, CString devname) { SECURITY_ATTRIBUTES security.nLength = sizeof(security); security.lpSecurityDescriptor = NULL; security.bInheritHandle = CString completeDeviceName = (CString)&\\\\.\\& + *phDriver = CreateFile( completeDeviceName, GENERIC_WRITE, FILE_SHARE_WRITE, &security, OPEN_EXISTING, CreateFile( lpFileName, dwDesiredAccess, dwShareMode, dwCreationDisposition, dwFlagsAndAttributes,LPSECURITY_ATTRIBUTES lpSecurityAttributes,HANDLE hTemplateFile 第三章 USB 接口的视频图象采集系统的设计及实现350, NULL); return (*phDriver != INVALID_HANDLE_VALUE); } 2.图象数据的传输。 把数据从 EZ-USB 传进 PC 主机是通过 DeviceIoControl( ) 函数实现的。 BOOL DeviceIoControl( HANDLE DWORD LPVOID DWORD LPVOID DWORD hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize,LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped ); ⑴ hDevice:调用 CreateFile( )函数打开外设驱动程序时,返回的外设句柄。 ⑵ dwIoControlCode:I/O 控制代码,指明了外设操作类型。本系统中可以是如下 几种类型: IOCTL_EZUSB_GET_DEVICE_DESCRIPTOR(读操作描述符) , IOCTL_EZUSB_BULK_READ(批量读操作), IOCTL_EZUSB_BULK_WRITE(批量写操作) , IOCTL_EZUSB_ISO_READ(等时读操作) , IOCTL_EZUSB_ISO_WRITE(等时写操作), IOCTL_EZUSB_SETINTERFACE(接口设置操作) , IOCTL_EZUSB_GET_PIPE_INFO(获取管道信息操作)等等。 ⑶ lpInBuffer:指向输入缓冲的指针,存放 PC 机传给外设的数据。 ⑷ nInBufferSize:输入缓冲区的大小,以字节记。 ⑸ lpOutBuffer:指向输出缓冲区的指针,存放 PC 机从外设接受的数据。 ⑹ nOutBufferSize:输出缓冲区的大小,以字节记。 ⑺ lpBytesReturned:该操作实际返回的字节数。 ⑻ lpOverlapped:指向用于异步操作的结构的指针。 本系统中我们采用的是端点 2 的批传输方式,管道号设置为 1,见如下程序。 36高速串行总线(USB)视频图象采集和处理系统研究、设计与实现UINT ReadData(LPVOID pParam) { …… BULK_TRANSFER_CONTROL ULONG nB BOOLEAN bR HANDLE hD …… btc.pipeNum = 1; bResult = DeviceIoControl (hDevice, IOCTL_EZUSB_BULK_READ, &btc, sizeof (BULK_TRANSFER_CONTROL), m_Buffer, m_StrBuffer.GetLength(), (unsigned long *)&nBytes, NULL); …… } 3.图象的显示。由于我们采集的图象是 CIF 格式且是裸图象,所以可以采用 WIN32 的 RGB( )函数来显示图象。图 3.17 是我们采集到的图象。 COLORREF RGB( BYTE bRed, BYTE bGreen, BYTE bBlue ); ⑴ bRed:指定红颜色的强度。 ⑵ bGreen:指定绿颜色的强度。 ⑶ bBlue:指定蓝颜色的强度。 第三章 USB 接口的视频图象采集系统的设计及实现37图 3.17获取的图象视频采集系统基于外接 RAM 的方案,不但解决了数据传输的完整性,而且能 保持数字 Camera 芯片连续采集数据,保证了数字 Camera 芯片的最大传输速率。 综上所述,基于外接 RAM 的方案是一种稳定可行的解决方案,保证了数据的 完整性和连续性。 38高速串行总线(USB)视频图象采集和处理系统研究、设计与实现第四章 USB 接口驱动程序设计USB 设备的客户端驱动程序设计是开发 USB 外设的关键,而且 USB 的驱动 程序和以往的直接跟硬件打交道的 WIN95 的 VXD 方式的驱动程序不同, 它并不 直接与硬件通信,而是以创建和发送 URB 请求块(USB Request Block ,URB)的 形式把命令传递给 Windows98(2000)操作系统所提供的 USB 总线驱动程序,由总 线驱动程序来完成与硬件的直接交互。 USB 设备驱动程序必须遵循由 Microsoft 为 Windows98 及其以后版本所定义的 Win32 驱动程序模型。 这些驱动程序就是 WDM (Windows 设备驱动程序模型) ,它的扩展名为.sys(其它文件类型也可以使用.sys 扩展名)。本章详细介绍 USB 接口驱动程序的设计思想、流程以及实现方案。4.1WDM 驱动程序模型在 WDM 驱动程序模型中,每个硬件设备至少有两个驱动程序。其中一个驱 动程序我们称为功能(function)驱动程序,通常它就是你认为的那个硬件设备驱动 程序。它了解使硬件工作的所有细节,负责初始化 I/O 操作,有责任处理 I/O 操作 完成时所带来的中断事件,有责任为用户提供一种设备适合的控制方式。 另一个驱动程序我们称为总线(bus)驱动程序。它负责管理硬件与计算机的连 接。 例如, PCI 总线驱动程序检测插入到 PCI 槽上的设备并确定设备的资源使用情 况,它还能控制设备所在 PCI 槽的电流开关。 有些设备有两个以上的驱动程序。我们使用术语过滤器驱动程序(filter driver) 来描述它们。某些过滤器驱动程序仅仅是在功能驱动程序执行 I/O 操作时进行监 视。多数情况是:硬件或软件厂商利用过滤器驱动程序修改现有功能驱动程序的 行为。上层过滤器驱动程序在功能驱动程序之前看到 IRP,它们有机会为用户提供 额外的特征,而功能驱动程序根本不知道。有时,一个上层驱动程序可以修正功 能驱动程序或硬件存在的毛病或缺陷。低层过滤器驱动程序在功能驱动程序要向 总线驱动程序发送 IRP 时看到 IRP。在某些情况下,例如当 USB 设备插入 USB 总 线时,低层过滤器驱动程序可以修改功能驱动程序要执行的总线操作流。 WDM 功能驱动程序通常由两个分离的执行文件组成。一个文件是类驱动程 序,它了解如何处理操作系统使用的 WDM 协议(有些协议相当复杂),以及如何管 理整个设备类的基本特征。USB 照相机类驱动程序就是一个例子。另一个文件称 为迷你驱动程序(minidriver), 它包含类驱动程序用于管理设备实例的厂商专有特征 例程。类驱动程序和迷你驱动程序合在一起才成为一个完整的功能驱动程序。 可以把一个完整的驱动程序看作是一个容器,它包含许多例程,当操作系统 第四章 USB 接口驱动程序设计39遇到一个 IRP 时,它就调用这个容器中的例程来执行该 IRP 的各种操作。图 4.1 表现了这个概念。有些例程,例如 DriverEntry 和 AddDevice,还有与几种 IRP 对 应的派遣函数将出现在每一个这样的容器中。需要对 IRP 排队的驱动程序一般都 有一个 StartIo 例程。执行 DMA 传输的驱动程序应有一个 AdapterControl 例程。大 部分能生成硬件中断的设备,其驱动程序都有一个中断服务例程(ISR)和一个推迟 过程调用(DPC)例程。驱动程序一般都有几个支持不同类型 IRP 的派遣函数,其中 三个派遣函数是必须的。所以,WDM 驱动程序开发者的一个任务就是为这个容器 选择所需要的例程。DriverEntry AddDevice StartIo OnInterrupt DpcForIsr AdapterControl DispatchPnp DispatchPower DispatchWmi DispatchRead DispatchWrite 必须的驱动程序例程 处理请求队列需要包含StartIo 设备产生中断需要包含中断服务和DPC例程 DMA例程设备需要包含AdapterControl例程 可选的IRP派遣例程图 4.1WDM 驱动程序“容器”中的内容4.2USB 视频图象采集系统驱动程序的分析USB 总线的成功关键是使用户感到了使用 USB 设备的方便。即插即用(PnP) 概念的使用使某些硬件的安装过程得到了简化。然而,那些遗留设备如串行口、 并行口、键盘,和麦克风的配置问题仍然折磨着用户。USB 总线通过提供一种能 连接大量自识别中低速设备的统一连接方法解决了这一问题。 与传统 PC 总线(如 PCI 总线)设备的驱动程序相比, USB 设备驱动程序从不直 接与硬件对话。相反,它仅靠创建 URB(USB 请求块)并把 URB 提交到总线驱动程 序就可完成硬件操作。可以把 USBD.SYS 看作是接受 URB 的实体,向 USBD 的 调用被转化为带有主功能代码为 IRP_MJ_INTERNAL_DEVICE_CONTROL 的 IRP。然后 USBD 再调度总线时间,发出 URB 中指定的操作。 40高速串行总线(USB)视频图象采集和处理系统研究、设计与实现对于 USB 设备来说,开发驱动程序是一件比较复杂的事情。通常驱动程序要 实现如下的功能:● ● ● ● ● ● ● ● ● ● ●设备的初始化。 创建和删除设备。 处理 WIN32 打开和关闭文件句柄的请求。 处理 WIN32 输入/输出(I/O)请求。 串行化对设备的访问。 访问硬件。 调用其他驱动程序。 取消 I/O 请求。 超时 I/O 请求。 处理一个可热插拔的设备被加入或删除的情况。 处理电源管理请求。Pnp.cpp Dispatch.cpp Power.cpp USBcamera.cpp图 4.2 表示了一个 USB 设备驱动程序的功能如何划分成不同的模块。Init.cpp初始化创建设备 卸载,删除设备即插即用添加,停 止,删除设备 获得硬件资源分发例程电源管理USB驱动程序接口图 4.2USB 设备驱动程序的组成部分由上图可以看出,我们把 USB 视频采集系统的驱动程序分为了五大模块,它 们分别完成不同的功能,其中 Init.cpp 模块、Pnp.cpp 模块、Dispatch.cpp 模块和 Power.cpp 模块是 WDM 设备驱动程序所需要的,而 USBcamera.cpp 模块是为了实 现 USB 驱动程序接口而设计的。 在本节我将介绍前四个模块的具体设计, 对于 USB 驱动程序接口模块的设计我将在下一节介绍。此外,为了以后说明的方便,我们 将 USB 视频采集系统驱动程序命名为 USBWdm。 4.2.1 初始化创建设备(Init.cpp 模块)一个驱动程序可以被多个类似的硬件使用,但驱动程序的某些全局初始化操 作只能在第一次被装入时执行一次。而 DriverEntry 例程就是用于这个目的。 DriverEntry 是内核模式驱动程序主入口点常用的名字。在 DriverEntry 中,主要工 作是在传递的 DriverObject 中存储一系列的回调例程指针, DRIVER_OBJECT 结构 由操作系统用于存储与驱动程序有关的任何信息。以后使用一个分开的结构存储 每个设备的信息。 在 USBWdm 中,DriverEntry 设置整个系统的回调例程,当添加一个新设备和 第四章 USB 接口驱动程序设计41IRP 需要发送到驱动程序时,内核调用这些例程。 最后,DriverEntry 返回一个 NTSTATUS 值 STATUS_SUCCESS。几乎所有的 驱动程序例程都必须返回一个 NTSTATUS 值。 下面给出了 USBWdm 的 DriverEntry 例程。 NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { NTSTATUS ntStatus = STATUS_SUCCESS; …… DriverObject-&MajorFunction[IRP_MJ_CREATE] = USBcamera_C DriverObject-&MajorFunction[IRP_MJ_CLOSE] = USBcamera _C DriverObject-&DriverUnload = USBcamera _U DriverObject-&MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBcamera_ ProcessIOCTL; DriverObject-&MajorFunction[IRP_MJ_PNP] = USBcamera _DispatchP DriverObject-&MajorFunction[IRP_MJ_POWER] = USBcamera _DispatchP DriverObject-&DriverExtension-&AddDevice = USBcamera _PnPAddD …… } 在 WDM 驱动程序中,DriverUnload 例程的作用就是释放 DriverEntry 例程在 全局初始化过程中申请的任何资源,在 USBWdm 中它几乎没什么可做。 4.2.2 分发例程(Dispatch.cpp 模块)驱动程序的 DriverEntry 例程必须设置一系列的回调例程来处理 IRP,表 4.1 列出常见的 Win32 设备 I/O 函数和他们对应的 IRP。 一个常见的 IRP 不能从用户态代码产生,内部 IOCTL IRP 只能从内核产生, 这允许驱动程序暴露一个不能从 Win32 使用的接口,这些内部 IOCTL 通常由通用 驱动程序使之可用。例如,USB 类驱动程序只接受内部 IOCTL 中的命令,他们不 支持普通的读和写。 “创建” 、 “读” 、 “写” 、 “关闭” 、IOCTL 和内部 IOCTL IRP 的处理程序通常称 为分发例程,因为它们常常仅执行 IRP 的一些初始处理,如检查所有的参数是合 法的,然后把 IRP 分发到驱动程序中的其余地方处理。IRP 通常需要串行处理,使 得驱动程序以一种安全的方式与硬件打交道。 42高速串行总线(USB)视频图象采集和处理系统研究、设计与实现 表 4.1 Win32 函数 CreateFile CloseHandle ReadFile WriteFile DeviceIoControl 常见的分发例程 驱动程序例程的基名称 Creat Close Read Write DeviceControlIRP 主功能代码 IRP_MJ_CREAT IRP_MJ_CLOSE IRP_MJ_READ IRP_MJ_WRITE URO_MJ_DEVICE_CONTROL这些基本例程中的处理并不是想象的那样直观,两个或更多的 IRP 分发例程 可能“同时”运行。在多处理系统中这

我要回帖

更多关于 全局描述符表gdt 的文章

 

随机推荐