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. python快速开发Web之Django

    以前写测试框架,要么是纯python代码驱动的,要么是WinForm界面的框架,多人操作并不适合. 就想用python写个Web版的,于是想到了Web快速开发的框架Flask和Django两个 个人觉 ...

  2. numpy&pandas笔记

    1.基础属性: array = np.array([[1,2,3],[2,3,4]]) #列表转化为矩阵 print('number of dim:',array.ndim) # 维度 # numbe ...

  3. shell编程:for循环

    有几个参数执行几次 do done取代了{} 这种用于 文件的个数,用户的个数等. (())里才可以进行加减乘除.

  4. aop编程之后置通知,环绕通知和异常通知

    ---恢复内容开始--- 此将实例将在上一讲前置通知的基础上进行配置,前置配置内容:http://www.cnblogs.com/lihuibin/p/7955947.html  具体流程如下: 1. ...

  5. .NET 黑魔法 - asp.net core 配置文件的"对象存储"

    来,全都是干货. 我们都知道在Framework版本的mvc项目中,配置数据是通过web.config里的appSettings节点配置,我们不得不写一些读取配置文件字符串的类,比如保存在静态的变量中 ...

  6. caffe的运行create_data.sh前对VOC2007图片格式的更改

    运用caffe进行深度学习之前需要对图片进行预处理,将图片的大小,格式等进行修改 将300*300的图片改为256*256格式 则将以下参数改为: min_dim=256 max_dim=256 wi ...

  7. c#如何判断字符串是否含中文

    如代码: static bool ContainChinese(string input) { string pattern = "[\u4e00-\u9fbb]"; return ...

  8. NetSpeed

    NetSpeed公司提供的NOC包括三部分,可以通过NocStudio进行配置生成. 1)NetSpeed Orion,面向快速SoC design的可综合平台. 2)Linley NetSpeed ...

  9. CSS选择器的优先级及权重问题【CSS核心问题】及其它属性

    1.CSS选择器优先级:    !important >行间样式> id >class和属性选择器>标签选择器>通配符选择器        注意:[初级工程师水平] 2. ...

  10. STL容器之set

    [1]set容器 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. [2]set容器方法 (1)set构造函数.插入函数.遍历过程 应用示例代码如下: #include <set& ...