STM32-(44):USB总线与USB设备(USB总线协议)

USB协议

  • USB的基本规范

  • USB1.0/1.1 Low Speed 1.5Mbit/s :键盘、鼠标等
    ………………Full speed 12Mbit/s: U盘、CD-ROM

  • USB2.0 Highspeed 480Mbit/s:音频设备,显示器等

  • USB OTG Device to Device 传输

  • USB设备类规范

  • 大容量存储设备类(Mass Storage Device) U盘、CD—ROM

  • 人机交互设备类(Human Interface Device)键盘、鼠标、游戏手柄

  • 语音设备类(Audio Device)麦克风、音箱等

  • 通信设备类(Communication Device)电话、调制解调器等

  • 打印机设备类(Printer Device) 打印机

  • 监视设备类(Monitor Device)显示器,摄像头

  • USB主机控制器规范

  • UHCI (通用主机控制器规范)Intel针对USB1.1制定

  • OHCI (开放式主机控制器规范)Compaq针对USB1.1制定

  • EHCI (增强型主机控制器规范)Intel针对USB2.0制定

USB1.1协议

为了更好的理解USB协议,我们将USB逻辑上分为三层:

  • 信号层
  • 协议层
  • 数据传输层

接口(Interface):例如一个设备有键盘的功能又有U盘的功能,就有两个接口。
端点(Endpoint):USB通信的基本单元
在这里插入图片描述

一、信号层

1、设备速度的检测
USB1.1规范支持两种传输速度的设备(LowSpeed、FullSpeed)
在这里插入图片描述
2、信号的编码
USB中的数据采用反向不归零编码方式(NRZI:None-Return to Zero Inverted),并对D+和D-线所处的不同状态定义成JK两种状态:
在这里插入图片描述
数据的编码/解码:反向不归零码(NRZI)
在这里插入图片描述
简析:反向不归零码的意思,如上图,若刚开始数据为0时对应的为K状态,当由0到1跳变,保持K状态不变,当由1到0跳变,则K状态会跳到J状态,当0后面紧接着还是0,J与K之间的状态也会发生变化。

Bit填充:
在数据进行NRZI编码前,每6个连续的1信号之后都会插入1个0信号,以免丢失同步。

二、协议层

包是USB系统中信息传输的基本单位,所有的数据都是经过打包后在总线上传输的。包由6部分组成:
同步字段(SYNC)
包标识符(PID)
地址字段(ADDR)
数据字段(DATA,包括帧号)
检验字段(CRC)
包结束(EOP)

在这里插入图片描述
2、包标识符(PID)
在USB协议中,USB由很多不同的类型包,通过PID来区分,PID的格式如下:
在这里插入图片描述
在这里插入图片描述
3、地址段
在这里插入图片描述
**设备地址:**主要区分大的东西,比如是摄像机还是U盘;设备地址8位(理论最大支持2的7次方-1个(HOST)设备(127))
**端点地址:**比如向U盘拷贝东西,当向一个文件夹拷贝的过程中,又向另一个文件夹拷贝,针对同一个USB设备的不同文件夹进行的操作,就是通过端点地址来进行区分。端点地址4位:2的4次方(16)

低速设备:支持最多3个端点
全速和高速设备:支持最多16个IN和OUT端点

4、数据段
**加粗样式**

  • 帧号
    有时候很大的数据,我们是把它分成小的数据,然后一个个的打成包,这些小包后面再组成完整的数据就是通过帧号,
  • 11位
  • 主机每发出一个帧,帧号都会自动加1
  • 当帧号达到 7FFH 时,将归零重新开始计数
  • 仅在每个SOP帧的帧首传输帧号
  • 数据
  • 根据传输类型的不同,数据域的数据长度从0到1024字节不等。

5、CRC校验段
在这里插入图片描述

  • CRC
  • Token CRC
    计算 IN,OUT,和SETUP Token 地址域的CRC
    计算 SOP Token 的帧号域的 CRC
    G(X)= X^5 + X^2 + 1
  • Data CRC
    计算所有数据域数据的CRC
    G(X) = X^16+ X^15 + X^2 + 1
    具体CRC校验原理可以查看CRC相关算法
Packet 类型
  1. Packet分四大类:
  2. 命令(Token)Packet
  3. 帧首(Start of Frame)Packet
  4. 数据(Data)Packet
  5. 握手(Handshake)Packet

命令(Token)Packet
在这里插入图片描述
简析:八个位的同步位,PID 为八位,值位0xB4,表示是一个建立包,后面是7个位的设备地址,4个位的端点数据,5位的CRC 校验码,最后跟结束符

帧首(Start of Frame)Packet
在这里插入图片描述
数据包 Data Packet
在这里插入图片描述
确认包(握手包) Handshake Packet
在这里插入图片描述

三、数据传输层

为了满足多种不同类型的设备的数据通信的要求,USB协议提供4种数据传输方式。

  • 控制传输(Control Transfers):突发,非周期性,由主机发起,用于命令和状态的传输。
  • 同步传输(Isochronous Transfers):周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息。
  • 中断传输(Interrupt Transfers):周期性,低频率,允许有限延迟的通信。
  • 大容量数据传输(Bulk Transfers):非周期性,大容量突发数据的通信,数据可以占用任意带宽,并容忍延迟。

举例:控制传输在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32CubeMX是一款官方提供的基于图形界面的STM32芯片初始化配置工具,可以方便快捷地配置STM32芯片的各种功能和参数。使用STM32CubeMX可以打开软件并选择对应的芯片型号,然后选择需要配置的器件并进行相应的配置,最后生成初始化代码并导出到开发工具中。在开发工具中编写应用程序代码,调用相应的库函数即可控制STM32芯片的各个功能。\[1\] 关于USB配置方面,根据引用\[3\]的描述,不同的STM32芯片在配置USB部分时有一些差异。例如,对于STM32F103ZET6、STM32F411CEU和STM32F407VET6等芯片,音频数据发送给DAC使用的是I2S外设;而对于STM32F429IGT6、STM32H743IIT6和STM32H750VBT6等芯片,可以选择使用SAI外设来发送音频数据。具体的USB配置细节可以根据具体的芯片型号和需求进行相应的配置。 #### 引用[.reference_title] - *1* [如何用 STM32CubeMX 配置](https://blog.csdn.net/weixin_42587866/article/details/129453181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32 USB声卡 CUBEMX配置 极简配置十分钟解决 STM32+PCM5102A](https://blog.csdn.net/Fairchild_1947/article/details/122749740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值