TinyUSB基本介绍
TinyUSB是一个用于嵌入式系统的开源的跨平台USB协议栈,协议栈中包含了主机端及设备端的协议栈,由于不使用动态内存分配以及采用阻塞所有中断事件,在非ISR任务功能中处理中断事件的设计方式,所以此协议栈的内存安全性及线程安全性极高。
源码是托管在GitHub上面,地址是:https://github.com/hathach/tinyusb。
主要文件目录功能
Examples--- 各种使用tinyusb实现的例程,可以用于参考
hw--- 和硬件相关的文件,一般移植不需要使用(不分公用头文件需要使用)
lib--- 第三方库,一般移植不需要使用
src---tinyusb源码文件
Examples目录说明
属于工程专用文件,main.c文件可以自己创建,可以参考例程中的main.c文件使用tinyusb库。
src目录说明
tusb.c是tinyusb的核心文件,需要添加到工程,并包含相关头文件
Class---类文件,根据所要使用的类使用相关文件
Common---公共文件,需要添加tusb_fifo.c文件到工程,并包含相关头文件
device---设备模式需要使用的文件,使用USB设备时需要添加usbd.c和usbd_control.c文件到工程,并包含相关头文件
host---主机模式要使用的文件,使用USB主机时需要添加hub.c和usbh.c文件到工程,并包含相关头文件
osal---操作系统抽象层,在使用RTOS时需要添加头文件
portable---移植文件,不同芯片移植时的接口文件,需要自己根据所使用的芯片进行编写!!!
typec---是type-c使用是的相关文件,需要添加usbc.c文件到工程,并包含相关头文件
开始移植,以tinyusb例程中设备模式的音频例程uac2_headset为例
首先移植和例程相关的文件,tinyusb-master\examples\device\uac2_headset\src里的文件到新的工程目录下examples\usb_device\audio_tinyusb\uac2_headset_src(此目录可根据自己工程情况进行修改,添加到新工程时注意路径即可),这里的main.c文件为参考文件,实际使用时可不拷贝。
Tinyusb 例程文件路径
新工程文件路径
添加tinyusb库源码文件,实际使用中会用到
class\audio内文件
Common内文件
device内文件
还需要在portable内创建芯片的接口文件(此文件需要根据芯片自己创建)
Tinyusb库源码路径
添加到新工程后的Tinyusb库源码路径
打开工程文件,将拷贝的文件添加到工程
添加头文件路径
其中hw\bsp这个路径需要注意一下,usb_descriptors.c内的使用函数board_usb_get_serial(_desc_str + 1, 32);在board_api.h内,所有需要添加这个头文件路径。
添加完文件和头文件路径后,需要在设置项内添加宏 CFG_TUSB_MCU,否则会报很多错误。
添加CFG_TUSB_MCU有2中方法,第一种如下,参数使用tinyusb未定义MCU型号时的默认参数。
另外一种方式是采用和tinyusb库已经支持的芯片信号的风格一致的方式。
首先在tusb_option.h内添加新的芯片型号宏定义
然后在tusb_config.h内添加
#define CFG_TUSB_MCU OPT_MCU_AT32F405 宏定义
最后需要在common/tusb_mcu.h内添加芯片参数定义
为保持和tinyusb的整体风格一致,在移植接口文件内需要需添加#include "board_mcu.h"链接MCU库。
在board_mcu.h内添加芯片头文件
支持移植工作就完成了,剩下开始接口对接和应用实现了,下篇帖子再重点介绍。
|