【经验】如何使用雅特力AT32 MCU主机库快速开发USB相关应用

2023-01-18 AT32 MCU 雅特力科技公众号
MCU,AT32,AT32F435,AT32F437 MCU,AT32,AT32F435,AT32F437 MCU,AT32,AT32F435,AT32F437 MCU,AT32,AT32F435,AT32F437

这部分主要介绍AT32 USB主机库的结构和库的使用方法,AT32 USB支持全速和低速,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现USB的基本协议,使开发者能够更快的上手开发。


USB主机库包含以下几个模块

如图1:

用户应用程序

此部分为开发者根据应用具体需求开发应用程序。

USB Core Driver和USB主机类

USB Core Driver:此部分实现USB设备标准协议栈,标准请求等接口。USB主机类:此部分实现具体USB主机请求。

USB主机硬件底层接口

此部分实现硬件寄存器抽象接口

USB/OTG外设



AT32 USB库文件

如下是AT32 USB应用工程结构图:


Core Driver库路径:OTGFS-->middlewares\usb_drivers

Host Class库路径:middlewares\usbh_class

如下是USB主机库文件列表:



USB主机库文件说明

USB库实现USB主机枚举标准请求,同时实现USB规格里面的4种传输类型(control,interrupt,bulk,isochronous)的函数接口。



USB主机文件函数接口

usbh_int.c函数接口

usbh_int.c主要处理底层中断,包括设备连接,设备断开等。



usbh_core.c函数接口

usbh_core.c此文件封装不同的usb主机函数接口用于不同的地方调用,包括一些接收,发送函数等。



usbh_ctrl.c函数接口

usbh_ctrl.c此文件处理USB主机枚举过程中的一些标准请求。



支持的标准设备请求如下表:



usbh_xx_class.c函数接口

usbh_xx_class.c此文件为具体主机类型的数据处理,通过结构体函数来实现不同主机类型数据的处理。开发者根据不同的主机类型,来实现下面函数结构体中的函数,达到不同应用结果。

函数结构体如下:



usbh_user.c函数接口

usbh_user.c此文件主要为一些给用户处理事件的函数如复位,断开连接等。



其它参数

函数的参数结构体如下,USB主机库中参数传递使用结构体usbh_core_type,如下图:



USB主机的状态机如下图:



USB返回值,USB函数接口使用如下函数返回值。



通道FIFO分配

USB主机要正常收发数据,在初始化时需要为通道分配FIFO,分配给所有通道FIFO大小的和不能超过系统分配给USB缓冲区的最大长度,具体USB的缓冲区大小参考RM上的描述。开发者可以参考例程usb_conf.h为通道自定义分配FIFO。


OTGFS主机通道FIFO分配

主机模式下,所有通道共享一个接收FIFO,通道发送FIFO分为非周期性发送FIFO和周期性发送FIFO。注意usb_conf.h中对端点分配的FIFO大小单位为word(Byte)。

以hid_demo例程为例:



USB主机初始化

在使用USB主机功能时,需要对USB的寄存器做一些基本的初始化,通过调用USB主机的初始化函数完成这部分的操作。


OTGFS外设初始化

OTGFS初始化函数usbd_init包含5个参数:



例程主机hid_demo的初始化如下:



USB主机中断处理

USB主机中断入口函数usbh_irq_handler处理所有USB主机中断,包括连接状态,通道收发数据,SOF,唤醒等中断,下面介绍一些典型的中断处理。



通道中断处理

当USB主机与设备进行通信时,通道的收发状态都在通道中断中处理,通道的方向分为IN和OUT通过通道寄存器中的方向为进行判断。

中断处理函数:usbh_hch_handler

代码如下:



Wakeup中断处理

当USB主机在挂起状态时,检测到设备触发的远程唤醒信号,将产生此中断。此中断会将当前主机状态改为WAKEUP状态:

中断处理函数:usbh_wakeup_handler

代码如下:



接收FIFO非空中断

此中断表示当前接收FIFO有数据,应用程序通过此中断读出接收到的数据,并存放到对应通道的FIFO当中,当数据读取完成之后,会产生对应的通道的中断。

中断处理函数:usbh_rx_qlvl_handler

代码如下:



主机端口中断处理

当USB主机断开发生状态改变时,会产生端口中断,应用程序通过此中断判断连接设备的速度等。

中断处理函数:usbh_port_handler



设备断开连接中断处理

当连接的设备断开是,会产生断开连接中断。

中断处理函数:usbh_disconnect_handler

代码:



USB主机枚举处理

USB主机状态机在usbh_loop_handler函数中处理,对应的主机状态机uhost->global_state,如下图是设备连接到主机的状态处理流程:



USBH_IDLE:当USB启动或者设备断开连接之后在此状态

USBH_PORT_EN:USB主机端口使能之后在此状态

USBH_ATTACHED:USB设备连接稳定之后

USBH_ENUMERATION:USB设备标准的枚举流程

USBH_USER_HANDLER:枚举完成之后,调用主机类的初始化函数

USBH_CLASS_REQUEST:主机类初始化完成之后,进行主机类请求

USBH_CLASS:所有枚举完成,进行正常的数据处理。


USB主机枚举流程

当设备接到主机之后,通过控制端点(端点0)进行枚举动作,USB主机的枚举状态如下:



如下是主机枚举的状态机流程:



ENUM_GET_MIN_DESC:获取8字节设备描述

ENUM_GET_FULL_DESC:获取18字节设备描述

ENUM_SET_ADDR:设置设备地址

ENUM_GET_CFG:获取9字节配置描述

ENUM_GET_FULL_CFG:获取完整的配置描述

ENUM_GET_MFC_STRING:获取设备厂商信息

ENUM_GET_PRODUCT_STRING:获取设备产品信息

ENUM_GET_SERIALNUM_STRING:获取设备序列号信息

ENUM_SET_CONFIG:SET CONFIGURE

ENUM_COMPLETE:枚举完成


USB控制传输过程包含SETUP-DATA-STATUS三个阶段,如下是一个主机获取设备信息的传输过程GET_DESCRIPTOR:



如下是USB主机库一个SETUP-DATA-STATUS函数调用流程:



usbh_ctrl_transfer_loop函数中断对控制请求的各个状态阶段进行处理:

控制请求状态机:



USB主机类初始化

在USB标准枚举完成之后,会调用USB主机类的初始化,在初始化函数中解析当前枚举的设备是否支持,调用函数uhost->class_handler->init_handler(uhost)。

初始化代码例:




USB主机类请求

USB主机类初始化之后,可以发送主机类控制请求,根据不同的设备类,需要实现不同的设备类请求。调用函数uhost->class_handler->request_handler((void*)uhost);

主机类请求例:



USB主机数据处理

所有枚举完成之后,将进行主机数据处理

主机数据处理例:



USB主机类型例程

本章将说明使用AT32 USB主机库实现不同的主机类型的例程。目前实现的主机类例程如下:

hid(mouse,keyboard)

mass storage(msc_only_fat32)

two_otg_host_demo(仅AT32F435/437支持)


HID例程

HID类支持鼠标和键盘设备,开发者可修改此例程用以实现支持其它HID类设备。

HID类:



HID类例程初始化

当USB设备标准枚举完成之后,会进行初始化,调用uhost_init_handler,调用此函数将解析接到主机上的设备类型,是鼠标还是键盘或者其它设备。

通过设备的配置描述信息进行如下流程解析:

查找HID接口

判断接口是鼠标还是键盘

查找对应接口的端点号

初始化对应通道

代码如下:



HID类请求

HID类请求实现一些HID设备的标准请求,调用函数uhost_request_handler

SET_IDLE

SET_PROTOCOL

GET_REPORT

代码如下:



HID类数据处理

HID枚举设置完成之后,USB主机可以请求设备数据,通过调用uhost_process_handler来处理。

通过usbh_interrupt_recv函数给设备发送IN请求

通过usbh_get_urb_status(puhost,phid->chin);获取IN请求的状态

通过phid->in_poll判断多长时间发送一次IN请求

通过phid->protocol判断是鼠标还是键盘

代码如下:



MSC例程

msc_only_fat32实现一个简单的mass storage主机类,仅支持FAT32格式。

MSC类:



MSC类初始化

当USB设备标准枚举完成之后,会进行初始化,调用uhost_init_handler,调用此函数将解析接到主机上的设备类型,判断是否是MSC类型。

通过设备的配置描述信息进行如下流程解析:

查找MSC接口

查找对应接口的端点号

初始化对应通道

初始化bulk-only和SCSI状态机

代码如下:



MSC类请求

MSC类请求实现一些MSC设备的标准请求,调用函数uhost_request_handler

GET_MAX_LUN

代码如下:



MSC类数据处理

HID枚举设置完成之后,USB主机可以请求设备数据,通过调用uhost_process_handler来处理。

实现如下命令:

INQUIRY

TEST_UNIT_READY

READ_CAPACITY10

REQUEST_SENSE

代码如下:



MSC读写数据

MSC读写数据在通过FATFS接口进行实现,在usbh_msc_diskio.c中实现读写函数。



CDC例程

cdc实现一个简单的虚拟串口类。

CDC类:



CDC类例程初始化

当USB设备标准枚举完成之后,会进行初始化,调用uhost_init_handler,调用此函数将解析接到主机上的设备类型。

通过设备的配置描述信息进行如下流程解析:

查找CDC接口

判断接口是否为虚拟串口

查找对应接口的端点号

初始化对应通道

代码如下:



CDC类请求

CDC类请求实现一些CDC设备的标准请求,调用函数uhost_request_handler

GET_LINECODING

代码如下:



CDC类数据处理

CDC枚举设置完成之后,USB主机可以请求设备数据,通过调用uhost_process_handler来处理。

通过set_linecoding和get_linecoding配置linecoding

通过cdc_process_reception(puhost)函数给设备发送IN请求

通过cdc_process_transmission(puhost)函数发送数据给设备

代码如下:



two_otg_host_demo例程

AT32F435/437存在两个OTGFS,此例程说明同时使用两个OTGFS实现两个host功能。

实现功能:

OTGFS1实现MSC主机(参考MSC例程)

OTGFS2实现HID主机(参考HID例程)


配置与实现

在usb_conf.h中配置OTGFS1和OTGFS2:



在main中初始化:


授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由玉鹤甘茗转载自AT32 MCU 雅特力科技公众号,原文标题为:AT32讲堂043 | 如何使用AT32 MCU主机库快速开发USB相关应用,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关研发服务和供应服务

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

【经验】雅特力AT32 MCU CAN入门指南

CAN是Controller Area Network的缩写(以下称为CAN),它的设计目标是以最小的CPU负荷来高效处理大量的报文。本文介绍雅特力AT32 MCU CAN入门指南

2023-02-08 -  设计经验 代理服务 技术支持 采购服务

AT32讲堂 | 解析雅特力AT32 MCU HICK时钟校准

AT32系列MCU内部都有提供适合运行的内部高速时钟(HICK),在25℃下,其典型值频率8MHz的精度由工厂校准到±1%,在-40到105℃,该内部高速时钟的精度达到±2.5%,可见精度会受到温度的影响。为了降低环境温度对精度造成的影响,用户可在运行时间隙调用校准程序来进行校准。

2024-09-29 -  设计经验 代理服务 技术支持 采购服务

【经验】雅特力AT32 MCU如何使用OTA通过USART实现对固件的在线升级更新

雅特力AT32 MCU如何使用OTA通过USART对固体在线升级更新?OTA(空中下载技术)是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后便于通过预留的通信口,对产品中的固件程序进行更新升级。

2022-04-28 -  设计经验 代理服务 技术支持 采购服务

【经验】 雅特力AT32 MCU Printf的功能使用方法

内容概述本文档主要介绍雅特力AT32 MCU在Keil和IAR两种工程环境下的printf功能使用方法。其共包含6种方法,各方法的具体用法在具体内容中描述。

2022-05-26 -  设计经验 代理服务 技术支持 采购服务

AT32讲堂 | 雅特力AT32 MCU的随机数生成

本章介绍了使用软件触发方式触发ADC,配置普通信道和DMA。本篇应用笔记适用于AT32各系列MCU,只要有ADC外设皆可适用。

2024-09-29 -  设计经验 代理服务 技术支持 采购服务

【经验】雅特力MCU AT32F421的时钟配置教程

时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件,其重要性不言而喻。AT32各系列产品的时钟配置部分可能存在细微的差异和需要注意的事项,本文就着重针对各系列的情况来详细介绍如何结合雅特力提供的V2.x.x的板级支持包(BSP)来配置时钟。

2023-06-10 -  设计经验 代理服务 技术支持 采购服务

【经验】解析雅特力AT32系列MCU RTC入门指南

RTC计数逻辑位于电池供电域,内部为一个32位递增计数器,只要电池供电域有电,RTC便会一直运行,不受系统复位以及VDD掉电影响。本文雅特力将为大家介绍AT32系列MCU的RTC入门指南。

2023-04-25 -  设计经验 代理服务 技术支持 采购服务

如何在雅特力AT32 MCU上创建IAP应用程序

如何在雅特力AT32 MCU上创建IAP应用程序,文章概述了AT32 CAN IAP快速使用方法即使用CAN进行IAP升级,此示例使用PC上位软件(IAP_Programmer.exe)通过一个USB转CAN的桥接设备和目标板进行通信,IAP Demo和桥接设备默认CAN波特率使用500K。

2024-07-08 -  设计经验 代理服务 技术支持 采购服务

【经验】如何使用雅特力MCU AT32F407的以太网通信接口实现在应用中编程?

在应用中编程(IAP)是一种在现场通过MCU通信接口(例如USART、USB、CAN和以太网)进行固件升级的方式。本文将介绍两种使用以太网通信外设在雅特力MCU AT32F407上实现IAP的解决方案。

2022-10-15 -  设计经验 代理服务 技术支持 采购服务

【经验】雅特力AT32 MCU USB设备库的架构和使用方法

本文主要介绍雅特力MCU AT32 USB设备库的结构和库的使用方法,AT32 USB是基于USB2.0全速设备,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现USB的基本协议,使开发者能够更快的上手开发。

2023-03-04 -  设计经验 代理服务 技术支持 采购服务

雅特力AT32F423系列MCU时钟配置指南

时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件,其重要性不言而喻。AT32各系列产品的时钟配置部分可能存在细微的差异和需要注意的事项,本文档就着重针对各系列的情况来详细介绍如何结合雅特力提供的V2.x.x的板级支持包(BSP)来配置时钟。

2024-04-16 -  设计经验 代理服务 技术支持 采购服务

雅特力32位MCU-AT32快速选型指南

描述- 本资料为AT32系列微控制器(MCU)选型表,详细列出了不同型号的AT32 MCU的特性和支持功能。包括I2S通信模式(全双工/半双工)的支持情况,以及不同型号之间的差异。资料更新日期为2022年3月8日,版本号为V202203,支持多个系列型号。

型号- AT32F413CCU7,AT32F437ZCT7,AT32F415CBT7,AT32F415R8T7,AT32F425F8P7,AT32F437ZGT7,AT32F403ZET6,AT32F421K6T7,AT32F425C6U7,AT32F437VMT7,AT32F425R8T7,AT32F437RGT7,AT32F421K4U7-4,AT32F437RCT7,AT32F403ARGT7,AT32WB415CCU7-7,AT32F413CBT7,AT32F435CMT7,AT32F403ARCT7,AT32F415CCU7,AT32F435RCT7,AT32F435ZGT7,AT32F403AVET7,AT32F435RGT7,AT32F435VMT7,AT32F421C6T7,AT32F403ACET7,AT32F413KBU7-4,AT32F435ZCT7,AT32WB415,AT32F435CMU7,AT32F413CBU7,AT32F415KBU7-4,AT32F407RCT7,AT32F403ACGU7,AT32F407VET7,AT32F425K8U7-4,AT32F407RGT7,AT32F403ACCU7,AT32F415RCT7,AT32F425R8T7-7,AT32F415CBU7,AT32F425K6T7,AT32F421K6U7,AT32F425K6U7-4,AT32F425C6T7,AT32F421G4U7,AT32F415RBT7-7,AT32F421G8U7,AT32F421F4P7,AT32F421F8P7,AT32F413RCT7,AT32F425R6T7-7,AT32F413KCU7-4,AT32F413,AT32F425F6P7,AT32F415,AT32F437VCT7,AT32F421K4T7,AT32F437VGT7,AT32F437ZMT7,AT32F421K8T7,AT32F425C8U7,AT32F403ZGT6,AT32F403ZCT6,AT32F425R6T7,AT32F413C8T7,AT32F415RBT7,AT32F421,AT32F403ARET7,AT32F403,AT32F435VGT7,AT32F435CGT7,AT32F407,AT32F435VCT7,AT32F421C8T7,AT32F435CCT7,AT32F403ACGT7,AT32F403AVGT7,AT32F421C4T7,AT32F403ACCT7,AT32F435ZMT7,AT32F403AVCT7,AT32F413RBT7,AT32F415C8T7,AT32F435,AT32F415RCT7-7,AT32F437,AT32F435CGU7,AT32F407VCT7,AT32F415CCT7,AT32F407VGT7,AT32F435CCU7,AT32F415KCU7-4,AT32,AT32F407RET7,AT32F403ACEU7,AT32F415K8U7-4,AT32F415R8T7-7,AT32F435RMT7,AT32F413CCT7,AT32F425,AT32F421K4U7,AT32F425K8T7,AT32F421K8U7-4,AT32F421K8U7,AT32F425C8T7,AT32F437RMT7,AT32F421G6U7,AT32F421K6U7-4,AT32F421F6P7,AT32F403A

2022.03.08  - 雅特力  - 快速参考指南  - V202203 代理服务 技术支持 采购服务

【经验】雅特力MCU AT32F435/437如何使用ADC控制器

ADC控制器的功能极其强大,包括但不限于:时钟及状态、分辨率及采样转换、自校准、基本模式、不同优先权的通道、多种独立的触发源、数据后级处理、转换中止、过采样器、电压监测、中断及状态事件、多种转换数据的获取方式、联动多ADC的主从模式。本文通过功能细节介绍和众多案例帮助大家了解ADC控制器的功能和使用指南。

2023-01-05 -  设计经验 代理服务 技术支持 采购服务

雅特力AT32F405高速USB MCU荣获“年度最佳MCU”

3月28-29日,由AspenCore主办的2024国际集成电路展览会暨研讨会在上海张江科学会堂圆满举行。2024年中国IC设计Fabless100排行榜也在同期举行的中国IC领袖峰会发布,雅特力AT32F405荣获“中国IC设计成就奖之年度最佳MCU”。

2024-04-12 -  原厂动态 代理服务 技术支持 采购服务
展开更多

电子商城

查看更多

品牌:雅特力

品类:32位通用MCU

价格:¥4.2360

现货: 23,058

品牌:雅特力

品类:MCU

价格:¥28.9420

现货: 901

品牌:雅特力

品类:MCU

价格:¥19.0590

现货: 771

品牌:雅特力

品类:32位MCU

价格:¥17.3130

现货: 11,929

品牌:雅特力

品类:32位MCU

价格:¥13.3420

现货: 8,628

品牌:雅特力

品类:32位MCU

价格:¥14.6240

现货: 6,234

品牌:雅特力

品类:32位MCU

价格:¥16.2950

现货: 5,771

品牌:雅特力

品类:32位MCU

价格:¥12.1770

现货: 4,875

品牌:雅特力

品类:32位MCU

价格:¥10.8480

现货: 4,406

品牌:雅特力

品类:32位MCU

价格:¥19.0120

现货: 2,536

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:RENESAS

品类:16-BIT MCU

价格:¥5.5190

现货:910,635

品牌:RENESAS

品类:MCU

价格:¥5.1500

现货:200,000

品牌:恒烁

品类:MCU

价格:¥1.0800

现货:154,600

品牌:Advanced Digital Chips

品类:MCU

价格:¥6.6000

现货:100,000

品牌:RENESAS

品类:MCU

价格:¥5.8041

现货:86,925

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥7.3800

现货:76,715

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥15.3000

现货:75,000

品牌:Advanced Digital Chips

品类:MCU

价格:¥9.0000

现货:64,841

品牌:ST

品类:MCU

价格:¥15.5600

现货:58,800

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥257.6400

现货:58,799

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

TFT LCD液晶显示屏/模组定制

可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。

最小起订量: 1000 提交需求>

IC烧录代工及IC自动化烧录

拥有IC烧录机20余款,100余台设备,可以烧录各种封装的IC;可烧录MCU、FLASH、EMMC、NAND FLASH、EPROM等各类型芯片,支持WIFI/BT模组PCBA烧录、测试。

最小起订量: 1 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面