USB是英文Universal Serial Bus的简称,中文名称是“通用串行总线”。
端点(Endpoint, 简写为EP)。从物理机制来说,端点可以是嵌入式系统或PC上的一个数据缓冲区,
用来存放和发送USB的各种数据;从逻辑上来说,端点可以视为数据的收发器,可以按照定义的传输方式
来交换数据。每个端点都有唯一确定的地址,即端点号。
域(Field)。USB协议中规定的组成包的单元。
帧(Frame)。这是一个时间概念,指的是从一个SOF令牌开始到下一个SOF发送之间的时间,其中
包含一系列的数据传送。
人机交互设备(Human Interface Device,简称为HID)。USB协议规定的设备类之一。常见的USB鼠标
、键盘等设备均属于HID。HID的PC级开发因此仅需针对应用级用户程序。
最低有效位(Least Significant Bit, 简写为LSB)。
最高有效位(Most Significant Bit,简写为MSB).
PCI总线 USB主控制器根Hub (USB设备USB Hub)
5.2.2 低功耗的实现
USB供电的工作状态分为2种,正常工作状态和挂起状态。
如果总线供电设备在3ms内没有总线操作,即USB总线处于空闲状态的话,该设备就需要自动进入
挂起状态。
在设备进入挂起状态后,可以通过唤醒(Resume)操作来恢复到正常工作状态。这种远程唤醒方式是
所有USB事务中,唯一能够由设备发起的事务。
在USB的4线电缆中传输信号的是D+和D-这一对差模信号线,该线上使用的是+3.3V的电平,Vbus是+5V。
第6章 USB数据通信结构
包, 是USB最基本的数据单元。每一个包,基本上包含了一个完整的USB信息。按照包在整个
USB数据传输中的作用不同,包可以分为3类:令牌包、数据包和握手包。
域,一个包就是一串连续的二进制数,而域就是这些其中的一部分。域又被分为7类:同步序列域、
包标识域、地址域、端点域、帧号域、数据域和CRC校验域。
以包为基础,USB定义了4种数据的传输类型:控制传输、中断传输、批量传输和同步传输。
因此,这其中的每一个次数据交换过程既不能直接叫做批量传输,而又不是包,那是什么呢?叫
“事务”。每种传输方式都由很多个事务来完成,每一笔事务由底层包组成。
比如1个字节的二进制数10001000,每一个数代表1位。一般将数左起第一个数称为最高有效位,即
MSB,也就是所举例数中的1;而将右起第一个数据成为最低有效位,即LSB。
按照协议规定:USB总线上首先发送LSB,然后发送近邻的下一位,最后发送MSB。
6.2 二进制数的序列 ---- 域
6.2.1 同步域
同步域用于本地时钟与输入信号的同步,代表一个包的起始。同步域长度为8位,最后2位作为一个标志
标明标识域PID的开始。同步域的数值固定为00000001。同步域位于每一个包的最开始处。
6.2.2 标识域
包标识域(Packet Identifier Field,简写为PID),简称为标识域。
标识域紧跟在同步域之后,作用时标明包的类型和格式,并作为包的错误检测手段的一种。
由于同步域主要是由硬件来处理的,因此,标识域就是USB软件机制最先收到并处理的包的内容。
6.2.3 地址域
地址域(Address Field,简写为ADDR)内存放的是设备在主机上的地址,具有唯一性,设备和地址
是一一对应的,并且由主机分配地址。
地址域由7位二进制数组成。这也就是USB拓扑结构中最大USB设备个数为127个的原因。
6.2.4 端点域
端点域(Endpoint Field,简称ENDP),也叫做端点号。从硬件的角度看待端点,它其实就是USB中
一系列实际的物理数据缓冲区,发送和接收的数据存储在这里。端点域由4位二进制数组成,因此,一个
USB设备能够拥有的端点容量为16个。但是,并不是每一种USB设备都能够实际拥有16个端点。USB协议规定,
低速设备只能定义两个端点,即端点0和端点1(这个0和1就是端点号)。此外,除端点0以外,任何一个
端点都可以定义为IN端点或者OUT端点。
6.2.5 帧号域
帧号域(Frame Field,简写为TRAM)中的帧是时间概念。USB协议中,1帧即1ms。在USB总线上,
1帧是一个独立的单元,包含了一系列总线动作。USB将一帧分为好几份,每一份中是一个USB的传输动作。
每一个帧都有特定的帧号。帧号域由11位二进制数组成。
6.2.6 数据域
数据域(Data Field,简写为DATA)中的数据长度为0-1023字节,在不同的传输类型中,数据域的长度
各不相同。
6.2.7 校验域
CRC校验的一般做法是,发动数据的一方,对所要校验的数据进行一些运算,把结果作为CRC本身的值,
填入到CRC域中,然后发送数据。当接收方接收到数据后,也进行类似的运算,把运算的值与CRC域的值进行
比较,如果一致,表明数据传输中没有出现错误。现在很多的USB接口芯片中,CRC校验都是由硬件来完成的。
6.3 最基本的数据单元-------包
USB中定义了4种类型的包,即令牌包、数据包、握手包和特殊包。
6.3.1 令牌包
6.3.2 数据包
根据PID的不同,数据包(Data Packet)分为DATA0和DATA1两种包。两种包交替发送。
6.3.3 握手包
握手包仅由同步域SYNC和标识域PID两个域组成,用于报告数据的传输状态,比如数据是否成功接收。
6.4 数据传输类型
控制传输、中断传输、批量传输和同步传输。
不可间断的音频流数据传输,就可用同步传输方式来传输;
FAT文件等大容量的数据传输等就可以用批量传输的方式进行;
像鼠标、键盘等这种没有数据发送速度的要求,数据量又小的设备就采用的是中断传输方式;
事务按照其特点分为3种类型:输入(IN)事务、输出(OUT)事务和设置(SETUP)事务。
6.4.2 中断传输
中断传输中,USB主机是以周期性的方式对设备进行轮询,以确定设备是否有数据发送。
轮询的周期是影响鼠标等设备的定位精度等非常关键的参数。
中断传输没有固定的传输速率。
低速设备的数据包大小可以是1-8字节,全速设备的数据包大小是1-64字节,高速设备的数据包大小
则可达到1-1024字节。
低速、全速和高速设备均支持中断传输。
6.4.3 批量传输
只有全速和高速设备支持批量传输,而低速设备不支持。
6.4.4 同步传输
只有全速和高速设备支持同步传输, 而低速设备不支持同步传输。
6.4.5 控制传输
控制传输(Control Transfer)是最为复杂的传输类型,也是最为重要的传输类型,是USB枚举阶段
最主要的数据交换方式。当USB设备初次连接到主机之后,就通过控制传输来交换信息、设备地址和读取设备的
描述符。
6.5 数据流模型
6.5.1 端点
除了端点0(用作控制传输端点,默认)外,端点必须在设备被主机配置后才能使用。
6.5.2 管道
管道就是主机与设备端点之间的连接。管道包括数据流管道和信息管道2种。