STM32 USB基础知识


拓展阅读

1. USB、UTMI、ULPI

前言

写这篇记录文章的起始原因:
查看at32F407的资料时看到:芯片支持USB2.0全速设备接口,想到以下几个问题

  1. at32F407硬件到底支持USB2.0还是USB1.1?
  2. at32F407需要支持usb2.0的低速,全速,高速,需要硬件支持,还是软件支持?
  3. at32F407提到自己是USB2.0全速设备,如果就是等于USB1.1,为什么不直接说自己是USB1.1规范?
  4. USB2.0与USB1.x 硬件上能区分吗?

一、USB基础知识

为了不再造轮子,看到有小伙伴总结的很好很全面,特此记录

二、USB2.0

1.usb2.0模式说明

在最初的USB1.0和USB1.1协议规范中,仅有低速(1.5Mbps)设备和全速(12Mbps)设备之分。发展到后来的USB2.0协议规范,又增加了高速(480Mbps)模式。但是需要注意的是,USB2.0协议只是USB协议的2.0版本,并不是USB高速传输模式的代名词。在USB2.0协议中,规定了可以支持3种速度模式,分别是低速(Low Speed, 1.5Mbps),全速(Full Speed, 12Mbps)和高速(High Speed, 480Mbps)。但它并未强制要求一定要具备高速模式。
很多USB芯片注明支持USB2.0协议,但是并不支持高速传输模式(这一点在选择芯片的时候要仔细看清楚)。如果你需要的是高速传输模式,那么在选择芯片时要特别注意,看它是否支持高速传输模式。如果只是看到符合USB2.0规范,就认为一定支持高速传输模式,那就错了。

像Philips的PDIUSBD12芯片,数据手册里面就明确写了,支持USB2.0协议的全速传输模式

2.USB2.0全速USB和高速USB的识别过程分析

补充:STM32 USB相关知识扫盲:USB主机如何识别设备是高速设备/全速设备/低速设备?
全速设备/高速设备:硬件部分能区分低速和全速,软件协议上区分高和全速设备,刚开始设备接入后,识别为全速模式,但是设备支持高速,此时会通过某个协议向主机通告,如果主机也支持高速,那么两者就会工作在高速模式下,反之全速

3.usb协议关系

  • 代际
    第一代:usb 1.0/1.1的最大传输速率为12mbps。1996年推出。
    第二代:usb 2.0的最大传输速率高达480mbps。usb 1.0/1.1与usb 2.0的接口是相互兼容的。
    第三代:usb 3.0 最大传输速率5gbps, 向下兼容usb 1.0/1.1/2.0

  • usb2.0兼容
    原来的usb1.1已经整合usb2.0标准里了。
    如下:
    USB2.0支持三种传输速率:
    低速(Low Speed),习惯称为USB1.0,传输速率为1.5Mbps;
    全速(Full Speed),习惯称为USB1.1,传输速率为12Mbps;
    高速(High Speed),习惯称为USB2.0,传输速率为480Mbps;

    USB2.0可以向下兼容,当USB2.0设备插入1.1接口,将只有12Mbps的传输速率。
    USB可以通过线缆传送电力,能够提供最大500mA、5V的电力。

4.USB2.0与USB1.x 硬件上能区分吗?

  • 疑点
  1. 以上文章都说明了,差分线的高低可以区分设备是全速模式还是全速模式,但并没有告诉我们usb工作在usb2.0还是usb1.x版本下面?
  2. 这就没办法理解,当识别高速设备的时候,设备怎么就知道自己和主机同时工作在usb2.0模式下呢?
  3. USB1.x总线与USB2.0总线的区别?
    • uhci(universal host controller interface):
      Intel用在自家芯片组上的usb 1.1主控制器(host controller)的硬件实例。

    • ehci(enhanced host controller interface):
      usb 2.0的主控制器标准接口。
      EHCI英文全称为Enhanced Host Controller Interface,是增强型主机控制器接口规范,描述了一个通用串行总线USB2.0版的主机控制器的寄存器级接口。EHCI规范包括系统软件和主机控制器硬件之间的硬件/软件接口的描述,主要是为硬件组件设计,系统集成商和设备驱动程序(软件)开发

    • ohci(open host controller inferface):
      一个不仅仅是usb用的主控制器接口标准,下面细分为usb,1394,或者更多(别的没有接触过)。主要是遵循csr (configuration space register)标准(另一个标准,呵呵)。是其他厂商在设计usb host controller时遵循的标准,如via, nec, ali, 包括nvidia等等。
      uhci, ohci在硬件实现以及对底层软件访问上都有所不同,但二者又都完全(实际上各自多少都有些不足)支持usb 1.1 specification里边对usb host controller的要求。
      同理,ehci是满足usb 2.0 specification里面对usb host controller (high speed)的要求的硬件设计。在这里插入图片描述

  • 设备模式与协议版本的关系

总结

在这里插入图片描述

三、USB芯片到底完成了哪些工作?

USB芯片也分为Controller部分和PHY部分。Controller部分主要实现USB的协议和控制。内部逻辑主要有MAC层、CSR层和FIFO控制层,还有其他低功耗管理之类层次。

  • MAC实现按USB协议进行数据包打包和解包,并把数据按照UTMI总线格式发送给PHY(USB3.0为PIPE)
  • CSR层进行寄存器控制,软件对USB芯片的控制就是通过CSR寄存器,这部分和CPU进行交互访问,主要作为Slave通过AXI或者AHB进行交互。
  • FIFO控制层主要是和DDR进行数据交互,控制USBDDR搬运数据的通道,主要作为Master通过AXI/AHB进行交互。PHY部分功能主要实现并转串的功能,把UTMI或者PIPE口的并行数据转换成串行数据,再通过差分数据线输出到芯片外部。

USB芯片内部实现的功能就是接受软件的控制,进而从内存搬运数据并按照USB协议进行数据打包并串转换后输出到芯片外部。或者从芯片外部接收差分数据信号,串并转换后进行数据解包并写到内存里。

在这里插入图片描述

3.1 每一个usb必须有usb-phy吗?

带着问题查阅资料:
STM32F407重要外设学习(基于《野火STM32库开发实战指南》)——02RCC-使用HSE/HSI配置时钟
由以上文章得知407的USB没有集成PHY,要想实现USB高速传输,只能外接PHY芯片,比如USB33000。那USB PHY时钟就由外部的PHY芯片提供。
APM32F407集成内部高速PHY,支持USB2.0通信
由以上两个文章可知 要想实现usb2.0的高速传输需要一个usb phy。否则只能处于全速低速

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32 USB例程是一种用于STM32单片机的USB通信协议示例,它提供了一种可靠而稳定的方式,可以在STM32单片机和其他USB设备之间进行通信和数据传输。 在STM32 USB例程中,STM32单片机作为USB设备,可以与PC、手机、音频设备、键盘、鼠标等USB主机进行通信,支持常见的USB协议,如HID、CDC、MSC等。 使用STM32 USB例程可以快速实现STM32单片机与外界USB设备的通信和数据传输。该例程提供了各种API和函数,可用于配置USB外设、数据收发、状态判断和错误处理等操作,使得开发者可以方便地实现各种USB应用。 同时,STM32 USB例程还提供了丰富的开发工具和示例代码,使得开发者可以快速上手,迅速开发出符合自身需求的USB应用。 总之,STM32 USB例程是一种非常实用的USB通信协议示例,它为STM32单片机提供了可靠和高效的USB通信功能,为各种USB应用的开发提供了强有力的支持。 ### 回答2: STM32 USB例程是指一种用于STM32系列单片机USB通信的程序模板。STM32是意法半导体(STMicroelectronics)公司推出的一款微控制器,拥有广泛的应用领域,包括通信、物联网、工业控制、电子设备等多个领域。而USB则是一种通用的、用于连接计算机和外部设备的接口。使用STM32 USB例程,可以让STM32单片机通过USB接口与计算机进行数据传输、固件升级等操作。 STM32 USB例程一般包含USB 器件驱动和应用程序两部分。其中,USB器件驱动是指实现USB通信的底层软件支持,它实质上是USB协议栈的一种实现,可以与操作系统进行交互,提供底层的USB通讯接口。而应用程序则包括具体的业务逻辑代码,例如数据收发、升级等,它需要在USB器件驱动的基础上实现。 STM32 USB例程的实现需要掌握一定的硬件、软件知识和开发技巧。具体来说,需要了解STM32单片机硬件结构、外设功能及使用方法;掌握USB协议栈的实现原理和相关API函数;熟悉C语言编程、调试、版本控制等基本开发技巧。 总之,STM32 USB例程为STM32单片机提供了一种高效、可靠、快速的USB通信方式,对于工业控制、智能家居、医疗设备等多个领域的应用都具有广泛的意义。通过学习和实践,我们可以深入了解STM32的硬件、软件特性,熟悉嵌入式系统开发流程,提高自己的编程技巧和项目实践能力。 ### 回答3: STM32是一款非常流行的嵌入式系统芯片,它也支持USB接口,用户可以通过USB数据传输接口将STM32与其他设备进行连接,实现数据的输入、输出等功能。 STM32 USB例程是一种通常由STM32芯片厂家或者第三方开发者提供的USB应用程序演示程序。这种USB例程可以帮助用户更快、更容易地开发STM32与其他USB设备之间的交互功能。 例如,STM32 USB例程可以让开发者更快地了解如何与USB设备进行连接、如何实现USB数据传输、如何进行USB设备的控制等等。同时,STM32 USB例程还提供了一些基础的USB驱动程序,方便开发者快速开始项目开发。 当然,对于STM32 USB例程,用户还需要具备相关的编程知识和经验。在使用STM32 USB例程时,用户需要先了解USB协议、USB数据传输等基础知识,然后再根据需要进行修改和拓展,以实现自己的项目需求。 总之,STM32 USB例程是一种非常实用的开发工具,它可以帮助开发者更快、更方便地进行USB相关开发。同时,通过学习和使用STM32 USB例程,用户也可以更深入地了解STM32芯片的特性和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值