USB2.0学习笔记_0

关于USB2.0的学习,我准备自顶向下研究。
首先学习它的高层协议。

USB启动流程

在这里插入图片描述

i. 设备上电

用户把USB设备插入USB端口(主机下的根hub或主机下行端口上的hub端口)或系统启动时设备上电。此时,USB设备处于加电状态,它所连接的端口是无效的。Hub会实时监测端口的电平变化,一旦检测到端口有电压变化,Hub将利用自己的中断端点将信息反馈给主控制器,告诉主机有设备连接。Hub通过检测USB总线空闲时的差分线的高低电压来判断所连接设备的速度类型。

ii. 主机初步了解设备

主机收到Hub的设备连接或断开消息后,会发送一个 Get_Port_Status请求给hub以了解此次状态改变的确切含义。Get_Port_Status等请求属于所有Hub都要求支持的Hub类标准请求。当host发来Get_Port_Status请求时,Hub就将此设备的速度类型信息回复给host,USB 2.0规范要求速度检测要先于复位(Reset)操作。设备的速度类型是靠设备差分线接上拉电阻的情况来标识的:全速设备D+线接Rpu上拉电阻,而低速设备是D-线接Rpu上拉电阻。
在这里插入图片描述

iii. 主机通过Hub复位设备

主机至少等待100ms以使得插入操作的完成以及设备电源稳定工作,然后向Hub发出一个 Set_Port_Feature请求让Hub复位刚才设备插上的端口。Hub通过驱动数据线到复位状态(D+和D-全为低电平 ),并持续至少10ms。当然,Hub不会把这样的复位信号发送给其他已有设备连接的端口,所以其他连在该Hub上的设备自然看不到复位信号,不会受影响。Hub集线器具体电路实现原理可自行探索。

IV. 通过Hub建立主机和设备之间的信息通道

根据USB2.0协议,高速(High Speed)设备在初始时是默认全速(Full Speed )状态运行,那么对于一个支持USB2.0的高速Hub,当它发现它的端口连接的是一个全速设备时,会进行高速检测,看看目前这个设备是否还支持高速传输。如果是,那就切到高速信号模式,否则就一直在全速状态下工作。从设备的角度来看,如果是一个高速设备,在刚连接到Hub或上电时只能以全速模式运行。随后Hub会进行高速检测,之后这个设备才会切换到高速模式下工作。假如所连接的Hub不支持USB2.0,即不是高速Hub,不能进行高速检测,那么设备将一直以全速工作。
主机不停地向hub发送Get_Port_Status请求,以查询设备是否复位成功。Hub返回的报告信息中有专门的一位用来标志设备的复位状态,同时也将设备新的速度类型信息上传。当Hub撤销了复位信号,设备就处于默认/空闲状态(Default state),准备接收主机发来的请求。设备和主机之间的通信通过控制传输管道,默认管道为地址0、端点0,设备能从总线上得到的最大电流是100mA。这时主机与设备只能进行控制传输。

V. 主机获取默认控制管道的最大数据包长度

主机此时发送的请求是默认地址0,端点0,虽然所有未分配地址的设备都是通过地址0来获取主机发来的请求,但由于枚举过程不是多个设备并行处理,而是一次枚举一个设备的方式进行,所以不会发生多个设备同时响应主机发来的请求。
主机发送Get_Descriptor获取设备描述符,设备描述符的第8字节代表设备端点0的最大包大小,只有知道端点0 的最大包长度,才知道一次控制传输要从设备请求多少字节数据。

VI. 主机请求Hub再次复位设备

当Get_Descriptor获取设备描述符请求成功,系统会要求hub对设备进行再一次的复位操作(USB规范里面可没这要求),再次复位的目的是使设备进入一个确定的状态。

VII. 主机给设备分配一个新地址

主机控制器通过Set_Address请求向设备分配一个唯一的地址。在完成这次传输之后,设备进入地址状态,之后就启用新地址与主机通信。这个地址对于设备来说是终生制的,设备在,地址在;设备消失(被拔出,复位,系统重启),地址被收回。同一个设备当再次被枚举后得到的地址不一定是上次那个了。

VIII. 主机获取并解析设备描述符信息

主机发送Get_Descriptor请求读取设备描述符,这次主机发送Get_Descriptor请求使用新地址,它会解析设备描述符的每一项内容。设备描述符内信息包括端点0的最大包长度、设备所支持的配置个数、设备类型、VID、 PID、字符串索引等信息。如下图所示。
在这里插入图片描述

VIV. 主机获取字符串描述符

根据如果有字符串描述符,主机会获取语言ID描述符和字符串描述符。

VV. 主机获取标准配置描述符

主机发送Get_Descriptor_Configuration请求并解析标准配置描述符,标准配置描述符内信息包括配置描述符集合长度、接口数、设备属性、设备所需电流。如下图所示。
在这里插入图片描述

VVI. 主机获取配置描述符集合

配置描述符集合包括标准配置描述符、接口描述符、端点描述符,如果是HID设备还会包括HID描述符,主机会根据上面得到的标准配置描述符的wTotalLength,发送了一个Get_Descriptor_Configuration请求获取到配置描述集合并解析所有描述符,从而知道设备到底是什么样的设备。

VVII. 主机为设备挂载驱动并选择一个配置

主机通过解析描述符后对设备有了足够的了解,会选择一个最合适的驱动给设备,现在就将控制权交到设备驱动了。对于复合设备,通常应该是不同的接口配置给不同的驱动。

主机发送Set_Configuration请求来正式确定选择设备的哪个配置作为工作配置(对于大多数设备来说,一般只有一个配置被定义)。至此,设备处于配置状态(Configured)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值