文件系统 | 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 的驱动, 之前从别的项目复制过来, 不是很匹配
例子代码:
多谢! 刚才又去测试了一下功能, 确实挺不错了, 800多字节内存占用, 很省, 不过发现之前的W25QXX代码好像有问题 , 重新整了一下, 现在没有问题了.自己给自己点个高亮啊, 哈哈
先保存,需要用时慢慢体会,谢谢 有空的时候运行看一下,先保存 多谢!已下载收藏。 向高手学习{:4_196:} 和FATfs相比那个好用些,占内存小? 这个25Q128格式化后,把25Q128做成电脑外挂U盘后还是需要格式化后才能使用呢?意思是用电脑格式化和用这个程序格式化后,均需要重新格式化才行 本帖最后由 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的权限, 不要让他们同时访问