Board logo

标题: USB驱动开发简介 [打印本页]

作者: linuxarm    时间: 2006-8-12 15:45     标题: USB驱动开发简介

USB设计分硬件和软件两部分。硬件包括电路的设计和固件程序(Firmware)的编写,通常用汇编或C语言;软件分USB设备驱动程序和USB客户软件。
1.硬件
根据设备的需求和USB芯片的性能,设计出相应的电路在USB开发器的仿真板上进行仿真实验。固件的编写可采用分块的方法,比如Main模块、Interurrupt模块、Dtable模块、Vector模块、Timer模块、Declare模块等。通过编译进行连接以.hex文件的格式写到芯片里面去。仿真成功后即可直接应用于设备。
2.软件
(1)USB驱动程序接口
 
Windows98及2000通过允许USB设备驱动程序栈通信来支持USB。在USB驱动程序和USB驱动程序栈之间是USB驱动程序接口(USBDI),这种通信以WDM结构实现的。Usbhub.sys是USB集线器驱动程序。当Usbd.sys枚举每个USB主机控制器中的根结点集线器时被加载。Usbd.sys是类USB驱动程序。Uhcd.sys(通用主机控制驱动程序)以及Ohcd.sys(开放主机控制驱动程序)是USB主机控制器驱动程序。Hidclass.sys接收和发送到小驱动程序的HID报告。Hidusb.sys通过USB接收和发送HID报告。当检测到USB总线时,PCI枚举器加载USB栈驱动程序部分,并加载至少一个核心组件。
(2) USB驱动程序和USB客户程序      
USB驱动程序的编写与硬件相关,属于核心模式。微软的DDK在这方面提供了较为详细的说明。比起VxD,WDM在硬件方面层次更为清楚和直观些。下面是一段驱动程序的入口函数:
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
NTSTATUS status = STATUS_SUCCESS;
// Export other driver entry points...
 DriverObject->DriverUnload = USBUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE] = USBCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = USBClose;
DriverObject->MajorFunction[IRP_MJ_READ] = USBRead;
DriverObject->MajorFunction[IRP_MJ_WRITE] = USBWrite;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBDeviceControl;
RegisterForPnpNotification(DriverObject);
return status;
}
USB的客户程序实际上是对客户端设备映像的操作,这些映像由USBD或HCD产生,属于用户模式。在DDK中存在着一组叫做USBDI函数的API函数集,该函数集包括了传输函数、管道(Pipe)函数、设备配置函数及其他函数。应用这些函数可编写支持任何USB兼容设备的USB驱动程序和客户程序。其中,管道(Pipe)是USB设备驱动程序建立的逻辑通信通道。
3.设计例程
笔者采用了原Anchor公司的EZ-USB AN2131-DK001,调试软件采用KeilPk51, 基于游戏操纵杆采用C语言和汇编语言相结合,创建一个关于HID设备的固件的工程,对其编译成功后进行连接/定位,用调试器调试后以16进制的形式加载在开发系统中进行仿真。控制方式上以中断方式为主,查询间隔为无穷大。由于是HID设备,不必去写相应的驱动程序,操作系统已经有了HID和Audio的驱动。
试验电路采用Anchor芯片的端口A进行LED的切换。
在主机方面,用VisualC++6.0写了一个应用程序,其访问设备通过GPD(General-purpose)和芯片进行通信。主要是以下三个函数:
·SetupDiGetClassDevs()
·SetupDiEnumDeviceInterfaces()
·SetupDiGetDeviceInterfaceDetail()
在固件方面,开发系统有两个固件文件PERIPH.C和FW.C包含了芯片的控制代码,笔者主要写了一些外设的查询代码。大部分情况下,采用汇编语言写固件要好一些。
将最后的编译好的.hex文件写到仿真板的EEPROM上进行测试,
达到预定的效果,为笔者下一步进行虚拟现实中的力反馈设备的研究提供了大量的经验基础。
    USB设计是非常艰幸的一件事,需要设计者具有良好的软件和硬件知识。通常的设计周期为1年左右。
 

作者: ree7178    时间: 2007-12-11 10:39     标题: 回复:(linuxarm)USB驱动开发简介

我想学习USB驱动相关问题 请问你有QQ或者邮箱吗?谢谢了

作者: usbdll    时间: 2008-11-13 19:16

www.usbdll.com USB驅動方案设计(仅应用于WINDOWS,Vista,XP/NT2000,98系统)

* USB 接口描述符为纯Bulk, 或纯中断类,或通用与中断复合类 需要自定义驱动支持 

* USB 接口描述符为纯mass storage, 或纯音频类,HID ,视频类(OS SP2以上)

不需要自定义驱动支持,Windows自身支持  

* 特别时候,要虚拟设备支持.如纯通用类,再加上一个HID虚拟设备

如果仅仅是用AP识别自定义IN 通道功能,Winwods OS 不能保证顺利识别此消息.因为其他

线程,会有类似行为.,定义为虚拟设备,保证了是设备发出指令,Driver 自然优先安排   

* 驱动需要WHQL硬件兼容测试

* DDK, Driverstudio 开发 driver

USB接口软件开发商之一

详情: www.usbdll.com
作者: chuxuezhe    时间: 2009-2-1 17:24

USB驱动开发简介
谢谢
作者: zhoujiaqin    时间: 2009-8-11 17:26

外包:Windows USB Audio 2.0(音频)驱动(68013A

Windows 的驱动越简单越好,但要支持ASIODirectSound

硬件:

68013A->FPGA

详细:

需要用68013A FPGA设计一个USB->SPDIF的转换器。

Input((输入):USB2.0 音频数据(24比特/192kHz

Output((输出):SPDIF音频数据(24比特/192kHz

请高手们帮忙帮忙了,如能和我一起开发就最好,或指点一下如何开始也行,那就太感谢了!

电邮:jiaqinzhou@yahoo.cn


作者: 东东101    时间: 2009-11-11 17:21

1:host--使通用的usb 键鼠接口我们的mcu产品,需要用usb host control ic来做,
2:device--把spi的或ps/2的鼠标键盘转换为usb的,使用CY7C63813;其中spi是指由mcu通过spi口发来的模拟键鼠的信号




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0