天涯论坛

 找回密码
 立即注册
搜索
查看: 29|回复: 4

灵动微课堂 (第274讲)|基于MM32F5333D7P的USB接口TinyUSB应用:Host设备的移植和U盘文件读写

[复制链接]

2995

主题

220

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99099158
发表于 2024-10-10 09:26:25 | 显示全部楼层 |阅读模式

点击蓝字添加“星标★” 关注咱们

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 LL2SRC, LL2PDIV, LL2MUL, LL2DIV bits */

    RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2SRC_Msk;

RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2PDIV_Msk;

    RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2MUL_Msk;

    RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2DIV_Msk;

    /* Config pll clock source*/RCC->LL2CFGR |= (0x01

U << RCC_PLL2CFGR_PLL2SRC_Pos);

    /* set LL2 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 |= (0x01

U << 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 PLL2RCC->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 -------------//#elifTU_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)  #defineTUP_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盘里面的文件进行读写操作,创建删除文件/文件夹等操作。

往期精彩

第273讲|运用MM32-Link MINI对MM32G0001恢复出厂设置

第272讲|基于MM32F0140的I2C与24C02通信

第271讲|基于MM32F0140的SPI与W25Q80通信

第270讲|CLASS B内部时钟检测在MM32SPIN0280上的实现

第269讲|MM32F5330内存守护单元(MPU)

第268讲|MindSDK应用基本——ADC模块样例

第267讲|MindSDK应用基本——SPI模块样例

第266讲|MM32F0163D7P的ADC内部1.2V参考电压的运用

第265讲|基于MM32F0163D7P的USB Audio Class(UAC)音频设备

第264讲|基于MM32F0163D7P的USB接口TinyUSB应用:移植和新增设备(二)

第263讲|基于MM32F0163D7P的USB接口TinyUSB应用:移植和新增设备(一)

第262讲|基于MM32F0163D7P的I2S接口的音乐播放器实验

第261讲|MindSDK应用基本——TIM模块样例

第260讲|mm32-2nd-bootloader技术白皮书(9)——OTA升级

第259讲|mm32-2nd-bootloader技术白皮书(8)——进阶:实现 Ymodem 更新代码

第258讲|mm32-2nd-bootloader技术白皮书(7)——性能评定

第257讲|MM32F5270平台ADC注入通道的单周期采样的实现

第256讲|MM32G0140 I2C驱动EEPROM

第255讲|MM32SPIN0280内部时钟捕捉外边HSE时

第254讲|Mini-F0160实现USB转3路虚拟串口

第253讲|为MindSDK搭建Keil MDK研发环境

第252讲|开源项目:基于MM32F0160微掌控器的机械键盘

第251讲|为MindSDK搭建armgcc编译环境(Windows版)

第250讲|mm32-2nd-bootloader技术白皮书(6)——总结及注意事项

第249讲|mm32-2nd-bootloader技术白皮书(5)——编译可在QSPI Flash上运行的程序

第248讲|mm32-2nd-bootloader技术白皮书(4)——设计实现简单的2nd bootloader

第247讲|mm32-2nd-bootloader技术白皮书(3)——设计实现QSPI Flash的下载算法

第246讲|mm32-2nd-bootloader技术白皮书(2)——QSPI外设简介

第245讲|mm32-2nd-bootloader技术白皮书(1)——配置软硬件环境

第244讲|FlexCAN OTA

第243讲|单独下载可执行文件到MM32F5微掌控

灵动微课堂大合辑

公众号推送机制改版

感兴趣的动态频频“失联”?

简单两步点亮“星标★”

再也不错失每一篇灵动动态!

关于灵动

上海灵动微电子股份有限机构成立于 2011 年,是中国本土领先的通用 32 位 MCU 制品处理方法供应商。机构基于 Arm Cortex-M 系列内核研发的 MM32 MCU 制品持有 F/G/L/A/SPIN/W 六大系列,日前已量产近 300 款型号,累计交付超 4 亿颗,每年都有近亿台配备了灵动 MM32MCU 的优秀制品交付到客户手中,在本土通用 32 位 MCU 机构中位居前列。

灵动客户涵盖智能工业、汽车电子、通信基建、医疗健康、智慧家电、物联网、个人设备、手机和电脑等应用行业。灵动是中国为数不多的同期得到了 Arm-KEIL、IAR、SEGGER 官方支持的本土 MCU 机构,并创立了独立、完整的通用 MCU 生态体系。灵动始终秉承着“诚信、承诺、创新、合作”的精神,为客户供给从硬件芯片到软件算法、从参考方法到系统设计的全方位支持。

灵动股份

微X号:MindMotion-MMCU

长按识别二维码关注咱们

MORE

官网:www.mm32mcu.com

微X公众号:灵动MM32MCU

灵动MM32MCU技术论坛:

bbs.21ic.com/iclist-696-1.html





上一篇:2023-2029全世界超声波测距仪市场状况及将来发展趋势
下一篇:微技术Microtech各时期的刀具作品8(SOCOM)
回复

使用道具 举报

3061

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139051
发表于 2024-10-11 07:43:53 | 显示全部楼层
请问、你好、求解、谁知道等。
回复

使用道具 举报

2946

主题

3万

回帖

9997万

积分

论坛元老

Rank: 8Rank: 8

积分
99979427
发表于 2024-10-31 18:30:01 | 显示全部楼层
“板凳”(第三个回帖的人)‌
回复

使用道具 举报

2986

主题

3万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569168
发表于 2024-11-5 16:52:46 | 显示全部楼层
对于这个问题,我有不同的看法...
回复

使用道具 举报

2986

主题

3万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569168
发表于 2024-11-11 11:39:08 | 显示全部楼层
软文发布平台 http://www.fok120.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 05:51 , Processed in 0.124847 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.