最近一直在研究F423的USB进行tinyusb的移植,但由于AT的USB库协议栈耦合的比较深,移植tinyusb库还没完成,但对AT的设备库已经了解的差不多。现对F423的USB设备库的使用和大家分享一下。
首先,由于USB库相对比较复杂,AT原厂提供《AN0097应用笔记》,描述了AT32F4xx 系列 USB 设备库的架构和使用方法,但我看了以后感觉对新手还有点不够详细,我来结合《AN0097应用笔记》和例程进行一下说明。
首先《AN0097应用笔记》的文件路径如下:
我们以vcp_loopback例程进行讲解
《AN0097应用笔记》内的库文件结构说明如下
工程文件打开后的文件结构和文件库文件结构是对应的
虽然文件功能在《AN0097应用笔记》都有相关的介绍,但文件之间的关系并没有介绍。
USB除了用户应用程序外,实际就两部分内容,分别是初始化处理和中断处理,我就这两部分内容结合程序来介绍一下文件之间的关系。
首先是初始化部分
初始化时,针对不同设备类,需要提供类的函数指针,以便在中断中回调到类中断处理
cdc_class_handler的类函数在cdc_class.c内,处理类中断事件
cdc_desc_handler的类函数在cdc_desc.c内,处理描述符中断事件
不同类型的描述符也都在cdc_desc.c内,修改时在这个文件内修改即可
另外,USB通信涉及的端点定义和字符串定义在cdc_desc.h内,
文件关系如下:
初始化实现函数在usb_core.c内
最核心的USB 设备核心初始化函数
usbd_core_init(&(otgdev->dev), otgdev->usb_reg,
class_handler,
desc_handler,
core_id);
是在usbd_core.c内实现的
usbd_core.c内实现了所有的USB设备驱动,相关API函数如下
文件关系如下
至此,初始化相关的文件关系就介绍完了。
下面开始中断的介绍
例程的USB中断入口函数在main.c内
usbd_irq_handler(&otg_core_struct);的函数实现是在usbd_int.c内,USB的所有中断处理都在这个函数内处理。
我以标准请求为例,来看以下各文件的关系
Setup是out中断,在out端点中断处理
usbd_outept_handler(udev);内通过中断标志判断,进入Setup处理
Setup的处理函数usbd_core_setup_handler(udev, ept_num);在USB驱动文件内usbd_core.c
再根据Setup不同请求分别处理,这里以设备请求usbd_device_request(udev);为例
一下来以描述符请求usbd_get_descriptor(udev);为例,函数内通过初始化时配置的 类函数和类描述符函数指针实现了类函数的执行
文件关系如下
通过上述一个中断的流程为例,将中断函数间的文件管理进行了梳理和介绍,这样可以更好的理解USB设备库文件之间的使用关系,希望对AT USB设备库感兴趣的人有所帮助。
|