找回密码
 立即注册
楼主: tzz***

文件系统 | znFAT | STC32位8051运行

[复制链接]
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 2023-12-9 08:42:29 | 显示全部楼层
    tzz1983 发表于 2023-12-8 18:32
    按道理来说, 这个格式化以后, PC是可以识别的, 不过我没有试过
    你尝试过了吗?
    可以这样,

    我昨天这样操作过了,用MSC例程,实现了把25Q64模拟成8M的U盘,然后在电脑上格式化成FAT格式的文件系统,不过我没有写文件进去,格式化后是可以进去U盘进行正常操作的。随后我烧录这个文件系统程序,用串口检测信息,还是需要重新格式化,因为我这个25Q64已经在电脑上格式化过了,按照这个程序来说,检测到了有文件系统就会跳过格式化,但是还是需要重新格式化。随后反向操作,格式化后写入一个文件,我重新烧写MSC例程,同样在电脑端需要重新格式化才能操作U盘,当然更不可能读取刚才建立的文件了。

    点评

    PC上多换几次格式试试吧, 其实我也没有过多测试. 当时论坛里有人问, 然后我就做了一个例程, 主要是起到引入门的作用  发表于 2023-12-9 10:30
    注意选格式, 指定FAT32, 而不是FAT, zn_FAT应该没有支持那么多格式, 而PC是全支持的  发表于 2023-12-9 10:25
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 2023-12-9 09:09:04 | 显示全部楼层
    还有个问题没有解决:破坏掉文件系统后,用我这个程序,一直在不停的显示“格式化。。。”需要用你的程序进行格式化后,我这个程序才能正常的建立文件和读文件。我这个程序就是说格式化文件系统这个代码部分有问题,后面的操作都是正常的,开始是怀疑25Q64的读写代码不匹配,后面改成和例程一样的,问题依旧,目前还没有找出原因,有空的话帮我看看哈,文件系统这块不熟,先消化有个思路才好研究,谢谢哈

    点评

    再仔细检查一下FLASH的驱动代码, 如果驱动有问题,zn_FAT就会出各种问题 ,比如写文件时会陷入死循环, 一直出不来, 因为zn_FAT写文件后可能有验证, 不成功就重复写, 所以就一直出不来了. 格式化也是写操作, 所以要先保  详情 回复 发表于 2023-12-9 10:39
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1640

    积分

    荣誉版主

    积分
    1640
     楼主| 发表于 2023-12-9 10:39:59 | 显示全部楼层
    yanhui 发表于 2023-12-9 09:09
    还有个问题没有解决:破坏掉文件系统后,用我这个程序,一直在不停的显示“格式化。。。”需要用你的程序进 ...

    再仔细检查一下FLASH的驱动代码, 如果驱动有问题,zn_FAT就会出各种问题 ,比如写文件时会陷入死循环, 一直出不来, 因为zn_FAT写文件后可能有验证, 不成功就重复写, 所以就一直出不来了. 格式化也是写操作, 所以要先保证底层驱动正确, 然后才能有下一步的测试.
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 2023-12-9 11:24:23 | 显示全部楼层
    yanhui 发表于 2023-12-9 08:42
    我昨天这样操作过了,用MSC例程,实现了把25Q64模拟成8M的U盘,然后在电脑上格式化成FAT格式的文件系统, ...

    我这里电脑格式化只能选择FAT模式,没有其他的模式可以选,所有不清楚是不是这里引起的,如果电脑是格式全支持的话,那我反向操作,用ZN格式化后电脑为什么也不能识别呢,所有这个问题还有待研究。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 2023-12-9 11:26:46 | 显示全部楼层
    tzz1983 发表于 2023-12-9 10:39
    再仔细检查一下FLASH的驱动代码, 如果驱动有问题,zn_FAT就会出各种问题 ,比如写文件时会陷入死循环, 一直 ...

    这个底层驱动,我原来是用我自己写的函数,后面考虑到可能是驱动不匹配,就直接用你的驱动了问题还是没有解决

    点评

    我刚才测试了, 改成8M也能正常格式化, 之前我设置的是16M 本来想给你实测一下看看zn_FAT和MSC之间是否能相互识别, 结果发现, 我手上那个项目板是3.3直接进电的, 5V USB不能直接插电, 嘿嘿, 还是下次有机会再尝试吧.  详情 回复 发表于 2023-12-9 13:58
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1640

    积分

    荣誉版主

    积分
    1640
     楼主| 发表于 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;

    改过以后底层读写函数也要适应一下.

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 2023-12-9 15:45:28 | 显示全部楼层
    我做了个试验,修改MSC配置,电脑能识别U盘,但是不能格式化为512扇区,所有无论哪个配置在电脑上都不能格式化,暂且认为是电脑配置不支持。
    反向 操作,用文件系统格式化后,电脑端能识别,也能看到建立的文件,但是文件里面是空的,这个不清楚是什么原因。

    上面的测试文件系统程序用你提供的,做了端口修改,用我自己的代码还是不能格式化,我的25Q64驱动完全复制你的,还要继续查找原因
    msc配置.png
    电脑配置.png
    任何配置都不能格式化.png
    文件夹建立.png
    文件无内容.png
    文件系统格式化后.png

    点评

    [attachimg]29282[/attachimg] 我电脑上有512的选项 不过PC上的格式化zn_FAT确实不能识别, 可能和这个原因有关: [attachimg]29286[/attachimg] 不过没有关系, zn_FAT的格式化, PC是可以识别的, 所以只要用zn_FAT  详情 回复 发表于 2023-12-11 11:26
    你应该成功了, 文件内没有内容可能是最后的操作缓存没有写入FLASH, 我当时做程序时为了写入时不重复擦除扇区, 做了个缓存区, 虽然速度稍快了一些, 但也是很容易忘记这一步的. 至于电脑上不能格式化, 可能是电脑操作  详情 回复 发表于 2023-12-9 16:01
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1640

    积分

    荣誉版主

    积分
    1640
     楼主| 发表于 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的格式化, 实际上就是证明他是支持的
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 2023-12-9 16:05:32 | 显示全部楼层
    有点眉目了,现在识别出来的U盘盘符也是对的,zn_FAT 的扇区大小默认是512,这个能修改吗?

    点评

    还有, zn_fat里有个更新设置, 这个设置如果没有打开立即更新, 写文件以后, 要关闭文件时, 才会最终写入数据的, 不关闭文件就掉电是会丢数据的  发表于 2023-12-9 16:21
    我现在没有时间去弄, 应该可以的, 你自己试一下, 指定别的试试(1024 2048 4096), 但是不要指定0, 0是自动算, 这么小zn_fat直接返回, 不跟你玩  发表于 2023-12-9 16:18
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    13

    主题

    103

    回帖

    859

    积分

    高级会员

    积分
    859
    发表于 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,否则
                                                              //磁盘相关信息将不会被更新,导致虽然向文件写入了数据,但我们仍然看不到等问题。



    这两个宏也是打开了的,有空我再试试,谢谢您的回复
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 17:22 , Processed in 0.070427 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表