USB协议基础知识笔记
usb协议
功能层: 控制传输、中断传输、块传输(批量传输)、同步传输
设备层:管理USB设备、分配地址、读取设备描述符
总线接口层:采用NRZI编码-反向非归零编码(0将前一个电平翻转,1不翻转)
电气特性
电压:4.75~5.25V
电流:USB2.0高输出功率最大500mA、低输出功率最大100mA、 USB3.0最大输出900mA
USB事务
usb事务处理是主机和设备数据通信的基础。由: 令牌阶段、数据阶段、握手阶段组成。
常用字段
同步字段(SYSC): 每个信息包以SYSC开始,低速/全速同步字段长度为8位,数据为10000000B,从低位开始发送。高速同步字段长度为32位,数据为80000000H。
包标志字段(PID):字段长度为8位,低4位类型字段和高4位校验字段组成,校验字段是类型字段的补码,可验证数据的正确性。4种信息包类型: 令牌包、握手包、特殊包和数据包。
包类型 PID[3:0] 二进制 包名 说明 令牌包 1001 OUT PID 数据从主机发送到设备 0001 IN PID 数据从设备发送到主机 0101 SOF PID 作为帧的开始信息 1101 SETUP PID 主机向设备发送的配置信息 握手包 0010 ACK PID 接收方正确接收到数据 1010 NACK PID 接收方未能正确接收到数据 1110 STALL PID 使用的端点被挂起 0110 NYET PID 接收方没有任何响应 数据包 0011 DATA0 PID 数据包为偶数据包 1011 DATA1 PID 数据包为奇数据包 0111 DATA2 PID 高速同步事务专用数据包 1111 MDATA PID SPLIT事务专用数据包 特殊包 1100 PRE PID 令牌,主机发送先导包,使能低速通信 1011 ERR PID 握手信息,SPLIT事务中的错误握手信号 1000 SPLIT PID 高速SPLIT事务的令牌信息 0100 PING PID 数据流量检测控制
地址字段: 长度为7位,共128个地址值。地址0缺省,实际只有127个地址。在USB上电的时候主机先通过缺省地址0和usb设备进行通信,配置完成后,主机重新为设备分配一个地址。
端点字段: 长度为4位,总共可表示16个端点。低速:3个端点, 高速/全速:16个端点。,端点0是所有USB设备必须的,主要在设备上电初期和USB主机进行通信、完成配置。
帧号字段: 长度为11位,最大值07FFH,表示当前帧的帧号,每个帧发送的时候,该字段加1
数据字段: 最大长度1024字节,长度由传输类型和程序的需要决定。首先传输低字节,再传输高字节。
CRC字段: 循环冗余校验字段。一般在发送方进行位填充之前进行。令牌包一般采用5位CRC校验;数据包采用16位CRC校验。
令牌包
IN令牌包: PID字段+ADDR字段+ENDP字段+CRC字段 数据从 设备 到 主机
PID: 数据从设备发送至主机
ADDR:USB设备地址
ENDP: 发送数据的端点号
CRC: ADDR和ENDP字段进行校验
OUT令牌包: PID +ADDR + ENDP + CRC 数据从 主机 到 设备
SETUP令牌包: PID + ADDR + ENDP + CRC 数据从主机 到 设备, 配置信息
PING令牌包: PID +ADDR + ENDP + CRC 数据从 设备 到 主机, 握手信号传输
PRE令牌包: PID 低速数据传输先导包,在开始发送数据之前必须先发送该包(主机与集线器之间进行传输)。
数据包: PID + 数据字段 + 16位CRC PID指定数据包DATA0-DATA2或MDATA。数据字段的长度根据协议规定:低速最大长度8字节,全速最大长度 1023字节,高速最大长度1024字节
握手包:PID 接收方反馈状态给发送方
事务处理
IN事务处理
主机发送IN令牌包: SYNC+IN+EOP
设备发送数据包: SYNC+数据包+EOP
主机发送握手包: SYNC+确认+EOP
OUT事务处理
主机发送OUT令牌包: SYNC+OUT+EOP
主机发送数据包: SYNC+数据包+EOP
设备发送握手包: SYNC+确认+EOP
3.SETUP事务处理(利用其对设备进行配置,常用于建立阶段)
主机发送SETUP令牌包: SYNC+SETUP+EOP
主机发送数据包: SYNC+DATA0+EOP
设备发送握手包: SYNC+确认+EOP
4.PING事务处理(主要用于高速数数据传输中)
主机发送PING令牌包: SYNC+PING+EOP
设备发送握手包: SYNC+确认+EOP
5.SOF事务处理
主机主动发送。低速或者全速usb传输,每隔1ms产生一个SOF令牌包,对于高速传输,每
隔125us产生一个小帧,每隔7个小帧,产生一个SOF令牌包,不需要握手包。
USB设备的状态
连接状态: usb总线开始向usb设备供电,直到电源稳定。
上电状态: usb设备处于上电状态,当没有被复位
缺省状态: usb设备响应usb主机发出的复位信号,进行复位操作,复位结束后,设备进入缺省状态。该状态下:电流小于100mA,并且使用缺省的设备地址对一些usb事务进行处理。
地址状态: 复位结束后,usb主机重新为设备分配一个唯一的地址。
配置状态: 主机发出setconfiguration请求。
挂起状态: usb设备在3ms内没有检测到总线活动,自动进入挂起状态,保持原有的地址和配置。
USB数据传输
块传输: 适用于传输大量且对传输时间和传输速率没有要求的场合。数据包长度 -- 全速端点,可以是8、16、32、64字节;高速端点只能是512字节。数据量如果超过最大的数据包长,主控制器会将其分成多个块事务处理。处理过程:
令牌 >> 数据 >> 握手
第一个数据包为DATA0,第二个应该是DATA1,之后可以是DATA0/DATA1
中断传输: 适用于传输少量或对数据处理有周期要求的场合。数据长度 -- 低速端点最大数据包长度8字节;全速端点最大为64字节;高速端点为1024字节。
同步传输: 只能用于全速、高速设备。适用于传输大量、速率恒定的,且对周期有要求的数据。例如:音频、视频等。数据长度 -- 全速端点最大为1023字节;高速端点最大为1024字节
控制传输: 主要用于传输少量的,对传输时间和传输速率均无要求、但必须保证传输的数据。数据长度 -- 低速端点最大为8字节;全速端点可谓8、16、32、64字节;高速端点只能是64字节。
建立阶段 + 数据阶段 + 状态阶段
USB设备配置
设备描述符:表示USB设备的总体信息,一个USB设备只有一个设备描述符。固定18字节。
配置描述符: USB设备可以有一个或者多个配置,每个配置必须有一个配置描述符。固定9字节。
字符串描述符: 可选。用于保存供应商的名称、产品序列等文本信息。
接口描述符: 接口为端点的集合,负责完成该USB设备的特定功能。固定9字节。
端点描述符: 指出端点的特性。固定7字节。
设备限定描述符: 设备既需要告诉传输也需要全速传输,则必须支持设备限定描述符。固定10字节。
其他速率配置描述符: 既采用高速传输又采用全速传输,则必须支持该描述符。固定9字节。
USB协议基础知识笔记的更多相关文章
- USB协议基础知识
ref : https://blog.csdn.net/u010142953/article/details/82627591 USB 基本知识 USB的重要关键概念: 1. 端点:位于USB设备 ...
- USB入门基础知识(转)
源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交 ...
- 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识
第33章 SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...
- 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
第16章 UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...
- JS基础知识笔记
2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...
- Java多线程基础知识笔记(持续更新)
多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...
随机推荐
- Wireshark理解TCP乱序重组和HTTP解析渲染
TCP数据传输过程 TCP乱序重组原理 HTTP解析渲染 TCP乱序重组 TCP具有乱序重组的功能.(1)TCP具有缓冲区(2)TCP报文具有序列号所以,对于你说的问题,一种常见的处理方式是:TCP会 ...
- ubuntu配置
首先就是Ubuntu的更新源问题,需要更改,否则更新不了. 其次就是Securecrt的远程登陆问题,windows主机和ubuntu虚拟机如果能通信,要求在同一网段上,而ubuntu是动态加载,需要 ...
- Hdfs读取文件到本地总结
总结了一下三个方法:hdfs自带 按字节复制 按行复制 (在java io里还有字符复制,暂且不提) 因为hdfs自带的,不知道为什么有些场合不能用,每次能下载的个数还不一定,所以就考虑自己按照jav ...
- dojo省份地市级联之地市Dao接口类(四)
dojo省份地市级联之地市Dao接口类 CityDao.java: /** * 地市 */ package com.you.dao; import java.util.List; import com ...
- FusionCharts中图的属性的总结归纳
FusionCharts中图的属性的总结归纳 1.横坐标label间隔显示 labelStep="4" 2.柱状图有椭圆角 useRoundEdges="1"
- mysql字符串连接
用SQL Server 连接字符串是用“+” 现在数据库用mysql, 写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作, ...
- Java之split()方法
Java之split()方法 1.方法介绍 (1)public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 (2)public String[] s ...
- org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir
1.错误描述 org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir svn: Co ...
- 芝麻HTTP:批量部署Splash负载集群
安装Ansible: 看官方文档去:http://www.ansible.com.cn/index.html 好像这个主控端不支持Windows? 大家虚拟机装个Ubuntu吧. 闲话少扯直接上干货: ...
- ASP.NET CORE入门之读取Json配置文件
首先新建一.net core控制台项目,命名为jsonReader 然后选中引用,选择NuGet包管理器,点击浏览引入mircosoft.aspnetcore.all并安装 选中解决方案,填加,新建项 ...