Linux·usb协议

目录

1、USB是什么 

1.1 USB特点:

1.2 USB设备供电方式:

1.3 USB总线信号:

1.4 USB插入检测和速度检测

1.5 数据编解码和位填充 

2. USB传输

2、1包

2.1.1 包的组成:

2.1.2 包的内容:

2、2 事件 

2、3  传输

2.3.1 批量传输

2.3.2 中断传输

2.3.3 等时传输

2.3.4 控制传输

3、USB标准请求

3.1 USB标准请求的数据结构 

​3.2 USB 设备枚举及描述符介绍 

 例程分析


1、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+ < VOL
  • J状态(高电平):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序列”的总线握手机制来识别高速和全速设备

  1. USB连接和断开连接:

设备连上主机时(连接)

  • 当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了,主机必需在驱动SE0状态以复位设备之前,立刻采样总线状态来判断设备的速度 

 没有设备连上主机时(断开)

  • D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态

1.5 数据编解码和位填充 

USB采用NRZI(非归零编码)对发送的数据包进行编码 

  • 输入数据0, 编码成“电平翻转” 
  • 输入数据1, 编码成“电平不变” 

编码出来的序列,高电平:J状态;低电平:K状态 

 位填充是为了保证发送的数据序列中有足够多的电平变化,填充的对象是(输入数据),即先填充再编码 ,数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码,数据出现电平变化,接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们

2. USB传输

一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。

1.传输数据通信

  • USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。

2.事务数据通讯

  • 一次传输由一个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。

3.包数据通讯

  • 一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ack)、特殊包。

4.域数据通讯

  • 一个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无用程序员~

家里还有病重的爷爷奶奶🙏🙏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值