Linux-USB驱动笔记(三)

26 篇文章 31 订阅

1、前言

前两篇笔记地址如下:

Linux-USB驱动笔记一

Linux-USB驱动笔记二

2、USB接口类型

USB接口类型
从上面图片来看,usb 的接口类型众多,比如PC上主要用 USB A-Type 和 USB B-Type,手机上常见的有 USB C-Type 和 Micro-USB B 。这些接口在很多设备上都能见到,出现各种各样的USB接口,主要还是跟设备有关。

3、USB枚举

USB的设备有很多,当我们在PC上插上USB设备,PC是如何知道是什么设备,该使用哪个驱动程序呢?枚举的过程就是用来获取这些信息,以确定怎么通信,加载合适的驱动。

3.1、检测电压变化,报告Host

首先,USB设备插上后,Hub检测到有电压变化。集线器用中断传输方式上报集线器上的事件。

3.2、Host发送Get_Status请求

给Hub发送一个Get_Status请求来了解更多的信息。这个过程Hub会根据USB总线空闲时差分线的高低电压来判断所连接设备的速度类型,并把速度类型信息返回给Host。

3.3、Host发送Set_Feature请求复位端口

Host就向hub发出一个 Set_Feature请求让hub复位其管理的端口(刚才设备插上的端口)。该复位信号不会发送给其他端口的。

3.4、Hub建立设备和主机之间的信息通道

Host不停地向hub发送Get_Status请求,以查询设备是否复位成功。Hub返回的报告信息中有专门的一位用来标志设备的复位状态。

复位成功之后,设备和主机之间的通信通过控制传输,默认地址0,端点号0进行。

3.5、 Host获取默认管道的最大包长度

Host向端点0发送 Get_Descriptor请求获取设备描述符,然后读取设备描述符的bMaxPacketSize0字段。这样就获取到最大包长度。

3.6、Host给设备分配一个地址

主机控制器通过Set_Address请求向设备分配一个唯一的地址。在完成这次传输之后,设备进入地址状态,之后就启用新地址继续与主机通信。

3.7、Host获取设备的信息

主机向新地址重新发送Get_Descriptor请求,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。

之后主机发送Get_Descriptor请求,读取配置描述符(Configuration Descriptor),字符串等,逐一了解设备更详细的信息。

3.8、Host给设备挂载驱动

主机通过解析描述符后对设备有了足够的了解,会选择一个最合适的驱动给设备。

3.9、设备驱动选择一个配置

驱动根据前面设备回复的信息,发送Set_Configuration请求来正式确定选择设备的哪个配置作为工作配置(之前说过,配置就是一个功能)。至此,设备处于配置状态,当然,设备也应该使能它的各个接口。

4、USB OTG

USB 分为 HOST(主机)和从机(或 DEVICE),有些设备可能有时候需要做HOST,有时候又需要做 DEVICE,配两个 USB 口当然可以实现,但是太浪费资源了。如果一个 USB 接口既可以做 HOST 又可以做 DEVICE 那就太好了,使用起来就方便很多。为此,USBOTG 应运而生,OTG 是 On-The-Go 的缩写,支持 USB OTG 功能的 USB 接口既可以做 HOST,也可以做 DEVICE。

OTG标准在完全兼容USB2.0标准的基础上,新增主机协商协议(HNP)和对话请求协议(SRP).

4.1、OTG硬件结构

一个完整的OTG连接由A-device和B-device组成。A设备(Micro-A)默认作为Host并供电,B设备(Micro-B)默认作为peripheral。

OTG比普通USB接口多了一条USB_OTG_ID连线。Micro-A插座的USB_OTG_ID接地,而Micro-B插座的USB_OTG_ID悬空。如图所示:
在这里插入图片描述

4.2、OTG支持协议

OTG支持HNP协议,SRP协议。

  • HNP协议

HNP(即主机协商协议),实现在不调换Micro-A和Micro-B插座的情况下,Host和Peripheral两种角色在A-Device和B-Device上相互切换。
无论A-device扮演host还是peripheral角色,均由A-device向USB接口供电。

  • SRP协议
    A-device在总线空闲时关闭总线。当一个B-device想要工作时,可向A-device请求开启总线。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值