目录
1. 前言
这篇博客阅读官方手册5章的内容
- USB Data Flow Model
第5章描述了一些关键的概念,了解每层具体的前必须完整的阅读第5章。物理视图会在6,7,8章中详细说明,逻辑视图会在9,10章中详细说明。
学习一个协议很重要的几个点:
- 整体结构
- 特异性和共性
需要协议英文版原文的可以评论区留言,我私发,工作日我都会上线。
2. 总体介绍
USB系统的简单视图,这体现了USB系统最重要的两个实体。
USB Host为主,USB Device为从,一切事务都是由Host发起!
分层的思想已经深入了当今任何一个计算机网络的通信协议,接下来就是分层的解释,以下内容有别于传统的物理层,数据链路层和应用层的分法。
USB协议的数据流模型,将模型分为三层:
名称 | 功能 |
---|---|
Function Layer | 通过适当匹配的Client Software为Host提供额外的功能* |
USB Device Layer | 是USB System Software用于对Device执行通用USB操作的视图 |
USB Bus Interface Layer | 提供了Host和Device之间的物理连接,信号连接,数据包连接 |
如下图5-2所示:这是本文中唯二重要的两个图:要理解记忆!
这里有四个最重要的概念,理解和记忆这几个概念对后面的细节学习帮助很大。
名称 | 作用 |
---|---|
USB Physical Device | 在USB线缆的终端,提供服务 |
Client Software | 运行在Host上的软件,对应一个特异的USB Device,生产商提供 |
USB System Software | 操作系统自带的,支持USB的软件 ,完成USB的管理工作 |
USB Host Controller | 允许将USBDevice连接到Host上的硬件和软件,Host侧的USB Bus Interface |
两个重要概念在手册的后文中才会提到,但是我觉得把它放到这里更方便大家理解分层的思想。
名称 | 作用 |
---|---|
Host Controller Driver (HCD) | USB Host Controller与USB System Software之间的软件接口 |
USB Driver (USBD) | USB System Software与Client Software之间的接口 |
这样分层其中一个好处就是:Client Software开发工程师无需关心USB Host Controller的具体实现。
3. 重点介绍
接下来分四个部分介绍重要概念,分别是:
- Bus Topology(总线拓扑)
- Communication Flow Models(通信流模型)
- Bus Access Management(总线访问管理)
- Special Consideration for Isochronous Transfers (同步传输需要考虑的)
3.1 总线拓扑
这一节主要从四个角度说明:
- Host and Devices: USB中最重要的两个元素
- Physical Topology: USB各个元素时如何连接的
- Logical Topology: USB各个元素的分工
- Client Software-to-function Relationships: client software和对应的function是如何关联的
3.1.1 Host and Device
Host端由三个部分组成:
- USB Host Controller
- Aggregate USB System Software (USB Driver, Host Controller Driver, and host software)
- Client Software
Device端也是有三个部分组成:
- USB bus interface
- USB logical device
- Function
USB Device为Host提供了额外的功能。USB Device提供的功能类型差别很大。但是,所有的USB Device都为Host提供相同的基本接口(interface)。这允许Host以相同的方式管理不同USB Device
3.1.2 Physical Bus Topology
物理总线结构:树状图
USB上的Device通过一个分层的星形拓扑结构在物理上连接到Host上
compound device的思想:
compound device:一个hub和多个device打包,组成一个的新的device,在USB系统中只会被分配一个Device地址,但是 compound device内部的Hub会为其下面的每个Device分配地址。结构如下图5-5所示:
注 在High Speed的系统中,Hubs还充当了一个特殊的作用,将Full/Low Speed的环境与High Speed的环境隔离开来,可以理解为每个High Speed Hub基本上增加了一个(或多个)额外的Full/Low Speed Bus;
3.1.3 Logical Topology
Host与Logical Device的关系:根与节点
当把Hub也看做一个Logical Device时,逻辑视图可以简化为下图
3.1.4 Client Software-to-function Relationships
Client Software与function中的interface之间的关系:一一对应
Client Software必须使用USB software programming interfaces来操作对应的function,而不是直接操作function。(更加细化的分解可以看下文的图5-10)
3.2 通信模型(重点)
此模型展示了Client Software <> function的数据流,如5-9图所示:
USB Logical Device是endpoint的集合。在Function的视角里,endpoint的集合是interface。
The USB System Software通过the Default Control Pipe管理device。
在上图中,Client software表示为集合的形式,在实际的一个USB系统中,Function不止一个interface。Client software通过Pipe bundles (与endpoint集相关联)管理interface。Client software发起请求,在host上的 buffer 和USB device 的endpoint 之间传输数据。具体过程如图5-10所示:
3.2.1 Endpoint
可以说Endpoint的概念在这一章的内容中是最重要的。因为它是Host与Device通信的终端。任何一个Device都由多个相互独立的Endpoint组成,每个Device在连接到系统时,会被分配一个特有的地址,而Device内的每个endpoint在设计之初就被分配了 the endpoint number,每个endpoint还有一个单向的方向,所以,一个系统中的每个endpoint都是唯一的。(加粗的三点使endpoint唯一)
Endpoint有如下特征:
- 总线接入频率/延迟要求
- 带宽要求
- Endpoint number
- 错误处理行为要求
- 端点能够发送或接收的最大数据包大小
- 端点的传输类型
- 在端点和Host之间传输数据的方向
简单的Endpoint组合的集合来实现更加复杂的功能。
在每个Device中都有两种Endpoint:
-
endpoint0:
前面说到endpoint的传输都是单向的,但是0不是,它是双向的。The USB System Software使用endpoint0初始化逻辑Device,因为endpoint0在上电后就能被使用。这种配置方法被称为:the Default Control Pipe。 -
其他endpoint:
low speed Device最多两个endpoint(除endpoint0之外)
full speed Device最多15个输入+15个输出(除endpoint0之外)
上电后无法使用,需要完成配置之后才可以
3.2.2 Pipe
USB Pipe是Device上的endpoint与Host上的Client Software之间的关联。Pipe允许数据在Host上的内存缓冲区到Device上的endpoint之间移动。有两种互斥的管道通信方式:
- Stream: Data没有usb定义的结构
- Message: Data按照usb定义的结构
无论是何种方式,USB都对它们进行透明传输,不解释数据。Pipe与如下特性相关:USB数据带宽、传输类型、endpoint的属性、最大数据有效载荷大小。
这里有一个特殊的Pipe:
the Default Control Pipe: 由endpoint0的两个端点组成的管道,Device通电并复位,则此管道始终可用,the USB System Software使用the Default Control Pipe来确定Device识别和配置要求,并配置Device。the Default Control Pipe归the USB System Software软件所有,其他软件想要使用必须通过the USB System Software。
Software client 通常通过 I/O Request Packets (IRPs) 来请求数据,将其发送到pipe中,等待完成和回复。如果在非同步传输时,遇到以下两种情况将停止IRP,之前所有未完成的IRP都将被放弃:
- a STALL send to a host
- three bus errors in a IRP
Stream Pipe:
没有数据结构的要求,从一端流入,并以相同的顺序流出(First-in,First-out),但是一个Pipe中的传输流向总是单向的,每个单向的Pipe会绑定一个endpoint number(相反的Pipe还是可以使用这个endpoint number)
Stream pipes 支持bulk、isochronous、interrupt 传输模式
Message Pipe:
Message Pipe与endpoint的交互方式与Stream Pipe不同。
一般分为三个步骤:
- 从Host向USB Device发送一个请求。
- 进行数据传输。
- 传输状态信息。
Message Pipe允许在两个方向上的通信流,The Default Control Pipe是一个Message Pipe。