0570-456062716
0570-456062716
时间:2024-11-09 点击数:
由于较好的性能、便宜的价格和灵活性便利的特性,USB摄像头于是以被普遍的构建到嵌入式系统中。例如,通过USB摄像头WinCE系统可以很便利地获得动态图像,这对某些拒绝动态图象监控的嵌入式系统是一个很不俗的自由选择。
但是由于嵌入式硬件平台的多样性,以及WinCE对USB设备驱动研发只获取了底层反对,再行再加许多摄像头厂商仍未获取WinCE下的USB摄像头驱动,这对初级开发人员在研发WinCEUSB摄像头程序时是一个难题。 前段时间,公司委派我负责管理一个嵌入式项目,项目拒绝是在WinCE平台上构建USB摄像头驱动和视频收集程序。
这个项目的关键是要构建USB摄像头驱动,并高效的把摄像头设备展开初始化以获得一幅原始的图像。幸而我以前研发过WinCEUSB的主从设备的驱动程序。但虽然如此,我还是花上了一些时间来调整系统的稳定性和可靠性。
在这里我共享在这次项目实践中获得的经验和教训,期望大家能少走弯路。 一。
什么是USB设备驱动程序研发? 随着USB设备的普及,USB设备驱动研发在嵌入式系统显得更加最重要了。为了反对有所不同类型的硬件可以相连到WinCE平台上,微软公司获取了具备自定义模块的流模块驱动程序模型。
WinCE的USB外围设备一般是用于流模块驱动程序。流模块驱动程序是指通过系统获取的文件系统API与应用程序交互;WinCE内核系统不会通过设备管理器来已完成对流模块驱动程序的读取、修理等管理工作;而流模块驱动程序则不会通过调用USBD模块获取的接口函数构建与底层USB设备通信。因此,在展开USB设备驱动程序研发之前,我们必需再行理解USB设备驱动的结构和分类。
(1)主机与USB摄像头的通讯结构 USB摄像头驱动程序主要是利用系统获取的底层模块配备设备和摄像头设备展开通讯。因此,WinCE的USB摄像头驱动分成两层:USBClient设备驱动程序和底层的WinCE函数构建层。
而底层的函数层本身又由两部分构成,即标准化串行总线驱动程序(USBD)模块和较低层的主控制器驱动程序(HCD)模块。HCD负责管理最底层的处置,USBD模块构建较高的USBD函数模块。因此,USB摄像头驱动主要是利用USBD接口函数和外围USB摄像头做事。
一般来说,主机和USB外设之间的通讯是由在主机末端通过USBD模块和HCD模块用于的PIPE采访一个标准化的逻辑设备来已完成。也就是说,USBD和HCD是一组抽象化出来用作采访USB设备的逻辑模块,它们主要是负责管理USB外设的相连、读取、去除、数据传输和标准化的配备。其中HCD是由主机掌控和驱动的,是为USBD获取底层的功能采访服务。而USBD则是由USB总线驱动的,坐落于HCD的上层,是利用HCD的服务获取较高层次抽象化的功能。
由于HCD和USBD都是面向完全一致的逻辑设备模块,因此如果嵌入式系统中享有多种USB物理外设的话,那么就必须有唯一对应的外设驱动程序,也就是要有最上层的PIPE所相连的物理设备和USB设备驱动程序。有了对这个结构的了解,那么我们在展开USB设备驱动程序研发时首先要写的就是最上端的USB摄像头客户端驱动程序,在WinCE的样例程序中它也被称作USBClientDriver。它是工作于USBD之上,所以实质上我们的工作就变为了利用USBD获取的模块针对特定的物理设备来已完成USB设备驱动程序。
本文来源:半岛·BOB官方网站-www.mpolash.com