[STM32H7] RT-Thread ART-Pi 外部SPI Flash分区挂载为U盘

[复制链接]
2716|0
 楼主| fsmd 发表于 2022-4-4 00:13 | 显示全部楼层 |阅读模式
本帖最后由 fsmd 于 2022-4-4 00:14 编辑

验证环境
  • Win10 64位
  • Keil MDK 5.30
  • ART-Pi 开发板:STM32H750XBH6开发板
  • 工程:最小RT-Thread 系统,版本:RT-Thread v4.1.0 released
环境搭建
  • 首先需要配置好ART-Pi 外部 16MB SPI Flash 挂载为FatFS 文件系统,文件系统有个12MB的filesystem,用户可以用于存储文件
  • 这里开启USB Device功能,实现USB Mass Storage,winUSB功能
  • 开启USB框架
  • 这里同时使能:Mass Storage Device 与 winusb device
  • 开启 USB的BSP驱动

挂载U盘
  • 上面的操作只是开启了USB 设备,编译烧写后,无法挂载到电脑,枚举成U盘
  • 所以需要先取消文件系统的挂载,这样,就可以在电脑端挂载成U盘了
  • 这里增加了挂载为USB U盘的命令 mount_to_usb,开机后,输入命令,电脑过一会,就会出现U盘

  1. #include <rtthread.h>
  2. #include <rtdevice.h>
  3. #include <board.h>
  4. #include <dfs.h>
  5. #include <dfs_fs.h>

  6. /* defined the LED0 pin: PI8 */
  7. #define LED0_PIN    GET_PIN(I, 8)

  8. #ifdef RT_USING_WIFI
  9.     extern void wlan_autoconnect_init(void);
  10. #endif

  11. #define FS_PARTITION_NAME  "filesystem"

  12. extern int ulog_file_backend_init(void);

  13. void mount_to_usb(void)
  14. {
  15.     char *fullpath = NULL;

  16.     fullpath = dfs_normalize_path(NULL, "/");
  17.     if (dfs_unmount(fullpath) == 0)
  18.     {
  19.         rt_kprintf("mount_to_usb ok!\n");
  20.     }
  21.     else
  22.     {
  23.         rt_kprintf("mount_to_usb fail!\n");
  24.     }
  25. }
  26. MSH_CMD_EXPORT(mount_to_usb, mount_to_usb);

  27. void mount_to_flash(void)
  28. {
  29.     rt_device_t dev;

  30.     dev = rt_device_find(FS_PARTITION_NAME);
  31.     if (dev != RT_NULL && dev->open_flag != 0)
  32.     {
  33.         rt_device_close(dev);
  34.         rt_kprintf("close usb device ok!\n");
  35.     }

  36.     if (dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
  37.     {
  38.         rt_kprintf("mount_to_flash ok!\n");
  39.     }
  40.     else
  41.     {
  42.         rt_kprintf("mount_to_flash error!!\n");
  43.     }
  44. }
  45. MSH_CMD_EXPORT(mount_to_flash, mount_to_flash);



  • 可以把需要的文件拷贝进去,可以删除里面的文件
  • 想把分区挂载回文件系统,让开发板识别文件系统,可以使用命令:mount_to_flash,也可以直接重启,拔掉USB OTG的线即可
小结
  • 实现了电脑与开发板互传文件,如LOG文件、资源文件等
  • 使用RT-Thread USB的框架与USBD 设备驱动,让开发板模拟成U盘,操作很简单
  • 后续可继续深入研究USB的整个框架

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

本版积分规则

0

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部