tzz1983 发表于 2023-11-10 09:36:10

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

文件系统 | 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. 文件操作

执行结果截图:




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


2023/11/11更新代码, 完善了一下 W25QXX 的驱动, 之前从别的项目复制过来, 不是很匹配
例子代码:









社区闲人 发表于 2023-11-10 11:11:14

多谢!

tzz1983 发表于 2023-11-11 10:54:22

刚才又去测试了一下功能, 确实挺不错了, 800多字节内存占用, 很省, 不过发现之前的W25QXX代码好像有问题 , 重新整了一下, 现在没有问题了.自己给自己点个高亮啊, 哈哈

gzlai 发表于 2023-11-11 20:03:38

先保存,需要用时慢慢体会,谢谢

HHF 发表于 2023-11-17 14:27:16

有空的时候运行看一下,先保存

jwg 发表于 2023-11-24 11:26:10

多谢!已下载收藏。

JackLaw666 发表于 2023-11-29 15:08:58

向高手学习{:4_196:}

lzl1okOK 发表于 2023-12-7 00:55:27

和FATfs相比那个好用些,占内存小?

yanhui 发表于 2023-12-8 08:58:00

这个25Q128格式化后,把25Q128做成电脑外挂U盘后还是需要格式化后才能使用呢?意思是用电脑格式化和用这个程序格式化后,均需要重新格式化才行

tzz1983 发表于 2023-12-8 18:32:17

本帖最后由 tzz1983 于 2023-12-8 19:07 编辑

yanhui 发表于 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的权限, 不要让他们同时访问
页: [1] 2 3 4
查看完整版本: 文件系统 | znFAT | STC32位8051运行