USB设备的检测,枚举和数据传输

物理层怎么传输

USB采用差分信号传输,使用的是NRZI编码方式:数据为0时,电平翻转;数据为1时,电平不翻转。如果出现6个连续的数据1,则插入一个数据0,强制电平翻转,以便时钟同步。上面的一条线表示的是原始数据序列,下面的一条线表示的是经过NRZI编码后的数据序列。

 同步信号的抓包如下

 怎么检测插入

在USB集线器的每个下游端口的D+和D-上,分别接了一个15千欧的下拉电阻到地,当集线器的端口悬空(即没有设备插入)时,输入端就被这两个下拉电阻拉到了低电平,而在USB设备端,在D+和D-上接了一个1.5千欧的上拉电阻到3.3V的电源,1.5千欧的上拉电阻是接在D+和D-哪个,由设备的速度来决定,对于全速设备和高速设备,上拉电阻是接在D+上的,而低速设备的上拉电阻则是接在D-上。

怎么枚举

设备插入端口,hub检测各个端口的D+/D-的电压判断是何种速度的设备,并返回给主机,主机得知新设备连上后等待100ms,发出Set_Port_Feature请求让hub复位刚插上设备的端口(hub驱动D+/D-都为低电平),主机继续向hub发送Get_Port_Status以查询是否复位成功,当hub撤销复位信号,设备处于默认状态,地址为0;主机发送Get_Descriptor获取默认管道的最大包长度,系统会要求hub再复位一次,主机通过Set_Address向设备分配一个地址,进入地址状态,主机发送Get_Descriptor读取设备描述符,并详细解析并读取配置/接口/端点描述符等;通过device_add将设备加入到usb总线并match驱动,匹配后调用device_bind_driver并将控制权交给设备驱动;驱动发送Set_Configuration来确定选择设备的那个配置来工作

软件框架

软件的基本框架如下,

 传输基本单位

USB总线上传输数据是以包为基本单位的,一个包被分成不同的域,根据不同类型的的包,包含的域是不一样的,但不同的包有个共同的特点,就是要以同步域开始,紧跟着一个包标识符PID,最终以包结束符EOP来结束这个包

令牌包 token:PID + ADDR(设备地址,端点地址) + CRC5

帧首包 SOF(Start of frame):PID + 帧号 + CRC5;

数据包 DATA:PID + 数据 + CRC16;

握手包 Handshake:PID

 PID类型如下

 事务是什么

事务通常有两个或者三个包组成。令牌包,数据包和握手包;令牌包用来启动一个事务,总是有主机发送。数据包传送数据可以从主机到设备,也可以从设备到主机方向,由令牌包来指定;握手包的发送者通常为数据接收者,当数据接收正确后,发送握手包

示例如下

 

 传输是什么

不同传输类型每 帧(Frame) 占用带宽的特性不同。同步传输,每帧占用固定带宽;

中断传输,每帧都占用带宽,但所占带宽不固定;

控制传输和批量传输,在需要时才占用帧带宽,批量传输将会占用帧的所有剩余带宽。

除同步传输外,一个事务(Transaction)由一个令牌包,若干个数据包,一个握手包构成。

而同步传输没有握手包,所以接收端接收完同步传输数据包,计算出 CRC,即使发现数据有错,也不能发送握手包给发送端,让发送端重发。

控制传输(Control Transfer)

控制传输用于主机枚举设备时从设备获取信息或配置信息。控制传输由 建立阶段(SETUP),数据阶段(DATA),状态阶段(STATUS) 组成。其中数据阶段是可选的,数据阶段可以包含多个 IN 事务或 OUT 事务,且在一次控制传输中,只能包含 IN 事务或 OUT 事务,不能既包含 IN 事务也包含 OUT 事务

示例如下

 批量传输(Bulk Transfer)

用于传输突发的大量数据,要求数据不能出错,但对时间没有要求,适用于存储设备、打印机等。批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的 PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步

 中断传输(Interrupt Transfer)

中断传输每一帧(Frame)最多 传输 1 次事务,而批量传输可以在总线空闲时在帧内传输多次事务,中断传输不支持 PING,优先级更高,最大包长与批量传输不同,其他的与批量传输相同。主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询时间,主机会保证在小于这个时间间隔的范围内安排一次传输。

 同步传输(Isochronous Transfer)

同步传输是不可靠传输,它没有握手包,也没有 PID 翻转,不支持重传。主机在安排事务传输时,同步传输具有最高优先级。同步传输适用于固定速率抵达或指定时刻抵达的场合,可以容忍偶然错误的数据上。一般用于喇叭,麦克风,摄像头等实时性要求高的设备。它由令牌包和数据包组成,没有握手包

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值