历史上的今天
返回首页

历史上的今天

今天是:2025年07月31日(星期四)

正在发生

2019年07月31日 | STM32 之六 USB IP(USB模块)、官方驱动版本 详解

2019-07-31 来源:eefocus

模块分类

  在 STM32 众多系列的 MCU 中,USB模块并不是相同的,官方称呼为USB IP 不同。总的来说可以分文两大类:USB IP、OTG IP。这两种 IP又可以进行更进一步的细分,如下图:

USB IP

上图中罗列的芯片并不是很全面,某些新系列的芯片可能与上图有出入。各IP的主要区别如下:


USB IP:

仅可作为全速或低速的USB设备;

符合USB2.0中的全速规范

可用资源:8个双向可配置端点

512字节 的专用数据包缓冲存储器SRAM

CRC(循环冗余校验)生成/校验,反向不归零(NRZI)编码/解码和位填充

支持四种传输类型:对于bulk和同步传输,还支持double buffer模式;使得一个buffer用于USB硬件和PC

交换数据的同时,另外一个buffer可被MCU使用

支持USB设备的挂起和唤醒操作(写控制寄存器),从而停止设备时钟,以进入低功耗模式

USB

F102/103中的USB和CAN共享512字节的专用SRAM来进行数据收发操作,因此两个IP不能同时使用

USB+ IP: 是针对USB IP的扩展版本,同样仅可作为全速或低速的USB设备,但是ST针对这部分的USB模块进行了扩展,例如添加了USB低功耗管理等。除了以上USB IP特性外,还有如下:

1024字节 的专用数据包缓冲存储器SRAM

同步传输支持

USB 2.0 Link电源管理支持

电池充电规范修订版1.2支持

USB连接/断开功能(USB_DP线上可控嵌入式上拉电阻)

USB+

FS OTG IP: 可作为全速和低速USB主机;可作为全速USB设备

USBFS

HS OTG IP: 可作为高速、全速和低速USB主机;可作为高速和全速USB设备

USB HS

无论以上哪种 IP,其全部符合USB 2.0规范。

Packet buffer的使用

  Packet buffer存在于USB IP和USB+ IP中(在 OTG IP中称为FIFO),其用法是一致的。每个双向端点对应两个packet buffer,分别用于发送和接收。软件通过packet buffer interface来访问它们。

  这些packet buffer的位置和大小都可配置,由***buffer描述表***指定 ,Buffer描述表本身也在这块memory里,它自己的地址是由USB_BTABLE寄存器指定的。Table里每个entry由4个半字组成(分别表示双向EP的接收packet和发送packet的位置和大小) 因此***该table的位置本身必须以8字节对齐***,即USB_BTABLE的低三位全部为0。

  USB外设硬件不会把本EP的数据溢出到与其相邻的其他packet 如果收到的数据多于buffer的长度,则只把前length个数据放到该EP对应的Packet buffer中。


在ST给出的驱动中,各端点的初始化情况如下:

Packet buffer

硬件发送缓冲区

在初始化时设定各个EP硬件发送缓冲区的起始地址 @ADDRn_TX@硬件缓冲描述表

在准备好要发送的数据后,设置发送长度@COUNTn_TX@硬件缓冲描述表

硬件接收缓冲区

在初始化时设定各个EP硬件接收缓冲区的起始地址 @ADDRn_RX@硬件缓冲描述表

在初始化时设定各个EP硬件接收缓冲区的长度 @COUNTn_RX的高位@硬件缓冲描述表,以允许接收缓冲区的溢出检测;一般都是接收EP的最大包长

在收到数据并产生ISR中,从硬件接收缓存读取数据之前先要看收到了多少数据(实际收到的数据不一定填满接收缓存的)

FIFO的使用

  存在于 OTG IP中。使用相对来说要复杂不少。


驱动程序

  在实际使用中,发现USB驱动有许多bug,需要特殊注意!关于这部分请参考针对USB部分的独立博文。无论是标准外设库版还是HAL库版,ST官方有针对各BUG的独立说明文档,这个在做具体移植时需要特殊注意。


标准外设库版(官方培训文档称为 Legacy library )

  针对不同的芯片有不同的独立版本驱动(主要是USB IP是有区别的)。目前有如下几个:


STSW-STM32046: 主要是针对STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library,对应的说明文档为UM1021。下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32046.html ,该版本的驱动 最新版本为 2.2.1 。

  实现的设备例程:AUDIO、DFU、HID、MSC、VCP、Dual Core(FS IP和HS IP同时工作,分别实现MSC和HID设备)

  实现的主机例程:MSC、HID、Dual Core(FS IP和HS IP同时工作,分别实现MSC和HID主机功能)

  实现的双角色例程:DRD(根据插入电缆的不同,分别作MSC主机和MSC设备功能)

STSW-STM32121: 主要是针对STM32F10x, STM32L1xx and STM32F3xx USB full speed device library,对应的说明文档为UM0424。

下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32121.html ,该版本的驱动 最新版本为 4.1.0 。

  实现的例程(只能是Device):Audio_Speaker、DFU、MSC、Joystick、Custom_HID、VCP、MSC+HID 复合设备

STSW-STM32092: 主要是针对STM32F0x2xx USB FS device library,对应的说明为UM1717。下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32092.html, 该版本驱动的 最新版本为 1.0.0 。这里需要注意,该驱动是针对STM32F0x2xx的,但是可以非常方便的移植到STM32F0xx系列得MCU中。 需要根据具体芯片的时钟,修改驱动的usb_conf.h和usb_bsp.c。关于具体的移植可参考网友的该文章USB库STM32F0x2移植到STM32F070笔记

  实现的例程(只能是Device):Audio_Speaker、CCID、MSC、Custom_HID、HID、HID_LPM_test、DFU、Virtual_COM_Port、CDC+HID复合设备、MSC+HID复合设备


  该版本的驱动不但可以非常方便的与之前的标准外设库一同使用,而且可以非常方便的与 HAL 库一起使用。 博文STM32之标准外设版USB驱动+MSC(Host)+Fatfs移植 就是使用的HAL外设库+标准外设库版的USB驱动的移植。使用标准外设库版版USB库的主要原因是,该版本的USB库经过多年验证,相对稳定!而在使用HAL版USB库时,发现了许多BUG。

  以上这些驱动在ST官网一次次改版之后,已经非常难找到!我记得在之前都不需要登陆就可以下载,现在还必须登陆才可以下载!


HAL库版(官方培训文档称为 Cube library )

  从目前的情况来看,ST已经彻底放弃了之前用了很久的标准外设库,全面转投 STM32CubeTM。在驱动程序方面,标准外设库也基本不再维护更新!

  STM32CubeTM系列的驱动相比较标准外设库来说更将全面,同样USB驱动也比标准外设库更加全面。这部分驱动一般很少手动来移植处理,直接使用STM32CubeMX工具来处理。

  不同芯片的USB驱动均包含在针对各芯片的独立Cube驱动包中。其中的USB驱动或多好少回有点区别,也可能没有区别。具体可直接查看Cube驱动包的驱动说明。总结一下:

CubeUSB

上图由于比较早,其中部分芯片没有列出。


配套工具

  ST为开发者提供了一些常用的工具,具体如下:


PC端VCP驱动(STSW-STM32102): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257938

DFU PC端程序(STSW-STM32080): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916

HID PC端程序(STSW-STM32084): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257920

参考

  ST 的各种培训资料


推荐阅读

史海拾趣

FUJIKURA公司的发展小趣事

FUJIKURA(株式会社藤仓)在电子及光纤通信行业中有着悠久而辉煌的发展历程。以下是五个关于FUJIKURA公司发展起来的相关故事,每个故事均基于事实描述,并尽量保持字数在500字以上:

1. 创立与早期发展

FUJIKURA公司成立于1885年,由藤仓善八先生创立,起初专注于发电机用的绢卷线制造。这一初创阶段为公司奠定了坚实的电线电缆制造基础。随着技术的不断积累,FUJIKURA逐渐扩展到更广泛的电气和电子领域,为公司的长期发展奠定了坚实的基础。

2. 技术创新与行业领导地位

在多年的发展中,FUJIKURA始终致力于技术创新,不断推出具有行业影响力的新产品。特别是在光纤通信领域,FUJIKURA凭借其强大的研发能力和技术实力,成为了全球领先的光纤通信产品研发与生产商。公司不仅在光纤制造方面取得了显著成就,还在光纤熔接、光数据传输等领域拥有多项专利技术,推动了整个行业的发展。

3. 全球化战略与市场拓展

随着全球市场的不断开放和竞争的加剧,FUJIKURA积极实施全球化战略,通过设立海外分支机构、与当地企业合作等方式,不断拓展海外市场。目前,FUJIKURA的商务与服务网络已经覆盖全球多个国家和地区,为全球客户提供优质的产品和服务。这一战略不仅提升了公司的国际影响力,还为公司带来了更多的商业机会和发展空间。

4. 企业文化与团队建设

FUJIKURA注重企业文化的建设和团队精神的培养。公司秉承“向客户提供价值”的企业理念,致力于为员工创造一个积极向上、团结协作的工作环境。通过定期的培训、团队建设活动等方式,FUJIKURA不断提升员工的综合素质和团队协作能力,为公司的持续发展提供了有力的人才保障。

5. 应对挑战与持续发展

面对全球经济大萧条等严峻挑战,FUJIKURA展现出了强大的韧性和适应能力。公司全体员工团结一致,以共享目标和积极态度应对挑战,将危机视为机遇。通过实施“第三次创业”和企业文化改革等措施,FUJIKURA不仅成功度过了难关,还实现了持续稳健的发展。未来,FUJIKURA将继续秉持顾客价值创造的理念,积极应对社会需求,为实现赢得客户信赖的承诺而努力。

场效应半导体(Cmos)公司的发展小趣事

韩国三星电子(Samsung Electronics)在CMOS技术方面也取得了显著成就。作为一家综合性电子企业,三星电子在CMOS技术研发方面投入了大量资金和人力资源。通过不断的技术创新和生产优化,三星电子成功推出了多款高性能、低功耗的CMOS芯片产品,广泛应用于智能手机、平板电脑等电子产品中。这些产品以其卓越的性能和出色的品质赢得了市场的广泛认可,使三星电子在全球半导体市场上占据了一席之地。

Corex Intervest Inc公司的发展小趣事

在技术创新和产品创新的基础上,Corex Intervest Inc公司开始积极拓展市场。公司通过参加国际电子展览、与各大电商平台合作等方式,不断提升品牌知名度和影响力。同时,公司还注重与客户的沟通与合作,根据客户需求定制产品方案,赢得了客户的广泛信任和好评。

南晶电子(DGNJDZ)公司的发展小趣事

随着市场竞争的加剧,南晶电子意识到技术创新是企业发展的核心动力。公司投入大量研发资金,与多所高校和科研机构建立合作关系,共同研发新型半导体器件。经过不懈努力,南晶电子成功推出了一系列具有自主知识产权的高性能产品,赢得了市场的广泛认可。

FCI / Amphenol公司的发展小趣事

Amphenol公司成立于1932年,最初由Arthur J. Schmitt和Gordon K. Klapmeier共同创办,专注于电磁线缆的制造。然而,随着技术的进步和市场需求的变化,Amphenol公司逐渐将重心转向电缆连接器的制造。凭借高品质的产品和服务,Amphenol公司的电缆连接器在市场上获得了广泛的认可,并逐渐发展成为全球最大的电缆连接器制造商之一。

C-MEDIA公司的发展小趣事

近年来,网络游戏市场呈现出蓬勃发展的态势,C-MEDIA公司也看到了其中的商机。于是,公司通过收购C&C Media,进一步深入日本网络游戏市场。这次收购不仅帮助C-MEDIA公司把握了该市场的成长机遇,也有效地拓展了其海外运营实力。C&C Media旗下的网络游戏门户网站“MK-STYLE”为个人用户提供了丰富的网络游戏服务,进一步巩固了C-MEDIA在网络游戏领域的市场地位。

问答坊 | AI 解惑

【史上最牛的单片机教程】

我见过的最牛的单片机教程,下来看看吧, 第一次发帖,不足之处望指教!!!…

查看全部问答>

TINA ti 仿真

我用TINA_TI直流/交流仿真时出现“TINA7仿真出现“Circuit must contain at least one  IC”的对话框怎么办?为什么会这样…

查看全部问答>

关于WINCE中断

请教一下高手,CPU接到中断后在OEMInterruptHandler处理后,返回了中断号,然后会调用哪个函数呀?谢谢!…

查看全部问答>

急问

问下嵌入式移动设备开发有那些方法…

查看全部问答>

JMS传感器

谁代理JMS传感器,请加我531139917…

查看全部问答>

新手向各位讨教编写程序时喂狗经验

我是一个新手,做项目时遇到好多问题,很多事情如果不在开始时规范化,一旦养成习惯后,很难改掉,在这里向大家请教喂狗经验,先谢过了…

查看全部问答>

博世安防技术现身知名的莫斯科大剧院

博世安防技术现身知名的莫斯科大剧院 慧聪安防网讯 当著名的莫斯科大剧院于2005年至2011年期间进行整修时,博世被指派开发和 安装最先进的安防系统,包括防火、广播、疏散和视频监控技术。新的系统不仅要提供全面的、可 共同操作的网络,而且还 ...…

查看全部问答>

BQ24195 OTG PIN 怎么控制

充电时是什么电平,放电时是什么电平,边充边放是什么电平。有谁有BQ24195中文规格书。发我邮箱一下,谢谢!…

查看全部问答>

SAM4L Xplained Pro starter kit之库函数实现usart串口

      串口,这个对于大家学过MCU的人来说,都不陌生。在ATSAM4L这个系列的单片机上的串口是。普通MCU的串口是是通用异步收发器,简称UART,全称是Universal Asynchronous Receiver/Transmitter,而在ATSAM4L单片机中的串口是 ...…

查看全部问答>

麦克风前置放大输入与输出电压信号相位反相对声音的影响

做了一个简单的麦克风前置放大,用的是分立元件三极管,第一级共射放大,第二级共集,咪头拾取到的输入信号与经三极管放大后的输出信号电压相位是相反的,相差180度,这样出来的声音和原始声音会不会差别很大。 …

查看全部问答>