stm32f4 USB项目开发详解

Posted shenlong1356

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32f4 USB项目开发详解相关的知识,希望对你有一定的参考价值。

一、USB简介

1.1、usb通信过程总体概况

usb通信步骤总体概况:

  1. 设备插到主机上
  2. 主机开始检测设备类型(高速/全速/低速)
  3. 复位设备
  4. 主机开始对设备枚举(根据枚举得到的各种信息加载合适的驱动程序,比如根据信息知道是一个鼠标设备,则加载鼠标的驱动程序对接下来的数据进行处理)
  5. 枚举完成后主机要查询有效端点是否有数据,有数据时设备自然会返还给主机

枚举过程总体概况

  1. 主机获取设备描述符(部分)
  2. 主机对从机设置设备地址(非零,相当于我们的学号id)
  3. 主机再次获取从机设备描述符(全部)
  4. 主机获取配置描述符(了解从机配置,接口,端点)情况
  5. 如果有字符串描述符还有获取字符串描述符
  6. 设置配置请求,就是激活配置,如果没有这一步对应的配置就不可用
  7. 针对不同的类,获取它们独特的类描述符(比如HID报告描述符)

注意:

上面的枚举1-4,6步骤是必须的

 

1.2、区分高速全速 低速设备的方法

 

d+上面接电阻:全速/高速设备             d-  上接电阻:低速设备

 

技术图片

 

1.3、USB设备插拔检测机制

1.3.1、没有插上usb设备主机情况

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

 

技术图片

 

1.3.2、 插上usb设备时

 

当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了

主机必需在驱动SE0状态以复位设备之前, 立刻采样总线状态来判断设备的速度 

 

技术图片

 

 二、 USB端点   的四种传输类型

usb 四种传输类型是针对端点而言的,并不是usb整个传输过程为一种传输类型

 

1、控制传输(Control Transfers):    

  (一般用于枚举过程端点0,主机给从机发命令或回应状态时,这个过程是随机突发的的,也就是主机随时发命令,从机只能是待命)

 

2、大容量数据传输(Bulk Transfers):       

        大容量传输一般用于非零端点,并且针对大数据传输(如U盘),数据可以占用任意带宽,并容忍延迟 ,并且这个过程也是随机突发的,因为控制权在主机,用户随时要读取设备(u盘)数据,所以这个过程是非周期的

 

3、同步传输(Isochronous Transfers):              

        周期性的,持续性的传输,用于传输与时效相关的信息,并且在数据中保时间戳的信息 比如(摄像头图像传

 

4、中断传输(Interrupt Transfers):

  周期性,低频率,比如hid鼠标键盘主机是周期性查询端点有没有数据的,只要鼠标有动作,就可以往端点缓存送数据,等到主机查询的时候,数据就会被主机读走)所以在设备初始化的时候要初始化主机查询时间间隔

 三、USB枚举过程

 

以上是关于stm32f4 USB项目开发详解的主要内容,如果未能解决你的问题,请参考以下文章

STM32F4 HAL库开发 -- USB U盘

STM32F4 HAL库开发 -- USB U盘

STM32F4 HAL库开发 -- USB U盘

没有来自 PC 的音频数据发送到 STM32F4 音频类 USB

STM32F4 上的 USB 音频输入

STM32F4:使用 FatFs 和 USB 的 SD 卡失败