找回密码
 立即注册
查看: 5512|回复: 41

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2023-11-10 09:36:10 | 显示全部楼层 |阅读模式
文件系统 | znFAT | STC32位8051运行代码@STC32G12K128
移植:
1.将<znFAT.c> <deviceio.c>加入到项目.
2.修改头文件<mytype.h>数据类型,使其符合我们的编绎器
3.跟据自身需求自建三个函数,用来连接znFAT和存储介质, 将以下三个函数分别替换代原文<deviceio.c>中的 SD1_Init(),SD1_Write_Sector(),SD1_Read_Sector(). 原文别的地方不要改.
示例函数代码如下: (W25Q128)
UINT8 Disk_Init(void)        //znFAT初始化磁盘时会调用此函数
{
//    w25qxx_init();          //已在main函数初始化
    return 0;
}
UINT8 Disk_Write_Sector(UINT32 addr,UINT8 *buffer) //写扇区  addr:扇区编号 buffer: buf指针
{
    return SPI_Write_Nbytes(addr*512,buffer,512);
}
UINT8 Disk_Read_Sector(UINT32 addr,UINT8 *buffer)  //读扇区  addr:扇区编号 buffer: buf指针
{
    SPI_Read_Nbytes(addr*512,buffer,512);
    return 0;
}
4.修改znFAT配制文件<config.h>,要使用哪些功能,就打开对应的宏。 注: 因<config.h>与STC库文件同名,为了好区别, 例子中把"config.h"改名为 "znFAT_config.h".

使用:  按以下顺序启动znFAT
1. znFAT_Device_Init();            //存储设备初始化,底层驱动接口
2. znFAT_Select_Device(0,&myFAT);  //选择设备 (注: 只有一个设备,此处也不可省略)
3. znFAT_Init())                    //文件系统初始化,只有初始化时功,才有下一步,否则就是不能识别,重新格式化或许能解决
4. 文件操作

执行结果截图:

捕获.JPG


容易入坑的地方:
1.哪怕只有一个设备,也必须执行znFAT_Select_Device(). 否则,代码飞到不可以运行区域, 然后就重启了.
2.格式化时间一般都比较长, 要么在开看门狗之前格式化, 要么就是找到格式化原码的关键循环点, 在那里喂狗, 否则肯定会重启的


2023/11/11更新代码, 完善了一下 W25QXX 的驱动, 之前从别的项目复制过来, 不是很匹配
例子代码:
znFAT_STC32G12K128.rar (544.39 KB, 下载次数: 404)








回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2023-11-10 11:11:14 | 显示全部楼层
多谢!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2023-11-11 10:54:22 | 显示全部楼层
刚才又去测试了一下功能, 确实挺不错了, 800多字节内存占用, 很省, 不过发现之前的W25QXX代码好像有问题 , 重新整了一下, 现在没有问题了.  自己给自己点个高亮啊, 哈哈
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-05-01 08:38:15

12

主题

110

回帖

1072

积分

金牌会员

积分
1072
发表于 2023-11-11 20:03:38 | 显示全部楼层
先保存,需要用时慢慢体会,谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:231
  • 最近打卡:2025-04-30 08:09:31
已绑定手机

0

主题

5

回帖

986

积分

高级会员

积分
986
发表于 2023-11-17 14:27:16 来自手机 | 显示全部楼层
有空的时候运行看一下,先保存
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:403
  • 最近打卡:2025-04-29 08:28:43

12

主题

319

回帖

2017

积分

金牌会员

积分
2017
发表于 2023-11-24 11:26:10 | 显示全部楼层
多谢!已下载收藏。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-01 22:23:00

0

主题

83

回帖

1126

积分

金牌会员

积分
1126
发表于 2023-11-29 15:08:58 | 显示全部楼层
向高手学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:413
  • 最近打卡:2025-05-01 08:31:52

5

主题

296

回帖

2030

积分

金牌会员

积分
2030
发表于 2023-12-7 00:55:27 | 显示全部楼层
和FATfs相比那个好用些,占内存小?

点评

这个占内存少  发表于 2023-12-7 10:19
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-12-8 08:58:00 | 显示全部楼层
这个25Q128格式化后,把25Q128做成电脑外挂U盘后还是需要格式化后才能使用呢?意思是用电脑格式化和用这个程序格式化后,均需要重新格式化才行

点评

按道理来说, 这个格式化以后, PC是可以识别的, 不过我没有试过 你尝试过了吗? 可以这样, 1.先在MCU上弄一个MSC例程, 用PC格式化一个FLASH, 写入一个简单的文件, 看看是否可以用zn_FAT读文件内容. 2.反向操作一下,  详情 回复 发表于 2023-12-8 18:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2023-12-8 18:32:17 | 显示全部楼层
本帖最后由 tzz1983 于 2023-12-8 19:07 编辑
yan*** 发表于 2023-12-8 08:58
这个25Q128格式化后,把25Q128做成电脑外挂U盘后还是需要格式化后才能使用呢?意思是用电脑格式化和用这个 ...

按道理来说, 这个格式化以后, PC是可以识别的, 不过我没有试过
你尝试过了吗?
可以这样,
1.先在MCU上弄一个MSC例程, 用PC(FAT32)格式化一下FLASH, 写入一个简单的文件, 看看是否可以用zn_FAT读文件内容.
2.反向操作一下, 用zn_FAT格式化, 写一个文件, 然后用PC读文件内容.
你自己去尝试一下

最终应该是在MCU固件里, 同时有MSC 和 zn_FAT, 这样才能够和PC通过文件交换数据. 自己多去倒腾一下,  应该会成功的.  
如果 同时有MSC 和 zn_FAT 要注意一下MCU 和 PC 访问FLASH的权限, 不要让他们同时访问
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:04 , Processed in 0.135165 second(s), 130 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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