ST USB HOST
最近搞开发,有个需求是需要模块支持USB复合设备(MSC+CDC),于是在RTT和ST的USB HOST库里选择了ST的,原因很简单,RTT目前的HOST库版本过于混乱,且不支持CDC类.因为以前看过ST DEVICE的源码和主要逻辑,所以这次上手很快.这几篇笔记记录下前段时间开发过程中对ST HOST库的理解.
11.1、HOST库参考资料
11.2、HOST库简介
环境:
STM32Cube_FW_F4_V1.26.1
STM32F4xx HAL Driver version number V1.7.10
HOST库实现和DEVICE库实现逻辑极为相似,如果熟悉了其中一个,另外一个很快就能上手修改.但HOST和DEVICE不一样的是,HOST里面有大量的状态机,一层套一层,有点繁琐.选择HOST库之前需要了解如下信息.
- ST HOST库支持复合设备(比如MSC+CDC,但是需要自行编写复合类接口文件.
- 如果使用硬件不同,可以只通过修改
usbh_conf.c
文件来进行移植. - HOST库不支持通过HUB控制设备.
- HOST库不支持多配置设备.
- 如要同时使用HS和FS,可参考F4的HAL库里面的
DualCore_Standalone
例程.如果不知道路径,直接电脑本地搜索这个例程名字即可.
11.3、HOST库框架
和之前一样,先对HOST库有一个全面性的了解,这样对后续移植,修改会有一个很好的帮助.
先看下图.
HOST库主要分为5层.
-
1、应用程序
-
该部分主要是用户自己的处理逻辑,根据需求而定.
-
2、类API及类的处理函数
- USBhost库已经支持了下图所示类.
- 对应上面信息,如果需要支持复合设备,需要在本层自行编写复合设备类处理函数.如果需要支持通过HUB控制设备,则需要在本层及内核处理状态机同时进行修改.且难度较大.但同时如果要做复合设备,那么本层文件也是需要修改的主力文件.
- USBhost库已经支持了下图所示类.
-
3、内核API及内核处理状态机
内核API文件 说明 usbh_ctlreq.c 管道控制的API(开始、关闭、分配) usbh_ioreq.c 标准控制请求(获取配置描述符、获取字符串描述符等,参考标准的USB请求 usbh_pipes.c USB传输管理API(控制、批量、中断、同步) 内核API这部分不需要涉及太多,都是一些基本的操作.
内核处理文件 说明 usbh_core.c 主要的主机内核文件。 实现主机状态机 管理设备检测与枚举,控制类模块进行类操作 内核处理文件,主要函数
USBH_Process
,整个函数包括了设备插入后上电、枚举、类请求、处理、拔出等整套处理逻辑,如果有需要可以适当修改里面的该函数逻辑. -
4、底层接口
这部分在UM1720
文档里也被划分到了内核文档里面,主要功能是方便移植使用,本文件对STM32底层接口进行了一层封装,统一API,提高兼容性.
上层所使用所有功能接口均由本文件提供.包括但不限于USB硬件管脚初始化、USB各状态回调函数、USB基础操作(开始、停止、获取速度、管道操作等)等.
- 5、STM32 Cube HAL驱动
最底层操作,所有实际动作均由本层完成,主要是对寄存器级别的一层封装.如有兴趣可自行了解.