社区闲人
发表于 2023-12-10 09:11:52
看来能用上zn_FAT 文件系统了。
STC32
发表于 2023-12-10 15:13:27
太厉害了
tzz1983
发表于 2023-12-11 11:26:31
yanhui 发表于 2023-12-9 15:45
我做了个试验,修改MSC配置,电脑能识别U盘,但是不能格式化为512扇区,所有无论哪个配置在电脑上都不能格 ...
我电脑上有512的选项{:lol:}
不过PC上的格式化zn_FAT确实不能识别, 可能和这个原因有关:
不过没有关系, zn_FAT的格式化, PC是可以识别的, 所以只要用zn_FAT格式化, 就所有问题都解决了.
你那边还有一些其它的问题 , 应该都是你自己的问题, 我刚才在测试, zn_FAT 和 PC 互通没有问题的
tzz1983
发表于 2023-12-11 12:57:15
zn_FAT 与 电脑 交换文件演示
本文采用STC32G实验箱测试, 将实验箱上的W25X40 替换为 W25Q128
1.把用zn_FAT固件烧入MCU, 用zn_FAT格式化FLASH,运行结果如下:
2.把MSC固件烧入MUC, 此时可以看到一个16M的U盘, 在U盘内创建一个文件名为"abc.txt"的文件, 输入内容为:"PC端输入文件内容"
3.再次把用zn_FAT固件烧入MCU, 运行结果如下:
注意事项, zn_FAT为了节省RAM使用, 扇区固定为512, 影响到以下几个方面:
1. W25QXX的扇区是4096, 所以, 如果你的W25QXX驱动代码是不支持512访问的, 得调整底层驱动代码
2.因为W25QXX的扇区是4096, 有时候为了节省RAM,不会全部使用完4096个字节, 而是只使用一部分, 比如只使用前256字节, 这种代码用于文件系统是不行的.
3.MCS和zn_FAT都是由底层代码直接给出扇区大小, 盘总大小, 这些参数.两个例程参数设置要一至. 即扇区大小都设置为512.16M的FLASH, MSC做如下设置:
dwMemorySize = 1024ul*1024ul*16;
wSectorSize = 512u;
dwSectorNumber = dwMemorySize / wSectorSize;
扇区调整过以后, 底层读写也需要做相应的调整
4. zn_FAT最小支持的盘SIZE为8M, 也就是说, 小于8M的FLASH格式化不会成功.
5. 用PC格式化的盘,zn_FAT不一定能识别, 原因是 zn_FAT 支持有限的格式, 所以在使用时, 得用 zn_FAT格式化,zn_FAT格式化的盘, PC能够识别
以下是两个例程代码:
其它杂谈: 如果把 MSC 和 zn_FAT 做到一个固件上, 就可以实现 MUC和PC无驱动通信,在电脑上改变文件的内容, MCU读到到文件内容变化, 做相应的处理, 实际上就是通过文件来传递数据.
举两个简单的应用:
1.温度传感器每小时把采样到的温度值写入文件, PC端直接就可以看到, 因为此时MCU固件内同时有MSC和zn_FAT,电脑省去做桌面驱动.
2.另一个简单的应用是, 我们在电脑端往U盘内写入一个BIN文件, MUC就可以跟据这个文件更新自己的固件或EEPROM.
实现电脑和MCU之间共享数据, PC端不需要做桌面驱动, 有无限可能
yanhui
发表于 2023-12-11 15:52:10
tzz1983 发表于 2023-12-11 12:57
zn_FAT 与 电脑 交换文件演示
其它的疑问已调试通过,25Q64的驱动还有点问题,我这里用znfat格式化后,电脑显示的盘符不对,同时文件也没有写进去,我再检查下25Q64的驱动,谢谢老师{:handshake:}
wpppmlah
发表于 2023-12-26 14:26:53
这个不错,感谢楼主的分享,这个用来做文件读写很有用。以前用STC12C5A60S2读写过TF卡。再来试试这个。
Snapdragon
发表于 2024-1-3 10:13:33
这个和FatFs有啥区别。
神农鼎
发表于 2024-2-9 10:13:39
_NCY_
发表于 2024-3-1 18:21:33
对对,我也发现了就是电脑格式化完znfat不能识别
就先说flash吧,我的是8M跑MSC,用电脑格式化完拿十六进制查看器打开,对照znfat书里的方法找到MBR区的64字节分区表发现确实存在问题。就是本来应该是znfat ok的地方电脑给弄了个error,,,
这个确实不影响MSC优盘的使用,但是对于读取了话确实是一个问题,znfat的MBR解析应该就寄了
咫尺天涯
发表于 2024-3-27 15:12:29
留着后面用