usb在江湖系列之一家族系统(3) 2010/12/18

 

 

 

3.4 

令牌

(token)

       

3.4.1 
协议层的介绍

令牌是在前面枚举时引出的,有点命令的意思,可以理解为命令的标识,就是告诉对方这次的行为。在 USB 协议中,我们经常会说令牌包。那么什么是包呢? packet ,是指一次数据传输所组织的整体形式。数据传输的基本单元是包。每个包是有一定结构的,包括起始符,结束符,包的 id( 身份证,包的标识 ) ,要传递的数据,以及 CRC 校验信息。 SOF EOF 是包开始和结束的标志。

       下面是各种 USB 数据传输过程中涉及到的包标识符 PID

可见除了令牌包,还有其他几种格式的包,每一种包分别负责不同场景下的传输。

a) 令牌包 ( 定义了目标设备,终点号,传输方向 ) OUT IN SOF SETUP 四种。

令牌包格式

                                                     SOF 包格式

b) 数据包 DATA0,DATA1

一般情况下有 2 种类型的数据包: DATA0 DATA1 。设计成 2 种数据包 PID 是为了支持数据切换同步 (Data Toggle Synchronization)

数据包格式

3 握手应答包 ACK NAK STALL

握手包仅由 PID 构成。握手包用来报告数据事务的状态,表示数据成功接收,命令的接收或拒绝等信息。

ACK: 用来表示成功接收,对于 IN 事务, ACK 由主机返回,而对于 OUT 或者 SETUP 事务则由 USB 设备返回。

NAK :在 IN 事务过程中表示 USB 设备不会从主机接收数据, OUT 事务中表示 USB 设备没有传输到主机的数据, NAK 通常发生在 USB 设备并没有准备好和 host 做数据通讯的场景下。 NAK 只能有 USB 设备在 IN OUT 事务中发出。

STALL: 表示 USB 设备不支持该项请求或者不具备这个功能。

 

4 特殊包 PRE

                         还没有遇到过,略过。

 


 

3.4.2 现实中的 packet

下面是使用工具抓到的 USB 设备枚举过程中的一个环节,这是获取设备描述符的一个完整过程。从下面这个过程可以直观的看到各种包的是如何配合的,一次行为的流程是什么样的。这个图中蕴含着大量的信息,最好滞留一下然后慢慢来欣赏她。

Packet 包是传输的最小单位,几个 packet 组成一个 transzaction ,几个 transzaction 组成一个 transfer

比如 host 想获取设备描述符,这是一件完完整整的事情,就是一个 transfer 。首先要发送 setup ( 这是一个 transzaction ,其中又包含了几个 packet) ,告诉设备要干什么,然后发送 in 包读取数据,最后发送握手信息。

同样是上面的获取设备描述符的过程,我们用 transzaction 来表示:

我们在用 transfer 来表示:

着重看一下 packet 那张图,理解一下通讯的整个过程。


这部分的详细内容在 USB 协议第八章有详细的讲解。

3.5 Setup

枚举过程中使用最频繁的就是令牌包,而令牌包中最重要的就是 Setup 包,因为 Setup 是建立一次传输的开始,需要包含大量的信息,如传输方向、具体要做什么、地址信息、端点信息等等,都在 Setup 过程中告知 USB 设备。

那么我们看一下 Setup 包的格式,我们通常说的 Setup 包是指 Setup 这次数据传输过程中的数据部分。

       下面是一次 Setup 传输:


       Setup 包指的就是下面这次 data 传输的数据部分:

Setup 包是一个固定的数据格式,包含 8 个字节。


bmRequest Type :表明此次请求的特性,第二阶段控制传输方向。如果 wLength 域被设作 0 的话,表明没有数据传送阶段,那 Direction 位就会被忽略。同时指定了接收者,当接收者是接口或端点 (endpoint) 时, wIndex 域指出是哪个接口或端点。

bRequest :说明进行的是哪种请求,注意这个位会在 bmRequest Type type 不为 0 时有新的含义,这里我们只讨论 type 0 的标准请求。

                                                 标准的设备请求

       关于这些请求的具体意思和使用方法可以参考标准的 USB 协议。

wValue :当前请求的参数。

wIndex :用来表明是哪一个接口或端点。下面是 wIndex 的格式:

       Direction 0 代表端点为 OUT 端点, 1 IN 端点。不过这个值目前基本没有到。端点为 0 时该值被忽略。

wLength :表示下个包的数据传输长度。传输方向由 bmRequstType 中的 Direction 位指出。 wLength 0 则表明无数据传输。在 IN 传输请求下,设备返回的数据长度不应多于 wLength ,但可以少于。在 OUT 请求下, wLength 指出主机发出的确切数据量。如果主机发送了多于 wLength 的数据,设备做出的响应是没有定义的。设备千差万别,我们无法预知。 USB 协议为什么不加以定义呢?标准化这个行为。

       关于 USB 的最基本的知识,我们先介绍到这里,这些东西在以后还会经常见面。结合上面那个获取设备描述符的抓图,进一步理解消化上面的知识点。

精彩人生的资本

       当我们遇到机会时,才会感到自己能力的匮乏,后悔自己平时没有足够的积累。 USB 协议经过上面的准备,有能力进行各种情况下的数据传输了。他为我们准备了四种数据传输方式,分别应用在不同的环境下,技术的本质是服务,如果服务不好,迟早要被淘汰。所以做技术要考虑客户的感受。 USB 的四种传输基本上是够用的:控制传输 (control) 、批量传输 (bulk) 、中断传输 (interrupt) 、同步传输 (iso)

四种传输是 usb 立足江湖不可或缺的,不同的应用场合,设备可以使用不同的传输方式,也因此诞生了各式各样、丰富多彩的 USB 设备。

4.1 控制传输

控制就是命令,数据量短小精悍、目标明确。

控制传输只能在消息管道进行,因此传输的数据流必须依附于 USB 数据结构上。

1) 数据格式

Setup 包命令集

具有 USB 定义的格式

保证主机和设备之间正常通信

允许一些销售商对设备命令进行扩展

2) 传输方向 —— 双向(一般为端点 0

3) 最大的包长度为 64 字节

 

4.2 批量传输

数据量大,还要求准确。打印机、 U 盘。

1) 数据格式 —— 无要求

2) 传输方向 —— 单向

3) 包长度限制

低速设备不支持批量传输

全速设备: 64 字节

高速设备: 512 字节

4) 支持错误检测和恢复

 

4.3 中断传输

              鼠标、键盘,数据量不是很大,周期性的会有新数据。

            1) 用于定时查询设备是否有中断数据要传送

            2) 根据设备的要求进行周期性调度

全速设备最快每 1ms 、最慢每 255ms 发生一次

低速设备最快每 10ms 、最慢每 255ms 发生一次

高速设备最快每 125us 、最慢每 4096ms 发生一次

3) 数据格式 —— 无要求

4) 传输方向 —— 单向

5) 包长度限制

低速设备: 8 字节

全速设备: 64 字节

高速设备: 1024 字节

6) 支持错误检测和恢复

 

4.4 同步传输

          数据的实时性,而非正确性,带宽要求很高啊。典型应用摄像头!

            1) 速率恒定,容错的传输

因错误使传输失败,不再重新发送数据

全速设备最大带宽的 90% 、高速设备最大带宽的 80% 可以分配给周期性传输(同步传输和中断传输)

            2) 数据格式 —— 无要求(流管道)

            3) 传输方向 —— 单向

            4) 服务周期 —— 在相连的帧时隙中被定期调度

            5) 包长度限制

低速设备不支持同步传输

全速情况下,最大包值为 1023 字节

高速情况下,最大包值为 1024 字节

            6) 不支持错误检测和恢复

 

       到此,我们对 USB 家族成员的看家本领有了初步的认识,在后面的使用过程中,会对他们进一步的了解,直到将这些东西了然于胸,不用特意感受他的存在。掌握知识点的最好方式是在使用过程中,所以有时我更喜欢“好读书不求甚解”这句话,因为在后面的使用过程中,以前没理解的可能会突然间就理解了。前前后后的知识点,互相照应,形成网状。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值