USB通信基础知识
1 USB系统组成
主机:提供USB接口和接口管理功能的硬件、软件、固件的复合体。PC机或OTG设备,一个USB系统只能有一个主机
设备:1.集线器HUB:扩展主机接口,设备可以通过其接入主机 2.功能设备
物理连接:即USB电缆,USB使用差分信号传输数据,全速/高速模式电缆必须外层屏蔽铜质传输线,且差分数据线双绞。一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+、D-是差分输入线,使用的是3.3V电压,而电源线与地线可向设备提供5V电压,最大电流500mA。
2 USB拓扑结构

每个系统只允许有一个HOST(主机)。允许的最大层数为6层(出去主机);每层的电缆最大长度为5米,电缆总长度为30米;每层最大允许接5个DEVICE(设备);
3 USB系统程序
1. 应用程序:应用程序运行与USB设备所连接的主机上。部分应用程序会由操作系统的主机提供,大部分应用程序由USB设备供应商提供。
2. 驱动程序:驱动程序服务于特定的操作系统,为USB设备提供支持。驱动程序通常由操作系统提供,独立于特定的应用程序和USB设备。
3. 主机端控制程序:包括硬件和软件,使USB设备能够被主机识别。
4 USB速度选择

全速模式是在D+线上上拉1.5K的电阻。

低速模式是在D-线上上拉1.5K的电阻。
5 USB信号描述

差分信号:1:D+ > Voh(2.8V) and D- < Vol(0.3V)
0:D- > Voh and D+ < Vol
J状态: Low Speed :Differential(差分信号) 0
Full Speed :Differential(差分信号) 1
K状态: Low Speed :Differential(差分信号) 1
Full Speed :Differential(差分信号) 0
6 USB协议
6.1 USB基本规范
USB在逻辑上被分为三层:信号层、协议层、数据传输层。

6.2 信号层
6.2.1设备速度的检测


6.2.2 信号的编码
USB中的数据采用反向不归零编码方式(NRZI:none-return to zero inverted),并对D+和D-线所处的不同状态定义成J和K两种状态。
| 数据状态 | D+ | D- |
| 低速J状态 | 0 | 1 |
| 低速K状态 | 1 | 0 |
数据的编码/解码(反向不归零码)

说明:遇到0的边沿进行状态改变,如果是1保持原有状态
注:在数据进行NRZI编码前,每6个连续的1信号之后都会插入一个0信号,以免丢失同步。
6.3 协议层
包是USB系统中信息传输的基本单位,所有的数据都是经过打包后再总线上传输的。
每个包由6部分组成:同步字段(SYNC)、包标识符(PID)、地址字段(ADDR)、数据字段(DATA,包括帧号)、检验字段(CRC)、包结束(EOP)。

6.3.1 包标识符(PID)
在USB协议中,USB有很多不同类型的包,通过PID来区分,PID格式如下:
(LSB) (MSB)
| PID0 | PID1 | PID2 | PID3 | ![]() |
![]() |
![]() |
![]() |
包标识符PID是用来标识一个包的类型的。它总共有8位,其中USB协议使用的只有4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。
| PID类型 | PID名 | PID[6:0] | 描述 |
|
令牌包 (Token) |
输出(out) 输入(in) 帧起始(SOF) 建立(setup) |
0x87 0x5A 0xA5 0xB4 |
Hose To Device 包中有地址+端口号 Device To Hose 包中有地址+端口号 Hose To Device 帧开始标记和帧号 Hose To Device 建立一个控制管道的事务 包中有地址+端口号 |
|
数据包 (data) |
数据(data) 数据1(data1) |
0xC3 0xD2 |
偶数据包(PID) 奇数据包(PID) |
|
握手 (handshake) |
确认(ack) 不确认(nack) 停止(stall) |
0x4B 0x5A 0x1E |
接收器无错的接收数据包 接收设备忙不能接收数据 设备出错通信不上 |
|
专用包 (special) |
前同步(PRE) | 0x2C | 主机发送的前同步字。用来区分低速和高速设备 |
6.3.2 地址段

LSB MSB
| Addr0 | Addr1 | Addr2 | Addr3 | Addr4 | Addr5 | Addr6 |
设备地址
LSB MSB +
| Endp0 | Endp1 | Endp2 | Endp3 |
端点地址
低速设备最多支持3个端点
全速和高速设备最多支持16个IN和OUT端点
6.3.3 数据段

1 帧号有11位,主机每发出一个帧,帧号就会自加1;
2 当帧号达到7FFH时,将归零重新开始计数;
3 仅在每个SOF帧的帧首传输帧号

根据传输类型的不同,数据域的数据长度从0到1024字节不等
6.3.4 CRC校验段

令牌包(token CRC)
计算SOF Token帧号域的CRC,IN、OUT、SETUP Token地址域的CRC:
G(X) = X5 + X2 + 1
DATA CRC
所以数据域的CRC:
G(X) = X16 + X15 + X2 +1
6.4 Packet类型

6.4.1 Token Packet
LSB MSB
| Field | PID | ADDR | ENDOP | CRC5 |
| Bits | 8 | 7 | 4 | 5 |
例子:
| SYNC | SETUP | ADDR | ENDP | CRC5 | EOP |
| 00000001 | 0xB4 | 3 | 0 | 0x0A | 250.000ns |
6.4.2 SOP Packet
LSB MSB
| Field | PID | Frame number | CRC5 |
| Bits | 8 | 11 | 5 |
例子:
| SYNC | SOF | Frame # | CRC5 | EOP |
| 00000001 | 0xA5 | 1611 | 0x11 | 250.000ns |
6.4.3 Data Packet
LSB MSB
| Field | PID | DATA | CRC16 |
| Bits | 8 | 0~1024 | 16 |
例子:
| SYNC | PID | DATA | CRC16 | EOP |
| 00000001 | 0xC3 | 80 06 00 01 00 00 12 00 | 0x072F | 250.00ns |
6.4.4 Handshake Packet

例子:
| SYNC | ACK | EOP |
| 00000001 | 0x4B | 233.330ns |
6.5 数据传输层
USB提供4中传输方式
控制传输(control transfers):突发,非周期性,由主机发起,用于命令和状态的传输
同步传输(isochronous transfers):周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息
中断传输(interrput transfers):周期性,低频率,允许有限延迟的通信
大容量数据传输(bulk transfers):非周期性,大容量突发数据的通信,数据可以占用任意带宽,并容忍延迟
6.6 USB枚举过程
当一个USB设备插入主机后,会有以下活动:
| 供电 |
| 复位 |
| 获取device descriptor |
| 复位(可选) |
| 分配地址 |
| 获取(device descriptor) |
| 获取(configuration descriptor) |
| 获取(string descriptor)(可选) |
| 配置 |
6.6.1 USB描述符
通过一套描述符,USB设备向USB主机描述自己的功能、属性、配置信息等
标准描述符:
设备描述符(device descriptor)、配置描述符(configuration descriptor)、接口描述符(interface descriptor)、端点描述符(endpoint descriptor)、字符串描述符(string descriptor)
6.6.1.1 设备描述符
描述设备的类型、厂商信息、USB的协议类型、端点的包数据的最大长度等,每个USB设备只有一个设备描述符。

eg:
Joystick_DeviceDescriptor[]=
{
0x12, //整个descriptor的长度;18个字节
0x01, //descriptor类别
0x00,0x02, //设备所遵循的USB版本号 USB2.0
0x00, //设备所实现的类,由每个接口描述符描述所实现的类
0x00, //设备所实现的子类,由每个接口描述符描述
0x00, //设备所遵循的协议类别,由每个接口描述符描述
0x40, //端点0的最大数据包长度,64个字节
0x83,0x04, //供应商ID 0x0483
0x10,0x57, //产品ID 0x5710
0x00,0x02; //设备版本号 2.0
1, //用于描述生成厂商的字符描述符的索引号
2, //用于描述产品的字符描述符的索引号
3, //用于描述产品序列号的字符描述符的索引号
0x01 //设备所支持的配置数目
}
6.6.1.2 配置描述符
每个配置描述符提供了设备特定的配置,描述了设备的接口和端点的性质、供电模式、设备的耗电

6.6.1.3 接口描述符
描述了设备不同接口的特性,例如一个设备有U盘的功能又有键盘的功能,用两个接口描述符分别描述两个功能

6.6.1.4 端点描述符

6.6.1.5 字符串描述符
描述了设备制造商、设备名称、和序列号等信息

6.7 EXAMPLE FOR DESCRIPTOR

USB通信基础知识的更多相关文章
- USB相关知识
USB基础知识概论 如何实现Linux下的U盘(USB Mass Storage)驱动: How to WriteLinux USB MSC (Mass Storage Class) Driver U ...
- USB基础知识概论(版本:v0.9.2)
源: USB基础知识概论
- 第2章 2.n物理层--数据通信基础知识总结
数据通信基础知识总结
- USB基础知识
Q: USB是什么? A: USB是通用串行总线(Universal Serial Bus)的缩写. Q: USB的优点有哪些? A: ① 支持热插拔:(hot-plugging或Hot Swap)即 ...
- USB2.0学习笔记连载(二):USB基础知识简介
USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...
- (转)USB 基本知识
USB的重要关键字: 1.端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点.输出端点.配置端点.批量传输端点) ...
- usb基础知识以及枚举过程介绍
一个USB设备有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置描述符对应着配置描述符:而在配置描述符中又定义了该配置里面有多少个接口,每个接口有对应的接口描述符:在接口描述符里面又定 ...
- OSI物理层之数据通信基础知识
@ 目录 物理层的基本概念 物理层的主要任务 数据通信的基础知识 典型的数据通信模型 相关术语 信道的基本概念 基带(base band)信号和带通(band pass)信号 几种最基本的调制方法 常 ...
- STM32 串口通信基础知识
1.串口通信简介 通信接口的两种方式: 并行通信 -传输原理:数据各个位同时传输. -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输. -优点:占用引脚资源少 -缺点:速 ...
随机推荐
- opencv之模糊处理
初学OpenCV的开发者很容易被OpenCV中各种滤波方法所困扰,不知道到底该用哪里一个来做滤波.表面原因看起来是因为OpenCV中各种滤波方式实在是太多太杂, 其背后原因是对各种滤波方法的应用场景认 ...
- 编写一个程序解决选择问题。令k=N/2。
import java.util.Arrays; /** * 选择问题,确定N个数中第K个最大值 * @author wulei * 将前k个数读进一个数组,冒泡排序(递减),再将剩下的元素逐个读入, ...
- mac快捷键留存查看
基本的快捷键 Command是Mac里最重要的修饰键,在大多数情况下相当于Windows下的Ctrl.所以以下最基本操作很好理解: Command-Z 撤销 Command-X 剪切 Command- ...
- day1 hbuilder的使用
一.互联网的原理 1.概述 html:用来制作网页. 互联网原理:上网即请求数据. 用户通过在浏览器上输入一个网址,通过HTTP协议向服务器发送请求,服务器做出响应,将相关的网页数据传输到本地计算机, ...
- html5-figure和figcaption元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- python 试题归纳及答疑 更新中.....
一.Python基础篇(80题) 1.你为什么学习Python? 一.答题思路 1.阐述 python 优缺点 2.Python应用领域说明 3.根据自身工作情况阐述为什么会使用python 1)py ...
- css 箭头
.toTop{ width: 2.5rem; height: 2.5rem; background-color: rgba(228,228,228,.6); position: fixed; bott ...
- 刨根究底字符编码之—UTF-16编码方式
在网上已经转悠好几天了, 这篇文章让我知道了UTF-16的前世今生, 感谢作者https://cloud.tencent.com/developer/article/1384687 1. UTF-16 ...
- 20165305 苏振龙《Java程序设计》第八周课上测试补做
1. 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截图 2. ...
- pip使用简要说明
一.pip常用命令 安装指定包 pip install SomePackage #最新版本 安装指定包 pip install SomePackage==1.0.4 #指定版本 安装指定包 pip i ...



