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通信基础知识的更多相关文章

  1. USB相关知识

    USB基础知识概论 如何实现Linux下的U盘(USB Mass Storage)驱动: How to WriteLinux USB MSC (Mass Storage Class) Driver U ...

  2. USB基础知识概论(版本:v0.9.2)

    源: USB基础知识概论

  3. 第2章 2.n物理层--数据通信基础知识总结

    数据通信基础知识总结

  4. USB基础知识

    Q: USB是什么? A: USB是通用串行总线(Universal Serial Bus)的缩写. Q: USB的优点有哪些? A: ① 支持热插拔:(hot-plugging或Hot Swap)即 ...

  5. USB2.0学习笔记连载(二):USB基础知识简介

    USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...

  6. (转)USB 基本知识

    USB的重要关键字: 1.端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点.输出端点.配置端点.批量传输端点) ...

  7. usb基础知识以及枚举过程介绍

    一个USB设备有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置描述符对应着配置描述符:而在配置描述符中又定义了该配置里面有多少个接口,每个接口有对应的接口描述符:在接口描述符里面又定 ...

  8. OSI物理层之数据通信基础知识

    @ 目录 物理层的基本概念 物理层的主要任务 数据通信的基础知识 典型的数据通信模型 相关术语 信道的基本概念 基带(base band)信号和带通(band pass)信号 几种最基本的调制方法 常 ...

  9. STM32 串口通信基础知识

    1.串口通信简介 通信接口的两种方式: 并行通信 -传输原理:数据各个位同时传输. -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输. -优点:占用引脚资源少 -缺点:速 ...

随机推荐

  1. java基础(四) -变量类型

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ; 格式说明:ty ...

  2. es6generator

    yield语句 由于Generator函数返回的遍历器对象,只有调用next方法才会遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数.yield语句就是暂停标志. yield语句只能用在 Ge ...

  3. talend openstudio 在OracleInput组件中guess Schema 出现Database connection is failed 的错误

    错误描述: talend openstudio 在OracleInput组件中guess Schema 出现Database connection is failed 的错误. 查看错误详情,发现错误 ...

  4. [ Learning ] Spring Resources

    1. Spring MVC Spring MVC原理及配置详解 springMVC系列之(三) spring+springMVC集成(annotation方式) Mybatis3+Spring4+Sp ...

  5. Java基础(basis)-----关键字break、continue、return的区别

       1.break      break只能用于switch语句和循环语句中,跳出当前循环:但是如果是嵌套循环, 则只能跳出当前的这一层循环,只有逐层break才能跳出所有循环 for (int i ...

  6. SLAM学习笔记 - 视觉SLAM方法资源汇总

    工具类: ros框架 linux系列教程     vim Eigen     Eigen快速入门 Pangolin  Pangolin安装与使用 数据集: TUM         数据格式 提供pyt ...

  7. python os.path.splitext()

    # Split the file extension 可以把扩展名获取出来

  8. xmldecoder漏洞

    https://blog.csdn.net/youanyyou/article/details/78990312

  9. subwoofer

    外文名:subwoofer 中文名:重低音音箱 俗    称:低音炮 归    类:音乐器材别    称:重低音音箱 低音炮是大家的一个俗称或者简称,严格讲应该是:重低音音箱.重低音其实是电子音乐里, ...

  10. WordConuts

    import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.uti ...