
基于Stm32的可拖拽文件升级的三合一USB读卡器
简介
这个项目的主要功能是一个复合的USB设备,准确来说,是一个读卡器+HID音量控制设备+虚拟串口命令行交互设备。设备大小类似一个U盘,左侧有一可滑动滚轮,顶部为1.3寸OLED屏幕。
简介:这个项目的主要功能是一个复合的USB设备,准确来说,是一个读卡器+HID音量控制设备+虚拟串口命令行交互设备。设备大小类似一个U盘,左侧有一可滑动滚轮,顶部为1.3寸OLED屏幕。开源协议
:GPL 3.0
描述
视频链接:
项目简介
本项目以stm32f103RCT6为主控,实现了一个三合一的USB设备,并且实现了U盘拖拽进行APP升级,因此,也可以把他当成一块可USB拖拽编程的stm32开发板使用,此外,设备上留有ws2812的拓展接口,可以作为一个灯带控制器。
本项目同时作为WouoUIPage版2.0的硬件,因此,在之后完善APP的代码至稳定且改进WouoUIPage后会更新到WouoUIPage的github仓库https://github.com/Sheep118/WouoUI-PageVersion。
项目功能
本项目主要由stm32f103RCT6为主控,模拟一个三合一的USB设备
- MSC设备: 由插入设备的SD卡模拟生成
- HID设备: 可以通过滚轮控制电脑音量、静音、上下曲切换、暂停播放。
- CDC设备:一个虚拟串口,其中移植了开源的LetterShell(在这里感谢下开源LetterShell的大佬🙏),可以通过自己下载的APP.bin文件中导出的命令进行交互
除了上面提到的功能外,该设备还拥有以下的功能
- 一个WS2812控制器,该设备上有两个WS2812灯珠,灯珠之后的接口也预留了出来,可以接入ws2812灯带。
- 该设备支持U盘拖拽下载更新设备中程序(只要按住滚轮同时上电即可),因此,也可以把他当成一块可USB拖拽编程的stm32开发板使用。
项目参数
硬件参数
- 主控:stm32f103RCT6,其中64KB FLash空间用于U盘拖拽升级的BootLoader程序,剩余192KB可用于APP程序的开发,因此,有兴趣进行二次开发的朋友,可以用这部分Flash空间运行自己代码。
- 屏幕:1.3寸OLED屏(SSD1306/SH1106驱动芯片都可),提供的APP源码中这两种都有使用(毕竟,驱动基本一致,只有一个命令不一样)
- 灯珠:WS2812两颗,同时ws2812灯珠的接口也有预留,可以将其作为一个ws2812控制器使用
- 外部Flash:W25Q64 8MB的大小,可以存下很多APP程序了(一开始使用内部Flash作为存储的,代码已经完成了,但因为内部FLash空间本来就不是很够,分成BootLoader+U盘暂存空间+APP空间三份实在不够用😂,这样干APP空间就很有限了,所以最后还是用了外部的FLash)
功能参数
- MSC设备,由SD卡模拟的U盘,(由于SD卡读写还没有优化,目前读写文件的时间都比较长,之后会在代码中进行优化),以下是复制一个文件到SD卡测试的截图(电脑显示有这个速度,但实际读写时间却很长)
-
HID设备: (滚动滚轮)音量控制/上下曲切换十分灵敏,单击滚轮可以静音或者暂停/播放音乐,通过UI可以修改配置文件,选择滚轮控制的是音量还是上下曲切换。
-
CDC设备: 虚拟串口可以实现一些简单的交互命令(目前由于USB代码存在一定bug,这个虚拟串口会不定时重启,这对命令交互有一些困扰,之后会考虑使用其他USB库进行代码的修改和升级)。
-
外部Flash:使用8MB大小的W25Q64,拖拽升级时,需要拖拽入应用程序的.bin文件,同时这个文件需要将整个文件的CRC校验附在文件尾部,可以使用keil选项卡多加入一个命令(运行一个bat文件实现)
(具体实现方式参考安富莱电子的视频,这是对应的链接)
原理解析(硬件说明)
本项目的硬件由顶板和底板两部分组成,(工程中有些中间过程测试的PCB文件,之后会一起删掉的)
- 底板组成示意图:(工程中的Baseboard_2)
- 顶板组成示意图:(工程中的Topboard_1)
软件代码
因为代码还在完善,所以,这里将Bootloader工程的代码仓库和APP的gitee代码仓库链接附在这下面,之后这个仓库也会随自己的改动同步更新。
- Bootloadder代码仓库:https://gitee.com/silent-sheep/spark-plan_-usbboot-loader
- APP程序代码仓库: https://gitee.com/silent-sheep/spark-plan_-app
之后确定一个版本后,会将其整理打包到一个仓库中(而且会更新到WouoUIPage版的仓库中,作为2.0的硬件)
本项目中用到的一些开源代码库:
- CDC虚拟串口中的shell部分 Letter Shell
感谢大佬开源的项目 - 另一个是我自己之前开源的C语言OLEDUI框架 WouoUIPage版 这个项目也是作为WouoUIPage版的2.0的硬件,之后这个UI框架改进后也会进行更新。
外壳和面板
- 外壳打印文件会上传到附件中(壳体1.step和外壳3.step)。
- 面板在工程中就有。
注意事项
-
目前BootLoader代码十分稳定,如果出现拖拽下载后CRC校验失误只需要断电,重新进入BootLoader模式下载即可
-
APP代码部分存在以下两个问题
- MSC设备模拟的读卡器读写速度慢
- CDC设备模拟的虚拟串口会不定时重新,之后会一一改进后更新在代码仓库中的
-
焊接好的板子,首次使用需要先将Bootloader代码编译后通过SD卡槽下方的烧录接口烧录进去,烧录好后排针可以拆除,BootLoader已经烧录后接下来就可以通过U盘拖拽下载了。该排针留有SWD烧录接口和串口一也可以留着自行开发。
-
第一次将设备插入电脑会要求格式化,直接格式化即可,格式化好后需要将一个setting文件夹(存有FATFS的中文命名转换数组和配置文件的文件夹)拖拽复制到BOOT盘中。 没有这个setting文件夹也可以,只是设备的一些参数没有办法掉电保存,且APP程序操作SD卡时无法使用带中文的长文件名的FATFS。
-
二次开发需要注意APP必须是二进制文件且有全文件的CRC校验在文件尾部,具体实现方式参考安富莱的教程,也可以直接使用我的APP工程进行改动(之后我可能会出个视频说明下需要注意的地方)。
-
焊接时需要注意:顶板和底板原理图中有标注说明一些测试的电阻是不需要焊接的(如顶板的R7 R8, 底板的 BOOT0_TEST 和 R_RESERVE1 )
组装图
如上的组装图中需要注意,两个3D件(箭头所指的地方)有两块小磁铁(我使用的3 * 2 * 2mm大小的磁铁)
组装过程比较简单,只需要将PCB板按照对应的孔位拆入就可以。
面板提供了全透明和有星火计划标识两种。
实物图
实物中位于SD卡下方的排针在第一次使用下载器(ST/DAPLink)或者直接串口下载过BootLoader的代码之后就可以拆掉了,因为Bootloader程序现在经验证是十分稳定的。
设计图

BOM


评论