usb阅读笔记

usb的检测功能:

usb有4根线:vbus 地线 D+ D-
每个usb集线器下游端口的D+和D-上分别接了个15千欧下拉电阻到地。当集线器端口悬空,输入端被这两个下拉电阻拉到了低电平。而在usb设备端,在D+或者D-上接了一个1.5千欧的上拉电阻到3.3v电源,接入D+还是D-是有设备的速度来决定,全速或者高速设备,在d+上,低速设备接在d-上。当设备插入集线器,集线器就有了3v的高电平信号。这样检测设备的插入。(电路:相当于3.3v到地之间挂了两个电阻,然后d+的位置在连个电阻中间)。
实验:在vbus跟d+之间接入10千欧的电阻,不接入设备,windows会提示发现新的硬件。

usb的拓扑结构:

主从结构系统。主机:usb控制器和根集线器。 然后中间可以加集线器用来扩展端口。整个结构系统类似根文件系统,二叉树结构。
从机: usb设备。

usb描述符概括:

设备描述符 配置描述符 接口描述符 端点描述符
对于硬件来说只有设备跟端点,主机知道设备通过设备地址,然后具体往端点发送,由于usb的端点可以用于不同的功能,相当于可以复用,就添加配置跟接口,用来实现多功能。比如说:中国河南省。设备描述符是中国,端点描述符是河南省。配置跟接口就是描述具体怎么找,也就相当于路劲。

usb控制传输模式:

建立过程 数据过程 状态过程
主机发起setup过程(建立过程):发起setup的令牌包 后跟着一个data0的数据包 然后是数据过程。数据过程之后是状态过程。状态过程是用来确认所有的数据是否都已经真确的传输完成。

usb枚举过程:

1 . usb主机检测usb设备插入之后,就会对设备复位。usb设备在总线复位后其地址为0,这样主机及可 以通过地址0和那些刚刚插入的设备通信。usb主机往地址为0的设备端0发获取设备描述符的标准请求(这是一个控制传输的建立过程)。设备收到该请求后,会按照主机请求的参数,在数据过程将设备描述符返回给主机。主机在成功获取到一个数据包的设备描述符并且确认没有错误后,就返回一个0长度的确认数据包(状态过程)给设备,从而进入到接下来的设置地址阶段。需要注意的是 第一次主机只会读取一个数据包的设备描述符,标准的设备描述符有18个字节。
2. 主机对设备又一次复位,这时就进入了设备地址阶段。usb主机往地址为0的设备的端点0发出一个设置地址的请求(控制传输的建立过程),新的地址包含在建立过程的数据包中。(主机负责管理,分配,地址是唯一的)。usb设备收在收到这个建立的过程之后,直接进入了状态过程,因为这个控制传输是没有数据过程。设备等待主机请求状态返回(一个输入令牌包),收到输入令牌包后,设备就返回0长度的状态数据包。如果主机确认该状态包已经正确的收到,就会发送应答包ack给设备,设备在收到这个ack之后,就要启用新的设备地址了。这样设备就分配到了一个唯一的设备地址,以后主机通过它来访问设备。
3 主机再次获取设备描述符。这次跟第一次不一样。这次试用的是新的设备地址。另外这次是获取全部的18字节的设备描述符,如果端点0最大包长小于18字迹,就会有多次请求数据输入(即发送多个IN令牌包)
4 主机获取配置描述符。配置描述符总共为9个字节。主机在获取到配置描述符后,根据配置描述符中所描述的配置集合长度,获取配置集合。配置集合包括配置描述符,接口描述符,端点描述符等。

usb的包结构及传输过程

usb是串行总线,数据是一位一位的传送。lsb的方式。一个包被分成很多个域。
usb传输数据是以包为基本单位的。一个包被分成不同的域,不同类型的包,包含的域是不一样的。但是有个共同点:都要以同步域开始,紧跟着一个包标识符pid,最终以包结束符eop结束。
同步域是用来告诉usb的串口引擎数据要开始传输了,请做好准备。
包标识符是用来标志一个包的类型,总共有8位。usb协议中只使用4位,pid(1~0):1是令牌包,11是数据包,10是握手包,00是特殊包。
在这里插入图片描述
建立令牌包只能用在控制传输中,后只能使用data0 数据包,且只能发送到设备的控制端点并且设备必须要接收。
sos令牌包的结构:
在这里插入图片描述
其他令牌包结构:

数据包

USB2.0中4中数据包类型:data0 data1 data2 mdata
在这里插入图片描述

握手包

握手包用来表示一个传输是否被对方确认。只有同步域,pid和eop,这种是最简单的一种数据包。握手包有ack,nak,stall,nyet。
ack表示正确接收数据,主机跟设备都可以用ack来确认。其他的只有设备能够返回,主机不能使用。

usb的传输类型

在这里插入图片描述

批量传输

批量传输使用批量事务。一次批量事务有三个阶段:令牌包阶段,数据包阶段,握手包阶段。每个阶段都是独立的包,通常用在数据量大,对数据的实时性要求不高的场合,列如:usb打印机,扫描仪,大容量存储设备。
举个批量输出事务:主机先发出一个out的令牌包,这个令牌包中包含了设备的地址,端点号。然后,在发送一个data包,这是地址和端点匹配的设备就会收下这个数据包。然后主机切换到接受模式。等待设备返回握手包。设备解码令牌包,数据包,都准确无误后,并且有足够的缓冲区来保存数据后,就会使用ack握手包或者nyet握手包来应答主机(只有高速模式下才有nyet握手包,表示本次数据成功接收,但是没有能力接收下一次传输)如果没有做够的缓冲区可用,那么它就会返回一个nak的握手包,告诉主机目前没有缓冲区可用,主机会在稍后的时间重试该批量事务。如果设备检测到数据正确,但是端点处于挂起的状态,则返回一个stall握手包。如果设备检测有错误(列如校检错误,位填充错误等)则不做任何响应,让主机等待超时。
在这里插入图片描述
平时无数据传输时,总线处于空闲状态。当需要传输一次事务时,主机发送一个令牌包,可以是out令牌包,in令牌包,ping令牌包(usb2.0高速模式特有的)。
如果设备解码令牌包时出错,则直接进入空闲状态。
令牌阶段之后是数据阶段或者握手阶段,对于批量输入事务,则由设备返回数据,或者返回应答包nak握手包或stall握手包。这是由设备状态来决定。对于批量输出事务,则主机在令牌包后面在发送一个数据包。
最后是握手阶段。对于批量输入事务,如果主机接收设备返回的数据正确,则由主机返回ack握手包,否则数据错误,主机什么也不返回。主机必须要能够接受数据,不能用nak握手包回应设备。对于批量输出事务,如果设备能够接收数据,则返回ack握手包,如果设备没有空间接收数据,则返回nak握手包,如果设备端点挂起,则返回stall握手包。如果设备检测到传输错误,则什么都不回应,直接进入到空闲状态。
下图详细给出一个传输正确的批量输入事务和批量输出事务的数据包图(传送了2个字节的数据)

在这里插入图片描述

中断传输

中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。这里说的中断跟我们硬件上的中断不一样,它不是设备主动发出一个中断请求,而是有主机保证在不大于莫个时间间隔内安排一次传输。中断传输通常用在数据量不大,但是对时间要求比较严格的设备中,列如人机接口(HID)中的鼠标,键盘,轨迹球。中断传输也可以用来不断的检测莫个状态,当条件满足后在使用批量传输传送大量数据。
除了在对端点查询的策略上不一样之外,中断传输和批量传输的结构基本上是一样的,只是中断传输没有ping和nyet两种包。中断事务的流程图:
在这里插入图片描述

等时传输

等时传输(同步传输)用在数据量大,对实时性要求比较高的场合,列如音频设备,视频设备,这些设备对延迟很敏感。对于音频设备来说,数据100%正确性要求不高,可以有少量的错误,主要是不能停顿。当数据错误的时候,并不进行重传操作。因此等时传输也没有应打包。数据是否正确,可以由数据包crc校检来确认。至于错误的数据如何处理,有软件来决定,事务流程图如下:
在这里插入图片描述

控制传输

控制传输比前面三种要复杂点,在介绍枚举的过程中,提到过控制传输。控制传输分为三个过程,第一个建立过程,第二哥可选的数据过程,第三个状态过程。
建立过程使用一个建立事务。建立事务是一个数据数据过程。有几处不一样。
1.令牌包不一样 使用setup令牌包
2.数据包类型必须是data0
3握手包设备只能使用ack应答(除非出错,不应答) 流程图:
在这里插入图片描述
数据过程是可选的。如果有, 一个数据过程可以一笔或多笔数据事务。但是在数据过程中,数据事务必须是同一个传输方向。比如,控制读,所有数据事务都是输入,控制写,数据事务是输出。一旦方向改变,则认为进入了状态过程。数据过程第一个数据包必须是data1包,然后每次正确的传输一个包后就在data0 跟data1 之间交替。
状态过程也是一笔批量事务。传输方向刚好与数据阶段相反。即 控制写传输在状态过程中使用换一个批量输入事务,控制读传输在状态过程中使用一个批量输出事务。状态过程只能使用data1 包。
几个控制传输的实列:
在这里插入图片描述

传输类型与端点支持的最大包长

每个端点描述符都规定了端点支持的最大数据包长。主机每次发送数据包,都不能超过端点的最大包长。

  • 对于控制传输端点,低速模式最大包长固定为8个字节,高速模式固定为64个字节,全速模式可在8,16,32,64中选择
  • 等时传输的端点,全速最大包长上限为1023字节,高速模式最大包上限为1024字节,低速不支持这个模式
  • 中断传输的端点,低速上限8个字节,全速上限64个字节,高速上限1024字节
  • 批量传输的端点,高速固定512字节,全速可在8,16,32,64中选择,低速不支持
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值