和网卡,交换机等网络设备的驱动不同,USB驱动里对协议的体现是非常明显的。前者因为体系太庞大,所以采用严格分层方式,所以其驱动被定义在物理层等偏下的层次,主要负责数据通道的建立,和信包的收发。而USB就不是如此,它不仅要管信包的收发,还要解决信包的组织等等。因此USB的驱动必须严格按协议所要求的操作流程来写。目前的USB1.1和USB2.0从USB 的HOST,根HUB及device的硬件组成到通讯过程都写的非常详细明确。不仅有包的组织连寄存器的定义与设置都有相关规定,而USB HOST芯片提供商也基本是遵从它的。但它过于庞大,所以依协议从头写一个USB驱动工作量太大了。我不知你是在什么平台上开发的,我是在Linux下开发的所以我参照了Linux的源码和Vxworks的源码,在此基础上实现了EHCI驱动。
驱动大致是linux/drivers/usb/usb.c,linux/drivers/usb/hub.c,linux/drivers/usb/hcd.c和自己开发的ehci.c文件。前面三个文件最后编成usbcore.o。这只是host的驱动,devices的驱动你可以参照其具体的源码来改,如U盘,我改的是usb-storage.c
驱动的流程非常复杂,至少是我目前碰到过的最复杂的一个外设驱动。代码的追踪的进入方向是三个方面进行。Host & Bus initialize,root hub initialize,还有devices initialize。还是要花不少时间的。
这里还要注意的是,普通PC平台USB Host是作为一个字符设备挂载在PCI总线的。而很多嵌入式系统则不是,所以针对自己的硬件平台要去掉这部分。
PCI总线本身是一套复杂的规范,USB对其的应用仅是一个数据通道,在在PC机上CPU是通过PCI总线和大多数外围设备进行通讯,USB的HOST也就依此规范做。但嵌入式设备上由于系统的精简,建立通讯通道可以用其他更为简单灵活的方式。如LPC总线等(我的板子上用的就是它)。好像三星的2410上也不是采用PCI。当然从规范化角度用PCI做会好些,但工作量反而加大了不少。所以根据具体的硬件平台可以更灵活的采用具体的解决方法。
相关推荐
- 本例旨在通过Platform Builder 4.2中的示例代码来构建一个USB存储类驱动(USB Mass Storage Class Driver),以实现对USB存储设备的基本读写功能。 2. **步骤**: - 首先,在Platform Builder中插入示例源代码...
7. **实例分析**:"usb驱动赵老师给例"可能是一个教学案例或者实际项目的源代码,包含了上述概念的实际应用。通过分析这个例子,学习者可以更好地理解和实践8051F320的USB编程,包括如何初始化USB控制器、设置中断、...
USB2.0开发板是一种用于测试、实验和学习USB接口技术的硬件平台,它通常包含一个主控制器芯片,如在本例中提到的CY7C68013A。这款开发板允许工程师和学生探索USB协议,进行设备驱动编写,以及对USB设备的硬件设计...
2. **协议处理**:驱动程序理解并执行ISP协议,该协议定义了如何向微控制器发送编程命令和数据。 3. **错误检测和恢复**:在传输过程中,如果发生错误,驱动程序应能检测到并尝试恢复,确保编程过程的可靠性。 4. **...
【标题】"USB-RAM.zip" 提供的内容主要围绕STM32CubeMX工具在实现USB挂载内存作为虚拟U盘的应用。...此外,还需要掌握相应的嵌入式编程技巧,如中断处理和内存管理,以确保USB虚拟U盘的稳定性和性能。
类似的,对于其他按键,转换表提供了它们在USB HID协议和PS/2协议之间的对应关系,这对于开发兼容性软件或硬件驱动至关重要。例如,对于“1!”键,其HID使用ID为1E,而在PS/2扫描码中,按下和释放码分别为02和82以及...
斑马Zebra P520i是一款专业级的桌面式卡片打印机,...记住定期更新驱动程序以保持最佳性能和兼容性。此外,对于斑马P520i这样的专业打印机,了解其功能特性,如分辨率、打印速度、耗材类型等,也是保证高效打印的关键。
以USB JoyStickMouse为例: - **硬件操作层**:这一层主要关注与硬件交互的部分,如寄存器操作和内存操作。这部分代码直接与物理硬件打交道。 - **协议通用层**:此层实现了设备枚举的基本控制传输机制,对于所有...
**globalmem虚拟设备实例描述**:以globalmem为例,详细介绍其实现细节。 - **加载与卸载设备驱动**:展示如何编写加载和卸载函数。 - **读写函数**:解释如何实现设备的读写操作。 - **seek函数**:说明seek函数的...
以USB声卡为例,当它插入USB口时,系统会在USB设备枚举器下创建对应的设备接口实例。由于USB声卡通过USB总线传输音频数据,其通信确实依赖于USB协议。相应的,系统不会在HIDAUDIO(音频设备枚举器)下创建接口,因为...
它可能会讲解如何构建一个基本的USB闪存驱动器,涉及USB协议、存储芯片的选择、主控芯片的功能以及与计算机通信的方式等。在实例中,你可能会看到设计者是如何解决常见问题,如电源管理、数据保护、热插拔支持等。 ...
- **答案**: 这可能是由于不同操作系统下的USB驱动与系统兼容性问题所致。建议使用COM口下载以提高稳定性。 ##### 5. 程序容量限制 - **问题**: 程序的容量有多大?是否会因为程序过大而无法下载? - **答案**: ...
Linux内核包含了大量的驱动程序、文件系统、网络协议等模块,而Kconfig文件就像是这些模块的目录索引,它告诉开发者哪些功能是可用的,以及它们之间的依赖关系。通过阅读Kconfig,你可以选择性地启用或禁用特定功能...
3. **使用UML进行MDD**:Rhapsody允许用户使用UML进行模型驱动开发,这包括用例图、类图、序列图等多种UML图的创建,以可视化地表示系统的结构和行为。这一部分将详细介绍如何在Rhapsody中创建和操作这些模型。 4. ...
本篇讲解将以Ghost 6.0为例,介绍如何通过该工具快速安装系统。Ghost是一款著名的系统克隆与备份软件,常用于快速部署操作系统。相比手动安装,使用Ghost可以大大缩短安装时间,并且简化设置流程,适合非专业用户。 ...
以网络驱动模块的移植为例: - **源码获取**:从RedBoot的源码仓库中获取网络驱动模块的源代码。 - **依赖分析**:检查该驱动是否依赖于RedBoot的特定库或API,如果是,则需要一并移植这些库或API。 - **代码适配**...
以PIC24F"GC"系列为例,这些MCU提供了一系列模拟资源,如16位Σ-ΔADC、12位SARADC、10位DAC、充电时间单元(CTMU)、两个运算放大器、比较器以及片上参考电压源等。它们支持多种功耗管理模式,可以在深度睡眠模式下...