Linux USB驱动框架

Linux USB驱动框架

USB控制器

每个芯片内部都带有USB控制器,每个USB控制器可以支持128个地址,其中0是默认地址,只有在设备枚举的时候才会使用,地址0不会分配给任何一个设备。所以1个USB主控制器最多可以分配127个地址。

HS FS LS

HS:高速模式
FS:全速模式
LS:低速模式

USB接口

接口1:5V
接口2:D- 差分信号
接口3:D+ 差分信号
接口4:GND 

接口1:5V
接口2:D- 差分信号
接口3:D+ 差分信号
接口4:ID 用于实现OTG功能,通过ID线来判断当前连接的主设备(host)还是从设备(slave)
接口5:GND

USB OTG

USB OTG既可以做Host又可以做Device。
ID线的高低电平表示USB口工作在Host还是Device模式。

USB协议

Device Descriptor 设备描述符 
Configuration Descriptor 配置描述符  
String Descriptor 字符串描述符  
Interface Descriptor 接口字符串  
Endpoint Descriptor 端点描述符

USB枚举

当 USB 设备与 USB 主机连接以后主机就会对 USB 设备进行枚举,通过枚举来获取设备的
描述符信息,主机得到这些信息以后就知道该加载什么样的驱动、如何进行通信等。USB 枚举过程如下:
①、第一回合,当 USB 主机检测到 USB 设备插入以后机会发出总线复位信号来复位设备。
USB 设备复位完成以后地址为 0,主机向地址 0 的端点 0 发送数据,请求设备的描述符。设备得到请求以后就会按照主机的要求将设备描述符发送给主机,主机得到设备发送过来的设备描述符以后,如果确认无误就会向设备返回一个确认数据包(ACK)。
②、第二回合,主机再次复位设备,进入地址设置阶段。主机向地址 0 的端点 0 发送设置
地址请求数据包,新的设备地址就包含在这个数据包中,因此没有数据过程。设备进入状态过
程,等待主机请求状态返回,收到以后设备就会向主机发送一个 0 字节状态数据包,表明设备
已经设置好地址了,主机收到这个 0 字节状态数据包以后会返回一个确认包(ACK)。设备收到
主机发送的 ACK 包以后就会使用这个新的设备地址,至此设备就得到了一个唯一的地址。
③、第三回合,主机向新的设备地址端点 0 发送请求设备描述符数据包,这一次主机要获
取整个设备描述符,一共是 18 个字节。
④、和第③步类似,接下来依次获取配置描述符、配置集合、字符串描述符等等。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paper_Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值