USB设备初始化与信号路径解析

需积分: 40 59 下载量 133 浏览量 更新于2024-08-06 收藏 1017KB PDF 举报
"本文主要介绍了在Linux环境下USB设备的初始化过程和USB设备、配置、接口、设置以及端点之间的关系,基于Linux内核版本2.6.35.3。" 在USB设备驱动架构中,当一个USB设备插入系统时,会经历一系列的初始化步骤来建立信号路径。这个过程主要包括以下几个关键环节: 1. **USB初始化**:当USB设备连接到主机后,驱动程序开始参与工作。首先,hub_driver被注册,这使得系统能够识别并处理USB集线器设备。 2. **hub_driver注册**:在这个阶段,hub_driver的注册是通过特定的机制完成的,确保系统知道如何与USB集线器进行通信。 3. **hub_probe()调用**:一旦hub_driver被成功注册,系统会尝试匹配到新插入的设备,并调用hub_probe()函数。这个函数负责初始化和验证设备是否是一个有效的USB集线器。 4. **hub_configure()配置**:在匹配和验证成功后,hubConfigure()函数被调用,用于配置USB集线器,包括设置设备的电源管理、端口状态检测等。 5. **填充中断URB(USB Request Block)**:URB是USB设备与主机之间数据传输的基本单位。在这个阶段,会填充中断URB,设置总线访问周期、回调函数等信息,以便于主机定期检查hub的状态变化。 6. **提交中断URB**:最后,中断URB被提交给USB主机控制器(HCD),这样主机就会按照设定的周期查询hub的状态,接收设备的中断信号,实现与设备的交互。 在理解USB设备的工作流程时,了解USB设备、配置、接口、设置和端点的关系至关重要: - **USB设备**:是最高级别的实体,可能包含一个或多个配置。 - **配置**:每个USB设备可以有多个配置,每个配置定义了设备的不同工作模式。 - **接口**:每个配置可以包含一个或多个接口,接口代表了设备的不同功能。 - **设置**:每个接口可以有多个设置,设置决定了接口的具体工作参数,如传输速率等。 - **端点**:是设备进行数据传输的实际通道,每个设置通常包含一个或多个端点,分为输入(IN)和输出(OUT)端点,且端点的传输类型(控制、批量、中断、等时)由其属性字段决定。 在Linux内核中,这些结构通过特定的数据结构如`usb_device_descriptor`、`usb_config_descriptor`、`usb_interface_descriptor`和`usb_endpoint_descriptor`来表示。例如,`bEndpointAddress`字段确定端点的方向,而`bmAttributes`字段则定义了端点的传输类型。每个端点维护一个urb_list,用于存储和管理与该端点相关的URB,主机控制器在接收到URB后会将其添加到对应的urb队列中。 USB设备的初始化过程涉及驱动程序的注册、设备探测、配置以及中断处理机制的设置,同时,理解设备、配置、接口、设置和端点之间的层次关系对于有效地开发和调试USB驱动程序至关重要。