yanhui
发表于 2023-12-9 08:42:29
tzz1983 发表于 2023-12-8 18:32
按道理来说, 这个格式化以后, PC是可以识别的, 不过我没有试过
你尝试过了吗?
可以这样,
我昨天这样操作过了,用MSC例程,实现了把25Q64模拟成8M的U盘,然后在电脑上格式化成FAT格式的文件系统,不过我没有写文件进去,格式化后是可以进去U盘进行正常操作的。随后我烧录这个文件系统程序,用串口检测信息,还是需要重新格式化,因为我这个25Q64已经在电脑上格式化过了,按照这个程序来说,检测到了有文件系统就会跳过格式化,但是还是需要重新格式化。随后反向操作,格式化后写入一个文件,我重新烧写MSC例程,同样在电脑端需要重新格式化才能操作U盘,当然更不可能读取刚才建立的文件了。
yanhui
发表于 2023-12-9 09:09:04
还有个问题没有解决:破坏掉文件系统后,用我这个程序,一直在不停的显示“格式化。。。”需要用你的程序进行格式化后,我这个程序才能正常的建立文件和读文件。我这个程序就是说格式化文件系统这个代码部分有问题,后面的操作都是正常的,开始是怀疑25Q64的读写代码不匹配,后面改成和例程一样的,问题依旧,目前还没有找出原因,有空的话帮我看看哈,文件系统这块不熟,先消化有个思路才好研究,谢谢哈{:smile:}
tzz1983
发表于 2023-12-9 10:39:59
yanhui 发表于 2023-12-9 09:09
还有个问题没有解决:破坏掉文件系统后,用我这个程序,一直在不停的显示“格式化。。。”需要用你的程序进 ...
再仔细检查一下FLASH的驱动代码, 如果驱动有问题,zn_FAT就会出各种问题 ,比如写文件时会陷入死循环, 一直出不来, 因为zn_FAT写文件后可能有验证, 不成功就重复写, 所以就一直出不来了. 格式化也是写操作, 所以要先保证底层驱动正确, 然后才能有下一步的测试.
yanhui
发表于 2023-12-9 11:24:23
yanhui 发表于 2023-12-9 08:42
我昨天这样操作过了,用MSC例程,实现了把25Q64模拟成8M的U盘,然后在电脑上格式化成FAT格式的文件系统, ...
我这里电脑格式化只能选择FAT模式,没有其他的模式可以选,所有不清楚是不是这里引起的,如果电脑是格式全支持的话,那我反向操作,用ZN格式化后电脑为什么也不能识别呢,所有这个问题还有待研究。
yanhui
发表于 2023-12-9 11:26:46
tzz1983 发表于 2023-12-9 10:39
再仔细检查一下FLASH的驱动代码, 如果驱动有问题,zn_FAT就会出各种问题 ,比如写文件时会陷入死循环, 一直 ...
这个底层驱动,我原来是用我自己写的函数,后面考虑到可能是驱动不匹配,就直接用你的驱动了问题还是没有解决
tzz1983
发表于 2023-12-9 13:58:49
本帖最后由 tzz1983 于 2023-12-9 14:01 编辑
yanhui 发表于 2023-12-9 11:26
这个底层驱动,我原来是用我自己写的函数,后面考虑到可能是驱动不匹配,就直接用你的驱动了问题还是没有 ...
我刚才测试了, 改成8M也能正常格式化, 之前我设置的是16M
本来想给你实测一下看看zn_FAT和MSC之间是否能相互识别, 结果发现, 我手上那个项目板是3.3直接进电的, 5V USB不能直接插电, 嘿嘿, 还是下次有机会再尝试吧.
不过你自己可以再稍为努力一点的, 应该就可以搞定了.
像这种问题不知道出到哪的代吗, 用一个笨方法来检测, 虽然笨, 但非常有效.你先用可行的代码下载进去, 然后, 逐步的替换至新代码, 替到哪不行了, 问题大至就出在那. 多花点时间而已.
还有, 你说MSC和zn_FAT不互通, 问题应该出在设置上面, 本来想法实测一下, 奈何硬件...
不管是MSC还是zn_FAT, 它们都是由底层直接给出存储器大小, 扇区大小, 多少扇区,这些参数的.两个例程的底层参数要设置要一至.
zn_FAT 的扇区大小默认是512, 照顾一下它, 把MCS的扇区也设置成512
我刚才看到STC官方屠龙刀版本MSC例程扇区设置是4K, 自己改一下, 8M的FLASH像下面这样设置:
dwMemorySize = 1024ul*1024ul*8ul;
wSectorSize = 512u;
dwSectorNumber = 1024ul*1024ul*8ul/512ul;
改过以后底层读写函数也要适应一下.
yanhui
发表于 2023-12-9 15:45:28
我做了个试验,修改MSC配置,电脑能识别U盘,但是不能格式化为512扇区,所有无论哪个配置在电脑上都不能格式化,暂且认为是电脑配置不支持。
反向 操作,用文件系统格式化后,电脑端能识别,也能看到建立的文件,但是文件里面是空的,这个不清楚是什么原因。
上面的测试文件系统程序用你提供的,做了端口修改,用我自己的代码还是不能格式化,我的25Q64驱动完全复制你的,还要继续查找原因
tzz1983
发表于 2023-12-9 16:01:27
本帖最后由 tzz1983 于 2023-12-9 16:03 编辑
yanhui 发表于 2023-12-9 15:45
我做了个试验,修改MSC配置,电脑能识别U盘,但是不能格式化为512扇区,所有无论哪个配置在电脑上都不能格 ...
你应该成功了, 文件内没有内容可能是最后的操作缓存没有写入FLASH, 我当时做程序时为了写入时不重复擦除扇区, 做了个缓存区, 所有的FLASH操作完以后, 要调用一个函数才会最终写入FLASH, 虽然速度稍快了一些, 但也是很容易忘记这一步的.
至于电脑上不能格式化, 可能是电脑操作页面上没有支持的太全面, 毕竞这种小盘对电脑来说太少了. 但是电脑能识别zn_FAT的格式化, 实际上就是证明他是支持的
yanhui
发表于 2023-12-9 16:05:32
有点眉目了,现在识别出来的U盘盘符也是对的,zn_FAT 的扇区大小默认是512,这个能修改吗?
yanhui
发表于 2023-12-9 16:31:37
yanhui 发表于 2023-12-9 16:05
有点眉目了,现在识别出来的U盘盘符也是对的,zn_FAT 的扇区大小默认是512,这个能修改吗? ...
pdbr->BPB_SecPerClus=(UINT8)(clu_sz/512); //每簇扇区数
这个扇区数是不能更改的吧
#define RT_UPDATE_FSINFO//实时更新FSINFO扇区,主要是更新剩余簇数,下一空簇参考值更新没有意义,因为它本身就不保证一定正确
//很多操作系统中获取可用的空簇,并不以它作为依据,而是直接扫描整个FAT表。剩余簇数是可以使用的,
//用于计算磁盘剩余容量,如果它的值为0,则说明磁盘已满,在znFAT中对其进行了维护
#define RT_UPDATE_FILESIZE//实时更新文件信息
//以下两个用于“实用更新”的宏如果被注释掉,则在文件操作结束后,一定要调用znFAT_Close_File,否则
//磁盘相关信息将不会被更新,导致虽然向文件写入了数据,但我们仍然看不到等问题。
这两个宏也是打开了的,有空我再试试,谢谢您的回复{:smile:}