USB协议框架概述

本文深入浅出地介绍了USB协议的基本原理和技术细节,包括物理层特性、数据格式、传输类型及软件层面的重要概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上关于USB协议的文章很多,但往往只讲了基本概念或者某一部分的内容,加之USB协议本身十分庞大,导致许多初学者看完云里雾里的,所以我想写个文章把USB实际开发中涉及到的一些要点简单整理一下

 

物理层

USB采用D+和D-差分数据线,数据编码采用NRZI(非归零编码),每6个“1”填充一位“0”,连接和断开事件由D+和D-上的上拉电阻实现,同时这个上拉电阻也是区分高低速设备的工具,低速设备在D-上集成上拉电阻,全速和高速设备在D+上集成上拉电阻,还有一个额外的握手机制用于区分高速和全速设备。

https://i-blog.csdnimg.cn/blog_migrate/d1a47958f708f99cbc394efb8451c0af.png

USB协议类型

目前比较常见的USB有三类,主要区别是速率不同

https://i-blog.csdnimg.cn/blog_migrate/6cc0810b745f40369a6193be3500784c.png

USB数据格式

域:是USB数据的最小单位,由二进制的0,1组成

1.同步域(SYNC),

2.标识域(PID)

3.地址域(ADDR)

4.端点域(ENDP)

5.帧号域(FRAM)

6.数据域(DATA)

7.校验域(CRC)

包:是USB总线数据传输的最小单位,由域组成

1、令牌包

2、数据包

3、握手包

事务传输:每次传输一个事务,由若干数据包组成,不能跨帧。

  1. 控制传输
  2. 中断传输
  3. 批量传输
  4. 同步传输

帧:时间基准概念,每帧1ms,可以有多个事务

微帧:高速USB中的的时间概念,每个125us。

以上属于硬件层面的内容,一般由usb控制器实现,注意处理好对应中断即可。

USB抽象模型

端点(Endpoint):端点是USB软件层面可以见到的最低层接口,它是USB主机或设备上的一个数据缓存区,支持单向输入或输出,输入端点以0x80起头,输出以0x00起头, USB硬件可以为上层提供端到端的数据传输服务

  1. 输入端点(IN)
  2. 输出端点(OUT)
  3. 配置端点
  4. 批量传输端点(Bulk)

高速/全速设备最多支持15组端点。

接口(interface):接口用于完成特定传输功能,一个接口由若干端点组成(一般有输入端点和输出端点用于完成双向数据传输)

类(class): 一个类可以看作一个对象,是实现一个抽象设备的单位,一个类由一个或两个接口组成

https://upload-images.jianshu.io/upload_images/15877540-1f10023d615d8a62.png

设备(device):设备是一个实体单位,每个USB接口上插的就是一个设备,一个设备中可以有多个类,用于同时实现不同的功能。每种实体设备有自己的PID和VID。

配置:配置是设备的配置选项,一个设备可以有多种配置,用于设置该设备工作在不同工作模式下。

复合设备(Composite):复合设备把几个子设备汇集到一起,例如usb hub就是一个典型的复合设备。

 

软件层面的一些基本概念就讲完了,USB描述符和USB枚举过程涉及的东西也比较多,准备留到下篇文章再讲。

 

本文链接:https://blog.csdn.net/CSDN1344789841/article/details/115017680

转载需标明出处

参考文章:https://blog.csdn.net/u010142953/article/details/82627591

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值