采用两种方案实现了串口读写U盘的模块。
方案一:CH376+STM32G030
方案二:直接用STM32F401RCT6
CH376不是很好用,不支持长文件名,文件名格式也有要求,还必须全大写,操作也比较繁琐,价格也不便宜,不推荐使用。
STM32F401RCT6直接移植FATFS和USB库,没有什么限制,操作起来非常灵活好用。
串口U盘TF卡模块通信协议
数据包的结构包含:帧头2字节(0x55 0xAA)、指令(1字节)、数据长度(2字节)、数据(N字节)、CRC校验(2字节,前面所有字节的CRC校验)。
支持同时使用U盘和SD卡(FAT格式)
支持长文件名(255字节)
支持中文路径名
支持定制协议。
上位机->U盘TF卡模块,发送数据包指令数据说明:
指令 | 功能 | 数据内容 | 返回数据包指令 |
‘W’ (0x57) | Write 写文件 |
| ‘S’ |
‘R’ (0x52) | Read 读文件 | 1. 文件名,若干字节,以‘\0’结尾; 2. 读取位置(文件指针偏移),4字节,高位在前; 3. 要读取的字节数,2字节,高位在前,最多一次读取50k字节。 | ‘R’ |
‘D’(0x44) | Delete 删文件或目录 | 文件或目录名,若干字节,以‘\0’结尾; | ‘S’ |
‘M’ (0x4D) | Mkdir 创建目录 | 目录名,若干字节,以‘\0’结尾; | ‘S’ |
‘N’ (0x4E) | reName 重命名文件或目录 |
| ‘S’ |
‘L’ (0x4C) | List 读取目录下的文件和目录列表 | 1.目录名,若干字节,以‘\0’结尾; 最多返回255个文件名(当目录下文件数量超过255时,暂时只返回前255个,如不满足需求,可联系本人定制升级) | ‘L’ |
‘B’ (0x42) | Baud rate 修改波特率,掉电后恢复默认115200 | 新的波特率值,4字节,高位在前,最高为5250000。 | 无返回 |
‘E’ (0x45) | Echo 回显,即给模块发什么,模块就返回什么。用于测试通信是否正常。 | 若干数据(可为空)。 | ‘E’ |
‘Q’(0x51) | Query 查询U盘/TF卡是否插入且挂载成功 | 无。 | ‘Q’ |
注:文件名应为全路径文件名,文件名最长不超过255字节,支持中文名,支持U盘和TF卡同时使用,TF卡盘符为“0:/”,U盘盘符为“1:/”,例如在U盘根目录下的“123.txt”文件,其全路径文件名为:“1:/123.txt”。
测试软件及使用说明文档下载链接:
链接:https://pan.baidu.com/s/1ph-zwt2cSQF4gIKo-GhvtA?pwd=3rhq