mirror of
https://github.com/54shady/kernel_drivers_examples.git
synced 2025-08-15 02:39:36 +00:00
USB
参考文章
描述符
设备-配置-接口-端点关系
- 一般一个设备就一个配置,一个接口,如果设备是多功能符合设备,则有多个接口.端点一般都有好几个
传输模式
控制传输
- 建立阶段
- 数据阶段
- 确认阶段
BULK传输
中断传输
同步传输
USB设备的6种状态
连接(Attached)
上电(Powered)
默认状态(Default)
地址(Address)
配置状态(Configured)
挂起状态(Suspend)
枚举
枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序
枚举过程
USB设备插入USB端口或给系统启动时设备上电
Hub监测它各个端口数据线上(D+/D-)的电压
- 在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k的上拉电阻Rpu.当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V).hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口
Host了解连接的设备
Hub检测所插入的设备是全速还是低速设备
- hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,hub就可以将此设备的速度类型信息回复给host
Hub复位设备
Host检测所连接的全速设备是否是支持高速模式
- 主机不断检测设备是否有发送K信号,如果没有则为全速
- 主机不断检测设备是否有发送K信号,如果有且HUB也是高速则HUB必须回复KJKJKJ,设备需要断开1.5K上拉电阻,连接D+/D-上的高速终端电阻,完成进入高速模式的过程
Hub建立设备和主机之间的信息通道
- 设备和主机之间的通信通过控制传输,默认地址0,端点号0进行
主机发送Get_Descriptor请求获取默认管道的最大包长度
- 主机此时发送的请求是默认地址0,端点0
主机给设备分配一个地址
主机获取设备的信息
- 主机发送Get_Descriptor请求到新地址读取设备描述符
主机给设备挂载驱动(复合设备除外)
设备驱动选择一个配置