-
2021-01-14 16:15:41
目录
声明:前面和后续提到的OUT和IN都是对主机而言的。
1.前言
前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,上一节我们讲了控制传输细节及事务组成,今天我们主要讲解同步传输及事务组成。
同步传输用在数据量大、对实时性要求高的场合,例如音频设备、视频设备等,这些设备对数据延迟很敏感,对于音频和视频设备来说,数据的 100% 正确要求不高,少量的数据错误还是能够容忍的,主要的是保证不能停顿;所以等时传输是不保证数据100% 正确的。当数据错误时,并不进行重传操作。因此等时传输也就没有应答包。数据是否正确,可以由数据包的 CRC 校验来确认,至于出错的数据如何处理,由软件决定。
同步传输主要包括同步读传输、同步写传输两种,传输事务如下图。
2.同步传输的结构
同步传输的事务比较简单,有只有1个阶段,数据阶段。
主机如果是同步读数据请求,则数据阶段为一个或者多个IN事务(同步传输事务,事务到后面讲解);
主机如果是同步写数据请求,则数据阶段为一个或者多个OUT事务;
数据阶段是由一到多个IN/OUT事务组成。这是由于有时候存在一个事务传不完的数据,所以可能存在多个连续IN/OUT事务的情况,在同一次数据传输阶段中事务类型(读写)必定相同。3.抓包分析
3.1同步读传输抓包分析
因为是设备给主机传输数据,所以是数据阶段是IN事务。
3.2同步写传输抓包分析
因为是主机给设备传输数据,所以是数据阶段是OUT事务,和上图方式一样,只是IN变为了OUT,这里不再贴图。
4.同步传输各速率下支持最大包长度
同步传输不支持在低速下,高速最大包长度为1024字节,全速下为1023字节。
5.同步传输事务组成
6.传输、事务、包组成学习架构图
本架构图后期再学习中会一步一步更新,每一节之后也会逐步完善并更新,最后会完整的展示出来传输、事务、包的结构,让大家在学习过程中对协议框架不混乱。
1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。
2.未经原作者允许不得转载本文内容,否则将视为侵权;
3.转载或者引用本文内容请注明来源及原作者;
4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。
下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。
更多相关内容 -
USB通信协议——传输类型
2020-11-13 06:29:39而其中,4种数据传输的每一个能够掌握不同的需求。在此,根据不同外围设各的类型与应用,定义了4种传输类型,分别是控制传输(control transfer)、中断传输(interrupt transfer)、批量传输(bulk transfer)以及... -
位填充导致USB数据传输紊乱的一种解决方案
2021-04-18 10:26:09通用串行总线(USB)数据传输中要对数据进行非归零翻转(NRZI)编解码、添加/去除位填充和串并/并串转换。添加/去除位填充使每字节数据传输所需的时间发生变化,再加上收发器与协议层的时钟频率不同,从而可能导致... -
简单说说USB协议(三)四种传输方式
2019-08-02 21:56:40既然USB是用来进行数据传输的,那么必然会涉及到配置传输方法: 批量传输、中断传输、同步传输、控制传输。 1、批量传输 适用于数据量大,对数据实时要求不高的场合; 比如USB打印机,扫描仪,大容量存储设备等...数据传输的大致步骤:
配置传输方法——选择事务——发送各种令牌、数据、握手包
传输方法
既然USB是用来进行数据传输的,那么必然会涉及到配置传输方法:
批量传输、中断传输、同步传输、控制传输。
1、批量传输
适用于数据量大,对数据实时要求不高的场合;
比如USB打印机,扫描仪,大容量存储设备等;
当是批量出入事务时:
当是批量输出事务时:
而在USB2.0协议中,还多了一种特殊的传输事务:
2、中断传输
适合于数据量不大,对时间实时要求严格的场合
比如有鼠标、键盘、轨迹球等;
这里的中断并不是外部触发对的中断,而是主机自发的,主机要先确定查询频率,然后在此期间安排一次传输,如此一来就保证了查询频率。
中断传输中对应的事务是中断事务:
3、同步传输
同步传输又称为等时传输,适用于数据量大,对实时要求高的场合。
比如音频、视频等;
等时传输中是没有应答握手包的,那么传输数据的对错有数据包中的CRC检验。
4、控制传输
在采用USB通信协议中,主机需要获取设备的各种描述符,设置设备地址,配置各种参数等等,这些操作一般用的都是控制传输。
相比于上面三种传输方法,控制传输看起来有点复杂,但也正是这种复杂,保证了传输中的数据完整性。
枚举
配置完出传输方法后,就需要进行数据传输了,那么需要传输的到底是什么数据呢?
就是主机从设备那里获取到的各种描述符,如设备描述符、配置描述符、接口描述符、端点描述符,这一个过程,称之为枚举。
以下是枚举过程的步骤:
1、检测到有USB设备接入,复位USB设备,将其地址复位为0地址;
2、通过0地址的0端口获取设备描述符;
3、对USB设备再一次复位,给其设置唯一地址;
4、主机通过设备的新地址再一次获取设备描述符;
5、获取设备配置集合,在这个集合中就有设备的配置描述符、接口描述符、端点描述符、类特殊描述符(这个有可能没有);
-
USB通信协议——传输
2020-11-13 06:27:35PC主机为了能下达命令,或是传输数据给外围设各,基本上,就必须有一套标准的USB通信协议来实现这个目的。如图所示,为PC主机与设备执行通信协议的整体结构。这个结构相当重要。图中显示了一个通信协议所需包含的... -
开源STM32F4xx自定义USB数据传输.zip
2020-10-22 14:31:56stm32F4xx系列运用usbcdc传输与pc通讯,支持Windows,Linux,Android,速度可达到1Mbyte/s,包含stm32端程序代码和pc端程序代码。只有简单的收发测试。stm32程序在firmware.rar里,pc端在USBTransmitTest.rar。 -
USB数据传输
2021-03-23 08:54:48在USB系统中,正常状态下根集线器或集线器会一直周期性地发送SOF包,高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms。如果USB线上一直处于空闲(Idle)状态超过3ms,设备应该把它当作一个挂起...帧
在USB系统中,正常状态下根集线器或集线器会一直周期性地发送SOF包,高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms。如果USB线上一直处于空闲(Idle)状态超过3ms,设备应该把它当作一个挂起(Suspended)信号,要求设备在10ms内进入挂起状态,并把设备所需的电流大小降到规定的值。设备处于挂起状态时,任何总线上的活动(非空闲信号)都可以把设备唤醒/恢复,从而退出低功耗模式。主机需要继续周期性地发送SOF包,否则设备又将进入suspend。
包结构
USB是以包为单位进行传输的,包只能在帧内传输。一个包包含多个域,不同的包包含不同的域,但都是以同步域(SYNC)开始,紧跟着包标识符(PID),最终以包结束符(EOP)结束。
同步域:表示包要开始传输了,同时可以用来同步主机和设备的时钟。对于低速设备和全速设备,同步域使用的是00000001b;对于高速设备,同步域使用的是31个0后面跟1个1。
包标识符:表示数据包类型。总共8bit,bit0~3表示PID值,bit4~7为PID的取反,用来校验PID。如上图PID为0101,表示SOF包。
包结束符:表示数据包结束。
包类型
USB协议规定了四类包:令牌包(token)、数据包(data)、握手包(handshake)和特殊包(special)。
令牌包:用来启动一次传输。由于USB是主从结构,一个USB主机可以对应多个设备,因此每次开启传输之前必须先使用令牌包和目标设备进行握手,告知设备本次传输的功能是什么、由谁来响应。
令牌包有4种:输出(OUT)、输入(IN)、建立(SETUP)和帧起始(SOF)
- 输出:通知某设备的某端点,主机将要输出一个数据包,请准备查收。
- 输入:通知某设备的某端点,准备向主机输入一个数据包,请准备发送。
- 建立:通知某设备的某端点(只能是端点0),主机将要输出一个数据包(只能是DATA0),该数据包是一个请求,请准备查收。
- 帧起始:USB周期性发送帧起始包,全速设备每毫秒产生一个帧。USB主机会对当前帧号进行计数,通过SOF包发送帧号。
数据包:用来传输数据。主机和设备都会维护自己的一个数据包类型切换机制,以解决握手包被损坏的情形:当数据包成功发送或者接收时,数据包类型切换。如果对方下一次使用的数据包类型跟自己不一致,则说明它刚刚已经成功接收到数据包;如果对方下一次使用的数据包类型跟自己一致,则说明刚刚的数据包没有发送成功,这是上一次的重试操作。
握手包:用来表示一个传输是否被对方确认。
- ACK:表示正确接收数据。
- NAK:没有数据返回,或数据正确接收但没有足够空间容纳。主机接收到NAK后,会在合适时机重传。
- STALL:设备无法执行这个请求,或端点已经被挂起。
- NYET:本次数据已经正确接收,但没有足够空间来接收下一次数据。
事务
由于USB是主从结构,每一次交互都必须由主机发起,这样的过程称为一次事务:
- 主机通过令牌包发起。
- 数据包传送数据(可选)。
- 最后由接收者通过握手包确认。
传输
USB协议规定了4种传输类型:批量传输、等时传输、中断传输和控制传输。传输由一个或多个事务组成,其中批量传输、等时传输和中断传输都是一个事务;控制传输包括三个事务。
批量传输:批量传输没有规定数据包中数据的意义和结构,具体的数据结构要由设备自己定义。通常用在数据量大、对数据的实时性要求不高的场合。批量传输分为:批量输出传输和批量输入传输。
- 批量输出传输:由OUT令牌包发起的一次事务。
- 批量输入传输:由IN令牌包发起的一次事务。
中断传输:中断传输是一种保证查询频率的传输。主机保证在不大于某个时间间隔内安排一次传输事务。中断传输通常用在数据量不大,但是对时间要求严格的设备中。
等时传输:等时传输用在数据量大、对实时性要求高的场合。等时传输过程中,主机不断安排传输事务。出现数据错误的时候不进行重传,因此也就没有应答包。
控制传输:控制传输分为三个过程,建立过程、数据过程(可选)和状态过程。
- 建立过程:由SETUP令牌包发起的一次事务(只能发给端点0,只能使用DATA0)。
- 数据过程:数据过程是可选的,可以没有、包含一个或多个事务。数据过程第一个数据包必须是DATA1包,然后每次正确传输一个数据包后就在DATA0和DATA1之间交替。
- 状态过程:状态过程的传输方向和数据过程是相反的,状态过程只使用DATA1包。
端点
每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对USB设备进行访问。但是在设备内部地址会被分的更细,设备会分出一些端点来,每个端点在设备都会有唯一的端点号,这个端点号是设计设备时给定的。
- 端点号:一个设备最多可以包含16个端点,端点号为0-15。(每个USB设备必须要有端点0)
- 方向:其中每个端点地址对应一个方向。(端点0是双向的,既可以给主机发送数据,也可以从主机接收数据)
- 属性:一个具体的端点只能工作在一种传输模式下。例如:控制端点、批量端点、中断端点、等时端点。(控制端点0,作为对设备枚举和对设备进行基本的控制功能)
控制端点:低速模式下,固定最大包长为8字节;全速模式下,可选8、16、32、64字节为最大包长;高速模式下,固定最大包长为64字节。
等时端点:低速模式下,不支持等时传输;全速模式下,最大包长上限为1023字节;高速模式下,最大包长上限为1024字节;。
中断端点:低速模式下,最大包长上限为8字节;全速模式下,最大包长上限为64字节;高速模式下,最大包长上限为1024字节。
批量端点:低速模式下,不支持批量传输;全速模式下,可选8、16、32、64字节为最大包长;高速模式下,固定最大包长为512字节。
-
1.USB协议简介
2017-08-28 23:20:16最近学习usb相关的知识,一直感觉入不了门,看《linux那些事儿之我是usb》,对usb协议也不是很熟悉,没能坚持看下去,直到看了《圈圈教你玩usb》一书,把自己的兴趣立马提了起来,大牛圈圈用51单片机实现了usb鼠标...最近学习usb相关的知识,一直感觉入不了门,看《linux那些事儿之我是usb》,对usb协议也不是很熟悉,没能坚持看下去,直到看了《圈圈教你玩usb》一书,把自己的兴趣立马提了起来,大牛圈圈用51单片机实现了usb鼠标键盘等设备,让人非常佩服,51单片机自己还是很熟悉,大学玩了四年单片机,单片机来实现立马感觉亲切了许多,决定先从单片机入手学,后面再看linux那些事儿之我是usb,深入学习linux内核下usb,以下先介绍usb协议,内容整理来自usb spec、网络和圈圈书中,文中也大量引用STM32官方的USB2.0协议文档,欢迎批评指正。另外学习《圈圈教你玩usb》动手调试实现了单片机usb鼠标功能,源码在mcu_project/USB at master · lisongze2016/mcu_project · GitHub,源码中结合使用了linux kernel ch9.h中对描述符的结构体定义,对usb协议有了深入的理解。
对裸机的usb协议有一定熟悉后,建议可以学习tinyusb开源协议栈(GitHub - hathach/tinyusb: An open source cross-platform USB stack for embedded system),支持rtos,样例比较丰富,对usb相关开发有一定帮助。
USB(Universal Serial Bus)全称通用串口总线,USB为解决即插即用需求而诞生,支持热插拔。USB协议版本有USB1.0、USB1.1、USB2.0、USB3.1等,USB2.0目前比较常用,以下以2.0为主介绍。由于USB是主从模式的结构,设备与设备之间、主机与主机之间不能互连,为解决这个问题,扩大USB的应用范围,出现了USB OTG,全拼 ON The Go。USB OTG 同一个设备,在不同的场合下可行在主机和从机之间切换。1.1 USB特点:
USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/bs的全速模式。在USB2.0以上支持480Mb/s的高速模式。应用如下:
1.2 USB设备供电方式:
USB设备有两种供电方式
自供电设备:设备从外部电源获取工作电压
总线供电设备:设备从VBUS(5v) 取电
对总线供电设备,区分低功耗和高功耗USB设备
低功耗总线供电设备:最大功耗不超过100mA
高功耗总线供电设备: 枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA
设备在枚举过程中,通过设备的配置描述符向主机报告它的供电配置(自供电/总线供电)以及它的功耗要求
如下 USB 配置描述符(以Joystick为例),后面具体介绍:1.3 USB总线信号:
USB使用的是差分传输模式,两个数据线D+和D-
差分信号1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V)
差分信号0:D- > VOH and D+ < VOLJ状态(高电平):D+ 高,D- 低
K状态(低电平):D+低,D- 高
SEO状态:D+ 低,D- 高
Reset信号:D+ and D- < VOL for >= 10ms
主机在要和设备通信之前会发送Reset信号来把设备设置到默认的未配置状态。即主机拉低两根信号线(SE0状态)
并保持10ms
Idle状态:J状态数据发、送前后总线的状态
Suspend状态:3ms以上的J状态
SYNC: 3个KJ状态切换,后跟随2位时间的K状态(看到的波形变化是总线上发送0000 0001经过NRZI编码后的波形)Resume信号:20ms的K状态+低速EOP
主机在挂起设备后可通过翻转数据线上的极性并保持20ms来唤醒设备,并以低速EOP信号结尾
带远程唤醒功能的设备还可自己发起该唤醒信号;前提是设备已进入idle状态至少5ms,然后发出唤醒K信号,维持1ms到15ms并由主机在1ms内接管来继续驱动唤醒信号
SOP:从IDLE状态切换到K状态
EOP:持续2位时间的SE0信号,后跟随1位时间的J状态
Keep alive即低速EOP信号1.4 USB插入检测和速度检测:
主机通过设备在D+或D-上的1.5K上拉来检测设备的连接和断开事件,并由此判别设备的速度
主机先把高速设备检测为全速设备,然后再通过“Chirp序列”的总线握手机制来识别高速和全速设备
USB连接和断开连接:
设备连上主机时(连接)
当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了
主机必需在驱动SE0状态以复位设备之前,立刻采样总线状态来判断设备的速度没有设备连上主机时(断开)
D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态1.5 数据编解码和位填充
USB采用NRZI(非归零编码)对发送的数据包进行编码
输入数据0, 编码成“电平翻转”
输入数据1, 编码成“电平不变”
编码出来的序列,高电平:J状态;低电平:K状态位填充是为了保证发送的数据序列中有足够多的电平变化
填充的对象是(输入数据),即先填充再编码
数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码
数据出现电平变化
接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们2. USB传输
一个传输有多个事务组成,一个事务由2/3个包组成。
传输又分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。
注意:USB传输数据先发数据低位再发高位数据2.1 包
包的组成:包的内容:
Packet分四大类: 命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) Packet
不同类型包,以上的组成部件有所不同
PID:
这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验PID
PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包地址:
帧号:
数据:
CRC:
四种Packet类型之令牌包(Token Packet):
令牌包用来启动一次USB传输。
输出(OUT)令牌包:用来通知设备将要输出一个数据包
输入(IN)令牌包:用来通知设备返回一个数据包
建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:
SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制例子:
四种Packet类型之SOF Packet
帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。例子:
0xA5:1010 0101:对应上面PID表可知是帧起始包
四种Packet类型之Data Packet例子:
四种Packet类型之Handshake Packet
例子:
2.2 事务
Transaction可以分成三类
Setup transaction:主机用来向设备发送控制命令
Data IN transaction:主机用来从设备读取数据
Data OUT transaction:主机用来向设备发送数据
Transaction的packet组成
Token packet:总是由主机发出
Data packet:包含此次transaction的数据负载
可选的Handshake packet
例子:2.3 传输
USB协议定义了四种传输类型:
批量(大容量数据)传输(Bulk Transfers): 非周期性,突发
大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等
中断传输(Interrupt Transfers): 周期性,低频率
允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等
等时(同步)传输(Isochronous Transfers): 周期性
持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息 ,如音频视频设备
控制传输(Control Transfers): 非周期性,突发
用于命令和状态的传输
2.3.1 批量传输
批量输出事务,(1)主机先发出一个OUT令牌包(包含设备地址,端点号),(2)然后再发送一个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握手包,(3)设备解码令牌包,数据包都准确无误,并且有足够的缓冲区来保存数据后就会使用ACK/NYET握手包来应答主机(只有高速模式才有NYET握手包,他表示本次数据成功接收,但是没有能力接收下一次传输),如果没有足够的缓冲区来保存数据,就返回NAC,告诉主机目前没有缓冲区可用,主机会在稍后时间重新该批量传输事务。如果设备检查到数据正确,但端点处于挂起状态,返回STALL。如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。
批量输入事务,(1)主机首先发送一个IN令牌包(包含设备地址,端点号),(2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。如果此时有地址和端点匹配的设备,并且没有检测到错误,则该设备作出反应:设备有数据需要返回,就将一个数据包放在总线上;如果没有数据需要返回,设备返回NAK响应主机;如果该端点处于挂起状态,设备返回STALL。如果主机收到设备发送的数据包并解码正确后,使用ACK握手包应答设备。如果主机检测到错误,则不做任何响应,设备会检测到超时。注意:USB协议规定,不允许主机使用NAK来拒绝接收数据包。主机收到NAK,知道设备暂时没有数据返回,主机会在稍后时间重新该批量输入事务。PING令牌包,它不发送数据,直到等待设备的握手包。
2.3.2 中断传输
中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于
这个时间间隔的范围内安排一次传输。2.3.3 等时传输
等时(同步)传输用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少量的数据错误是可以容忍的,主要是保证数据不能停顿,所以等时传输是不保证数据100%正确的。当数据错误时,不再重传操作。因此等时传输没有应答包,数据是否正确,由数据的CRC校验来确认。2.3.4 控制传输
控制传输可分为三个过程:(1)建立过程 (2)数据过程(可选) (3)状态过程
特性:
每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将通过控制传输与USB设备的控制端点通信,完成USB设备的枚举和配置
方向:
控制传输是双向的传输,必须有IN和OUT两个方向上的特定端点号的控制端点来完成两个方向上的控制传输
数据的拆分和数据传输完毕的判定
以高速设备的最大数据包长度64字节为例
要传输250字节,拆分成4个packet要传输正好256字节,通过最后一个0字节包告诉设备传输完成
各种传输特性比较
3. USB标准请求
3.1 USB标准请求的数据结构3.2 USB 设备枚举及描述符介绍
当一个USB设备插入主机后,会有以下活动:include/uapi/linux/usb/ch9.h /* USB_DT_DEVICE: Device descriptor */ struct usb_device_descriptor { __u8 bLength; __u8 bDescriptorType; __le16 bcdUSB; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bMaxPacketSize0; __le16 idVendor; __le16 idProduct; __le16 bcdDevice; __u8 iManufacturer; __u8 iProduct; __u8 iSerialNumber; __u8 bNumConfigurations; } __attribute__ ((packed)); #define USB_DT_DEVICE_SIZE 18
struct usb_config_descriptor { __u8 bLength; __u8 bDescriptorType; __le16 wTotalLength; __u8 bNumInterfaces; __u8 bConfigurationValue; __u8 iConfiguration; __u8 bmAttributes; __u8 bMaxPower; } __attribute__ ((packed)); #define USB_DT_CONFIG_SIZE 9
/* USB_DT_INTERFACE: Interface descriptor */ struct usb_interface_descriptor { __u8 bLength; __u8 bDescriptorType; __u8 bInterfaceNumber; __u8 bAlternateSetting; __u8 bNumEndpoints; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 iInterface; } __attribute__ ((packed)); #define USB_DT_INTERFACE_SIZE 9
/* USB_DT_ENDPOINT: Endpoint descriptor */ struct usb_endpoint_descriptor { __u8 bLength; __u8 bDescriptorType; __u8 bEndpointAddress; __u8 bmAttributes; __le16 wMaxPacketSize; __u8 bInterval; /* NOTE: these two are _only_ in audio endpoints. */ /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */ __u8 bRefresh; __u8 bSynchAddress; } __attribute__ ((packed)); #define USB_DT_ENDPOINT_SIZE 7 #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
/* USB_DT_STRING: String descriptor */ struct usb_string_descriptor { __u8 bLength; __u8 bDescriptorType; __le16 wData[1]; /* UTF-16LE encoded */ } __attribute__ ((packed)); /* note that "string" zero is special, it holds language codes that * the device supports, not Unicode characters. */
-
USB2.0协议中文版.pdf
2020-10-28 19:10:21本章对应于USB2.0 协议第4 章。 USB(Universal Serial Bus)是一种支持热插拔的高速串行传输总线,它使用差分信号 来传输数据。在USB1.0 和USB1.1 版本中,只支持1.5Mb/s 的低速(low-speed)模式和12Mb/s 的全速... -
基于FPGA和USB2.0协议的通用数据传输设计
2020-10-16 18:43:23USB2.0因其数据传输速率快和接口的多样化而广泛使用。以USB2.0控制器CY7C68013A为接口设计和实现了上位机与FPGA中FIFO与寄存器之间的读写。经测试表明,该设计达到了47 MB/s的数据传输速率,接近USB2.0控制芯片的... -
C++基于usb协议读取终端数据
2020-04-02 09:17:42vc++平台的usb数据的读取和打印,本人测试已经过,可以使用。用的vc6.0编译,使用语言是C ++,库文件都在里面,代码用vc6.0可以打开,也可以打开debug下的exe文件。希望下载的人给个好评,写个代码不容易 -
USB通信协议——数据交易
2020-11-13 06:34:49表列出了组成4种传输类型的元素。在这里,读者就需要注意一些通信协议的结构... 因此,若要了解完整的USB通信协议就必须从数据域谈起。通过由下而上,从简易至复杂的通信协议单位来组合出各种复杂的通信协议,进而构建 -
USB协议详解第12讲(USB传输-初探)
2021-01-12 22:59:06USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。 举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"。 OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就... -
基于FPGA的USB2.0数据传输(通过本文可以自己设计USB2.0模块)
2020-11-26 15:03:00USB接口具有传输速度快,可以广泛地应用在各类的高速数据传输当中,相比于大家熟悉的串口数据传输要快出不知道多少倍了。 我们最常见的当属USB2.0和USB3.0,这两个之间可以通用,但是也有区别: 1.USB3.0的速率是5... -
USB通信协议——错误检查
2020-11-13 05:33:05因此,在稍前所介绍过,用来设计整合至USB数据交易协议的握手封包,可以确认出封包已经被成功地接收到。此外,涵盖错误检查位的USB封包也可使得接收器能确实地辨识所接收到的数据是否与传送出去的数据相符合。此外,... -
USB传输方式
2020-11-13 02:21:56USB总线属一种轮询方式的总线,由主端口预定的标准协议使各从设各分享USB带宽,当其他设备和主机在运行时,总线允许添加、设置、使用及拆除外设,主控制端口初始化所有的数据传输。 每一总线执行动作最多传送三个... -
基于MLVDS和USB3.0的多节点数据传输系统设计与实现
2020-10-15 22:38:02该传输系统采用CYUSB3014接口芯片实现计算机与FPGA的高速数据传输,采用ADN4693E接口芯片完成多节点数据传输,以FPGA作为核心控制器,并基于MLVDS自定义协议解析多节点通信逻辑,实现MLVDS接口与USB3.0接口之间的... -
USB协议详解第13讲(USB传输-控制传输及事务组成)
2021-01-13 17:45:25目录 ...前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,今天我们主要讲解控制传输。 控制传输是一种特殊的传输方式,且 -
USB的总线结构以及传输类型介绍
2020-05-07 14:52:46本文档主要介绍了USB的总线结构,传输类型,包括控制传输,同步传输,中断传输,批量传输,USB的协议层,USB包格式,USB的设备状态,设备请求,数据结构等等 -
一文懂USB数据及供电协议
2020-11-02 21:01:58本文依照USB-IF命名规范 输出口,线材,输入口,三者同时满足最高协议标准,才能发挥最好效果,否则受限于最差的一个(木桶效应)。 接口类型 都叫USB接口,只是分为: ...数据传输协议 传输速度跟接口类型无关,只跟 -
usb协议
2021-10-20 10:10:17usb:串行总线 usb1.0低速模式1.5Mb/s usb1.1全速模式:12Mb/s usb2.0 高速模式:480Mb/s 500mA usb3.0 超高速模式:5.0Gb/s 实际...usb端点:位于usb设备或主机上的一个数据缓冲区,用来存放和发送usb的各种数据,每一 -
USB协议详解第15讲(USB传输-批量传输及事务组成)
2021-01-15 17:57:01声明:前面和后续提到的OUT和IN都是对主机而言的。 ...批量传输通常在数据量大、对数据的实时性要求不高的场合,例如USB打印机、扫描仪、大容量存储设备等。 批量传输主要包括批量读传输、批量写 -
USB 数据传输 块传输、中断传输、同步传输和控制传输
2009-12-21 10:49:21USB的协议对 USB 的数据传输类型进行了详细的分类,按照传输数据量的大小、传输速率的高低以及对时间的要求,可以分为 4 种传输类型:块传输、中断传输、同步传输和控制传输。USB 功能设备和USB 主机程序之间便是... -
USB协议详解第16讲(USB传输-中断传输及事务组成)
2021-01-17 16:43:14目录 1.前言 2.中断传输的结构 3.抓包分析 3.1中断读传输抓包分析 ...中断传输用于哪些频率不高,但是对周期有一定要求的数据传输。具有保证的带宽,并能在下一个周期对先前错误的传输进行重传。 -
基于USB3.0协议的PC与FPGA通信系统的设计
2020-07-30 17:08:53通过对USB3.0的接口硬件系统、设备固件以及SLAVE FIFO与FPGA接口读写操作的设计,并经过实验测试,USB3.0硬件传输速度可达260 MByte·s-1,连续数据采集传输速率可达100 MByte·s-1且数据保持稳定。 -
USB协议详解第24讲(USB包-控制传输包详解)
2021-01-25 23:16:47目录 1.控制传输包结构 ...3.1 如果第一阶段指定数据传输方向为设备到主机(长度大于0) 3.2 如果第一阶段数据传输方向为主机到设备(长度大于0) 3.3 如果第一阶段数据传输方向为主机到设备(长度为0) 4... -
USB协议详解第27讲(USB包-中断传输包详解)
2021-01-28 22:37:02中断传输和批量传输类似,中断只由一个中断事务组成,中断事务包含令牌包、数据包、握手包,如图下所示。中断事务类型的特点是能够通过错误检测和重试来保证主机和设备之间数据的无错误传递。 需要理解和注意以下点... -
第二篇 USB2.0协议简述(包-事务-传输)
2020-11-03 10:32:11包是USB传输的基本单元,USB协议规定了三种类型的包:令牌(Token)包、数据(DATAx)包、握手(Ack)包。其中,令牌包只能是从主机发出。数据包和握手包可由主机发出,也可是设备发出。 包由各个不同的域组成,所有的包... -
STM32F4自定义USB协议高速数据传输,支持Windows,Linux,Max,Android
2018-10-19 15:39:55综述:本文链接:http://www.embed-net.com/thread-565-1-1.html本方案测试板购买链接:...id=545721383347基于USB数据传输有非常多的上层协议,每种协议各有优缺点,本文介绍一种自... -
Android 使用USB进行数据传输
2019-07-15 01:56:201.Android通过两种模式支持各种USB设备 USB host 和USB accessory (Android3.1 API 12以上) USB Host Mode 主机模式:Android设备充当主设备,并为总线供电 USB Accessory Mode 附件模式:外部硬件充当USB主...