STM32 之六 USB IP(USB模块)、官方驱动版本 详解
模块分类
在 STM32 众多系列的 MCU 中,USB模块并不是相同的,官方称呼为USB IP 不同。总的来说可以分文两大类:USB IP、OTG IP。这两种 IP又可以进行更进一步的细分,如下图:
上图中罗列的芯片并不是很全面,某些新系列的芯片可能与上图有出入。各IP的主要区别如下:
- USB IP:
- 仅可作为全速或低速的USB设备;
- 符合USB2.0中的全速规范
- 可用资源:8个双向可配置端点
- 512字节 的专用数据包缓冲存储器SRAM
- CRC(循环冗余校验)生成/校验,反向不归零(NRZI)编码/解码和位填充
- 支持四种传输类型:对于bulk和同步传输,还支持double buffer模式;使得一个buffer用于USB硬件和PC
交换数据的同时,另外一个buffer可被MCU使用 - 支持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线上可控嵌入式上拉电阻)
- FS OTG IP: 可作为全速和低速USB主机;可作为全速USB设备
- HS OTG IP: 可作为高速、全速和低速USB主机;可作为高速和全速USB设备
无论以上哪种 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给出的驱动中,各端点的初始化情况如下:
- 硬件发送缓冲区
- 在初始化时设定各个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驱动包的驱动说明。总结一下:
上图由于比较早,其中部分芯片没有列出。
配套工具
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 的各种培训资料
STM32 之六 USB IP(USB模块)、官方驱动版本 详解相关推荐
- usb转ttl模块与matlab,图文详解USB转TTL设备与电路板的连接
描述 USB转TTL的硬件设备: USB转TTL主机一台; 芯片选用PL-2303HX USB转TTL刷机线,采用进口PL2303HX芯片.连接上电脑并安装驱动后,电脑即扩展出一个COM3或COM4. ...
- usb转ttl模块与matlab,图文详解USB转TTL 与电路板的连接
USB转TTL的硬件设备: USB转TTL主机一台; 芯片选用PL-2303HX USB转TTL刷机线,采用进口PL2303HX芯片.连接上电脑并安装驱动后,电脑即扩展出一个COM3或COM4.... ...
- STM32 PWM输出原理和直流电机PWM驱动原理详解及例程
这次讲一讲STM32输出PWM的原理以及PWM可以作为信号传输数据的原理. PWM会有很多地方用到,有控制灯的亮度,控制电机,控制舵机或者其他一些外设,有时候你的单片机所输出的PWM是作为信号去控制, ...
- 对象式单片机外部模块驱动编写详解——DAC8552为例
对象式单片机外部模块驱动编写详解--DAC8552为例 对象式驱动原理 DAC8552基本介绍 DAC8552驱动抽象 源码文件及其解释 参考资料 具体的代码和例程请参照以下GitHub仓库,记得给我 ...
- 集成式单片机外部模块驱动编写详解——AD5689为例
集成式单片机外部模块驱动编写详解--AD5689为例 集成式驱动原理 AD5689基本介绍 AD5689驱动抽象及源码解释 源码 参考资料 具体的代码和例程请参照以下GitHub仓库,记得给我star ...
- python中selenium模块驱动谷歌详解
python中selenium模块驱动谷歌详解 Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中 ...
- linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt
PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...
- 《Linux设备驱动开发详解 A》一一2.3 接口与总线
本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...
- 《Linux设备驱动开发详解(第2版)》隆重出版
Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图 基本信息 * 作者: 宋宝华 * 出版社:人民邮电出版社 * ISBN:97 ...
最新文章
- 单片机从事什么工作?只会51单片机能找到工作吗?
- mybatis 中#与$的区别
- 直播系统搭建关键步骤与要点!
- [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)
- 前端学习(542):node得环境搭建
- Java核心(五)深入理解BIO、NIO、AIO
- ionic 去掉启动页的加载动画 菊花转
- 基本Linux命令的用法
- python模块相互引用_python中如何相互引用两个包中的模块
- Python Tricks(十一)—— 阶乘的实现
- hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)
- xshell5 可用注册码
- 数学建模入门-matlab实现偏微分方程数值解
- 信息学奥赛一本通(1079:计算分数加减表达式的值)
- vue 集成环信 web im 加 一对一视频通话
- 计算机制图和应用cad哪个好,cad制图笔记本电脑排行,cad制图用哪款笔记本电脑好...
- C语言经典实例006:输出一个正方形
- 刘强东,揭开京东未来盈利迷局
- 计算机ctrl加的功能,电脑截图快捷键ctrl加什么键
- Option3X 5G 全网部署(基于 IUV_5G 软件)
热门文章
- HP G9 服务器系统安装注意事项
- 在线分享 Hosts 规则工具:Remote Hosts Server
- Python代码质量:工具和最佳实践
- [医疗信息化][DICOM教程]DICOM标准简介
- Postman测试导入/解析excel接口的方法
- 30w 重金等你挑战,数字合肥广邀智慧城市建设英才
- microsoft WINDOWS 系统错误代码
- php微信公众号开发之快递查询
- Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律
- 宜昌开启新型智慧城市3.0 构建一体化建设新模式