基于微控制器MM32F5333D7P的USB接口TinyUSB应用指南:Host设备的移植和U盘文件读写
1、基本介绍
灵动微电子推出的MM32F5330微控制器搭载了由安谋科技授权的Armv8-M架构“星辰”STAR-MC1处理器,最高工作频率可达180MHz。内置了128KB Flash,32KB SRAM,并集成了丰富的I/O端口和外设模块,包括ADC,DAC,模拟比较器,高级定时器,通用定时器,基础定时器和低功耗定时器,还包含通信接口如I2C,I3C从机,SPI或I2S,UART,USART,低功耗UART,集成了内部PHY的USB 2.0全速Device/Host控制器,以及FlexCAN-FD接口。
180MHz“星辰” STAR-MC1 处理器,内置单精度浮点运算单元 FPU,支持DSP 扩展
128KB Flash,32KB SRAM,集成丰富的 I/O 端口和外设模块
4 个UART,1 个 USART,1 个 LPUART
1 个集成内部 PHY 的 USB 2.0
1 个 FlexCAN-FD 接口
2 个 I2C,1 个 I3C 从机,3 个 SPI 或 I2S
2 个 3MSPS 12 位的 ADC, 1 个 12 位的 DAC
2 个 16 位 Adv Timer, 6 个 GP Timer,1 个 LP Timer
工作电压:1.8V ~ 5.5V
工作温度范围:-40℃ ∼ +105℃
封装形式:LQFP64/48,QFN32
TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备协议栈,源码是托管在GitHub上面,地址是:https://github.com/hathach/tinyusb。
2、TinyUSB Host基本移植介绍
之前我们有讲过TinyUSB Device的移植,本期我们就来介绍一下Host设备的移植。同样的我们介绍的移植修改是基于TinyUSB examples\host下已经有参考示例的设备。将TinyUSB 从GitHub上克隆下来,example\host文件夹里面就有对应的示例,本次我们以msc_file_explorer为示例演示如何移植一个host设备。
图1 TinyUSB Host示例
将tinyusb 目录下examples\host\msc_file_explorer下的对应三个文件copy到例程TinyUSB_Host_MSC工程目录文件夹里面。
图2 TinyUSB msc_file_explore文件
图3 TinyUSB_Host_MSC工程目录
MM32F5333有两个PLL,PLL1可以设置高主频180M给CPU和其他外设使用,PLL2可以单独配置给USB使用。增加一个USB时钟配置函数void USB_DeviceClockInit(void)和void SetPLL2ToUSB_HSE_96M(void),PLL2配置96M 选择PLL2输入二分频到USB。有使用TU_LOG做串口输出,可以使能CFG_TUSB_DEBUG 为需要的输出等级,同时将#define tu_printf printf 改到串口输出,Keil Options->Target 勾选Use MicroLIB,并实现重定向函数。
void SetPLL2ToUSB_HSE_96M(void)
{
RCC->CR &= ~RCC_CR_PLL2ON_Msk;
/* Reset PLL2SRC, PLL2PDIV, PLL2MUL, PLL2DIV bits */
RCC->PLL2CFGR &= ~RCC_PLL2CFGR_PLL2SRC_Msk;
RCC->PLL2CFGR &= ~RCC_PLL2CFGR_PLL2PDIV_Msk;
RCC->PLL2CFGR &= ~RCC_PLL2CFGR_PLL2MUL_Msk;
RCC->PLL2CFGR &= ~RCC_PLL2CFGR_PLL2DIV_Msk;
/* Config pll clock source*/
RCC->PLL2CFGR |= (0x01U << RCC_PLL2CFGR_PLL2SRC_Pos);
/* set PLL2 CP Current Control Signals */
RCC->PLL2CFGR &= ~RCC_PLL2CFGR_PLL2ICTRL_Msk;
if (HSE_VALUE >= 8000000)
{
RCC->PLL2CFGR |= (0x03 << RCC_PLL2CFGR_PLL2ICTRL_Pos);
}
else
{
RCC->PLL2CFGR |= (0x01 << RCC_PLL2CFGR_PLL2ICTRL_Pos);
}
RCC->PLL2CFGR |= ((0x17 << RCC_PLL2CFGR_PLL2MUL_Pos) | (0x01 << RCC_PLL2CFGR_PLL2DIV_Pos));
/* Enable PLL2 */
RCC->CR |= (0x01U << RCC_CR_PLL2ON_Pos);
/* Wait till PLL2 is ready */
while ((RCC->CR & RCC_CR_PLL2RDY_Msk) == 0)
{
__ASM("nop"); /* __NOP(); */
}
}
void USB_DeviceClockInit(void)
{
/* Select USBCLK source */
RCC->CFGR |= 1 << 19; //USB CLK SEL PLL2
RCC->CFGR &= ~(0x03 << 22);
RCC->CFGR |= 0x01 << 22;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_USB_FS, ENABLE);
}
添加tuh_hcd_port.c 接口函数文件。
图4 Keil添加tuh_hcd_port.c文件
移植修改和之前Device设备基本流程一致,Keil工程按如下文件树添加对应文件。
图5 Keil工程添加对应.c文件
工程文件树如下:
1.TinyUSB_Host_MSC
2. │
3. ├─APP
4. │ main.c
5. │ mm32f5330_it.c
6. │ platform.c
7. │ msc_app.c
8. │ tinyusb_msc_file_explorer.c
9. │ tuh_hcd_port.c
10. │
11. ├─TinyUSB
12. │ tusb.c
13. │ tusb_fifo.c
14. │ hub.c
15. │ usbh.c
16. │ msc_host.c
17. │
18. └─FATFS
19. ff.c
20. ffsystem.c
21. ffunicode.c
在tusb_config.h文件里面添加#define CFG_TUSB_MCU OPT_MCU_MM32F533X Tusb_mcu.h 文件里面增加:
//------------- MindMotion -------------//
#elif TU_CHECK_MCU(OPT_MCU_MM32F016X)
#define TUP_DCD_ENDPOINT_MAX 8
#elif TU_CHECK_MCU(OPT_MCU_MM32F327X)
#define TUP_DCD_ENDPOINT_MAX 16
#elif TU_CHECK_MCU(OPT_MCU_MM32F533X)
#define TUP_DCD_ENDPOINT_MAX 16
在while(1)循环里面添加tuh_task(); 然后解决基本的编译问题后烧录板子插入U盘,将printf接上串口调试助手即可测试。
void TinyUSB_MSC_File_Explorer_Sample(void)
{
printf("\r\nTest %s \r\n", __FUNCTION__);
TinyUSB_Device_Configure();
while (1)
{
// tinyusb host task
tuh_task();
}
}
插入和拔出U盘都能看到”A MassStorage device is mounted”和”A MassStorage device is unmounted” 证明已经成功读取到U盘。
图6 插入和拔出U盘串口log打印
3、U盘基本的文件读写测试
基于上述两点我们已经能通过USB设备识别到U盘了,同时TinyUSB lib\fatfs\source里面也提供了FatFs 文件操作的接口,下面我们就基于这些文件操作接口函数对U盘里面的文件进行读写操作测试。
图7 ff.c FatFs 文件操作函数接口
首先识别到U盘我们先用f_mount 对U盘挂载,挂载成功之后使用f_getfree得到当前U盘空间等相关信息。
printf("test f_getfree:\r\n");
fatfsCode = f_getfree((char const *)&driverNumberBuffer[0], (DWORD *)&freeClusterNumber, &fs);
if (fatfsCode)
{
printf("error\r\n");
return false;
}
if (fs->fs_type == FS_FAT12)
{
printf(" FAT type = FAT12\r\n");
}
else if (fs->fs_type == FS_FAT16)
{
printf(" FAT type = FAT16\r\n");
}
else
{
printf(" FAT type = FAT32\r\n");
}
printf(" bytes per cluster = %d; number of clusters=%lu \r\n", fs->csize * 512, fs->n_fatent - 2);
printf(" The free size: %dKB, the total size:%dKB\r\n", (freeClusterNumber * (fs->csize) / 2),
((fs->n_fatent - 2) * (fs->csize) / 2));
根据那些操作接口函数我们可以对U盘里面的文件进行读写操作,创建删除文件/文件夹,插入U盘后测试打印log如下:
图8 f_readdir 读取并列出U盘文件信息串口log打印
图9 U盘文件读写操作串口log打印
基于 MM32F5333D7P 的USB 接口 TinyUSB应用测试功能正常,测试在MM32F5330上能够实现对U盘里面的文件进行读写操作,创建删除文件/文件夹等操作。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由ll转载自MindMotion(灵动微)微信公众号,原文标题为:灵动微课堂 (第274讲)|基于MM32F5333D7P的USB接口TinyUSB应用:Host设备的移植和U盘文件读写,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
灵动微电子MM32F0160系列MCU FlexCAN-FD通信应用指南
MM32F0160系列MCU具有一个 FlexCAN 模块,该模块遵循 ISO 11898-1 标准、 CAN FD 和 CAN 2.0B 协议规范,不仅兼容传统CAN,还支持CAN FD模式。本章节初步学习使用MM32F0160 FlexCAN-FD接口实现CAN FD通信,相关例程参考灵动官网的LibSamples或在此基础上修改。
使用灵动MM32F5270 MCU UART配置实现LIN通信
本文主要简述MM32F5270 UART是如何实现LIN通信的。从LIN驱动程序、 主机程序、从机程序和验证等方面来讲代码实现。
基于MM32F5270 MCU初步学习移植FreeRTOS
FreeRTOS是一个RTOS类的嵌入式实时操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。本系列微课堂基于MM32F5270 MCU初步学习使用FreeRTOS开发。
【IC】灵动微电子高性能通用32位MCU产品MM32H5480荣获“2024年度硬核MCU芯片奖”
近日,第六届硬核芯生态大会在深圳举办,同期2024年度硬核中国芯获奖榜单正式发布。作为国内领先的本土通用32位MCU产品及解决方案供应商,MindMotion灵动微电子凭借高性能产品MM32H5480斩获“2024年度硬核MCU芯片奖”。
MindMotion(灵动微) MCU选型表
32位高性能,高性价比MCU,Core核心有M0、M0+、2XM0、M3、STAR-MC1,Flash存储容量范围 16KB~2048KB,RAM存储容量范围 2KB~128KB,工作电压:1.8~48V,CPU频率(MHz):48~180MHz,GPIO 端口数(个):6~86,LQFP/TSSOP/QFN等多种封装形式。
产品型号
|
品类
|
内核
|
管脚数(个)
|
工作温度(℃)
|
CPU频率(MHz)
|
工作电压(V)
|
GPIO 端口数(个)
|
Flash(KB)
|
SRAM (KB)
|
封装/外壳/尺寸
|
MM32F0163D7PV
|
32位MCU
|
M0
|
64
|
-40℃~105℃
|
96MHz
|
2.0~5.5V
|
57
|
128KB
|
16KB
|
LQFP64
|
选型表 - MindMotion 立即选型
【IC】灵动新推出32位MCU MM32F0120,主频高达72MHz,提供64KB Flash和8KB RAM
灵动微电子发布的MM32F0120,搭载Cortex M0内核,主频高达72MHz,提供64KB Flash和8KB RAM,最高支持48pin封装。适用于屏显控制、电动玩具、电源管理、马达控制、无线快充等多种应用场合。
灵动微电子扎根张江造“芯”,打造本土32位MCU知名品牌
灵动微电子成立于2011年,2016年进军MCU市场,2019年积极向工业、大家电、汽车等领域发力,目前已涵盖消费电子、电机与电源、家电、汽车、计算机与通信、工业控制等应用领域,客户群体包括飞利浦、小米、汇川、海尔、海信、美的等,是中国本土领先的通用32位MCU 产品及解决方案供应商。
【IC】灵动发布全新入门级32位MCU MM32G0001系列,内置时钟全温度范围内偏差不超过±2%
灵动股份推出全新超值型MM32G0001系列MCU。2023年初,灵动首次发布了其主打高性价比的MM32G系列,目前已陆续推出了G0140,G0160和G5330系列产品。为进一步丰富MM32G系列产品组合,灵动和上下游合作伙伴通力合作,打造出全新入门级超值型MM32G0001系列MCU。
New Milestone! Following the Success of MM32G0001, MindMotion Launches the Next-Level, High-Value MCU – MM32F0120
MindMotion Microelectronics is excited to announce the official launch of its next-level MCU, the MM32F0120. In 2023, MindMotion‘s entry-level MCU, MM32G0001, made a huge impact with its cost-performance ratio, comparable to or even surpassing 8/16-bit MCUs, earning high praise in the market.
灵动发布全新MM32F0160系列MCU,72MHz主频,支持1路高达12.5 Mbps的I3C从机接口
灵动股份发布全新MM32F0160 系列 MCU,其搭载72MHz Arm® Cortex-M0处理器,内置128KB Flash,16KB RAM,配备高速ADC、USB、CAN-FD、I3C等丰富的模拟和通信资源,适用于工业物联网设备、PC外设、电子门锁、医疗和保健设备、个人手持设备、游戏娱乐等多种应用场景。
灵动MM32SPIN⸺专注电机控制的MCU和SOC
型号- SPIN080G,MM32SPIN030C,SPIN360C,MM32SPIN06NT,SPIN033A,SPIN590G,MM32SPIN560C,MM32SPIN05PT,MM32SPIN580C,MM32SPIN05TW,SPIN0260,MM32SPIN27PF,MM32SPINEBK,MM32SPIN0230B3NV,MM32SPIN080GN,MM32SPIN06PF,SPIN02XX,MM32SPIN07,MM32SPIN0280,MM32SPIN160C,SPIN533A,MM32SPIN,MM32SPIN560CM,SPIN27,MM32SPIN023C,MM32SPIN06,MM32SPIN05,MM32SPIN0230B1NV,MM32SPIN422C,MM32SPIN0280D4PV,MM32SPIN0280D6PV,SPIN060G,SPIN0250,SPIN080C,SPIN222C,SPIN0290,SPIN040C,MM32SPIN080CN,MM32SPIN0230,MM32SPIN060G,MM32SPIN080C,SPIN0230,MM32SPIN040C,SPIN56XX,MM32SPIN37,MM32SPIN05NW,SPIN580C,SPIN160C,SPIN023C,MM32SPIN05NT,MM32SPIN06PT,MM32SPIN0280D6QV,MM32SPIN360C,SPIN0280,SPIN495C,MM32SPIN030CN,MM32SPIN27NF,SPIN560C,SPIN05XX,MM32SPIN07PF,SPIN07,SPIN06,MM32SPIN05PF,MM32SPIN27PQ,MM32SPIN0230B3TV,SPIN5630,MM32SPIN05PFOP,MM32SPIN27PS,MM32SPIN27PT,MM32SPIN0230B1TV,MM32SPIN37PSD,SPIN05,MM32SPIN533A,MM32SPIN033A,MM32SPIN27,MM32SPIN0280D7PV,MM32SPIN222C,SPIN080X,SPIN422C,MM32SPIN0280DAPV,SPIN030C,MM32SPIN080G
基于灵动MM32F0130微控制器的智能插排方案,实现远程开关控制、定时开关、随时了解家电设备的使用状况
智能插座又可以称为WIFI插座,在普通插座的功能基础上延伸了许多功能,如防雷击,防短路,防过载,防漏电,配合智能手机的APP应用,可以实现远程开关控制、定时开关、随时了解家电设备的使用状况。基于灵动MM32F0130微控制器的插排,具有以下特点:-内置Timer进行解码红外输入-通过串口与云端连接,进行远程控制,以及电量监控等-通过I2C与计量芯片通讯,进行异常检测,过流,过/欠压等保护
【经验】灵动微电子MM32F0160微控制器开源项目:如何实现一套低成本带RGB灯效的机械键盘
灵动的软件与系统工程SE团队,基于带有 USB 外设模块的 MM32F0160 微控制器,实现了一套低成本带RGB灯效的机械键盘。这里将设计机械键盘的全过程开源出来,感兴趣的开发者,可以向灵动申请 MM32F0160 微控制器的样片,复刻一把自己专属的机械键盘,也可以继续进行二次开发,实现更加有趣的作品。
基于MM32F5270 MCU的Ethernet实现LwIP协议栈移植
LwIP是轻量化的TCP/IP协议,由瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。本文基于搭载了MM32F5277E9P MCU的开发板 PLUS-F5270 V2.0进行实现LwIP协议栈移植。
电子商城
现货市场
服务
提供7~27寸工控机定制,支持嵌⼊式/ 壁挂式 /桌⾯式/悬挂式等安装方式,采用纯平⾯板IP65防尘防⽔等级,莫⽒7级硬度触摸屏,兼容多种操作系统:组态软件/安卓/XP/win7/8/10/Linux等,支持主板、接⼝、外观、⽀架、刷卡器、⾝份证阅读器、LOGO、⻨克⻛、系统、电池、蓝⽛、4G/5G、摄像头、GPS系统、⼆维码扫描器、指纹等特殊应⽤场景定制
最小起订量: 1台 提交需求>
可定制风扇尺寸覆盖18x18x04mm~165x165x25mm,随散热器大小而定制;风扇转速范围:1000 RPM~16500 RPM。支持DC风扇,直流风扇轴流风机,鼓风机以及电脑笔记本风扇等产品定制。
最小起订量: 500pcs 提交需求>
登录 | 立即注册
提交评论