嵌入式ZNFAT文件系统的使用

2022/11/14

文件系统及SD卡驱动总流程:

  1. 模拟SPI协议读写SD卡一个扇区
  2. 移植FAT32文件系统,其他文件系统也可以
  3. 文件系统提供的函数对txt文件进行基本的输入输出操作,系统文件有说明
  4. 如要在屏幕上显示,则还需要加上字库。不显示则通过串口发送给PC

背景:满足大容量的存储器访问(具有断电记忆,即断电后保存功能)

1实现底层SPI对SD卡的驱动

一:EEPROM与FLASH
1EEPROM型 IIC通信 经典类型:24c02
特征:1存储单元数少
2每个单元可以独立访问(读/写)
3写入前不需要独立的擦除环节(大约10ms一个地址)

地址 0 1 2 …
数据 … … … …



2FLASH存储器 SPI通信 U盘、SD卡、硬盘 经典类型:W25X16
特征:1容量大(1个扇区512个单元或1024/4096个单元等)
2引入扇区地址和字节地址
3写入之前必须擦除(擦除结果为该地址变为1)
4擦除以扇区为单位
FLASH读不需要以扇区为单位,但是写入和擦除要以扇区为单位
例如:0-511号地址为0扇区、512-1023号地址为1扇区

不同Falsh芯片,扇区所占字节数不一样
要求:MCU里的RAM区容量要能够容纳下拷贝回来的一个扇区大小
SD卡1个扇区512Bytes,T5L的RAM区32KBytes(够用)
MCU对某个地址进行修改:先把扇区内容全先拷回来,然后在RAM里面修改,再擦除,再将RAM写进去

3SD卡的操作
MCU与SD卡之间按照SD卡通信规则进行通信
SD卡驱动程序实现功能(基本功能):
1读SD卡一个扇区(指定扇区)
2写SD卡一个扇区(指定扇区)
3获取SD卡状态(空闲,忙?)
4SD卡初始化

二:SD卡驱动

  1. 磁盘概念的推广(能存数据的就叫磁盘,不管断电后保不保存)
  2. SD卡驱动的实现:
    SD卡硬件接口:SPI和SDIO
    1SPI:CS,SCLK,MOSI,MISO (CS片选脚,推挽输出,增强输出能力)

2SDIO:1线SD,4线SD(有些MCU没有支持DMA数据传输的功能)

2.1初始化SPI接口
2.2调整SPI的速度(先放慢,初始化后再提高速度)
2.3SD卡初始化(对用相应SD卡接口的操作步骤)

3参考文档:《SD卡读写规范》、《SD卡接口规范》
SD卡操作有不同的命令
向SD卡发送一条命令:1命令编号 2命令参数 3校验码 (6个字节)
MSB 6字节 LSB
SD卡回应数据:发命令->等待回应(不停地读取SD卡返回的数据)->读到的结果返回给上层
MSB与LSB(最高有效位 与 最低有效位)
Most Significant Bit, Last(Least) Significant Bit
Big Endian(大端方式存储)
低地址 高地址
----------------------------------------->
±±±±±±±±±±±±±±±±±±+
| 12 | 34 | 56 | 78 |
±±±±±±±±±±±±±±±±±±+

Little Endian(小端方式存储)
低地址 高地址
----------------------------------------->
±±±±±±±±±±±±±±±±±±+
| 78 | 56 | 34 | 12 |
±±±±±±±±±±±±±±±±±±+

4驱动程序是否顺手,可进行此操作(先初始化SD卡,在进行读扇区这个操作)
keil默认识别到工程的第一级目录找头文件

SD卡在商家中植入过系统的,且商家1G=1000MB,1MB=1000KB
故实际内存比介绍的要少
打印机znFAT部分一样,裁剪的功能不一样而已

T5L的IO口要配置输入输出,SPI时序图用逻辑分析仪测试分析
keil编译时code代码区爆掉了,可提高编译等级

(T5L中无文件系统)移植znFAT系统时
1改成自己使用的单片机型号
2SD卡对应的IO引脚要修改,引脚端口模式进行配置(T5L一定要进行输入输出配置)
3修改头文件的包含关系
4串口初始化,修改波特率(对用自己的时钟频率)

文件系统操作:格式化、刷新、打开关闭、数据读取,数据读取+重定向、创建/删除目录
创建/删除目录、写入数据、文件数据截断、开启znFAT大端模式工作方式

SD卡的SPI工作模式(需看文档后再确认一遍)
时钟上升沿读数据、下降沿发数据(存数据、跳沿发数据)
CPHA时钟相位 CPHA=0第一个跳沿采样(??上升沿??) CPHA=1第二个跳沿采样(??下降沿??)
CPOL/SPOL 时钟极性 CPOL=0总线空闲时,时钟为低电平

遇到的问题
SD卡一个扇区都是512字节
DGUSVP地址在内存分配时,可能是就近分配的,会出现越界情况

文件系统相关概念
文件系统类型:FAT16(2^16个簇)、FAT32、NTFS、exFAT
不同的存储器默认的分配单元大小不一样

簇(块) 分区最小存储系统 1个分配单元即1个簇
扇区 硬盘最小存储系统
相邻的扇区一起组成簇。1个簇,可包括2,4,8,16,32,64(2^n个扇区)等个扇区(根据分配单元大小来计算1个簇包括多少个扇区)
传统硬盘,一个扇区是512字节。高级硬盘一个扇区4096字节,保持4K对齐,若不对齐,则影响性能。

znFAT将需要的功能都做好,不需要的功能进行宏裁剪减掉
SVN中存放 文档资料、工具软件、评估中的项目

2022/11/15

znFAT文件系统移植成功,实现创建文件、打开文件、删除文件、写入数据、增加数据、读取数据。

‘’’
//以下是对用户可用的函数的声明

UINT8 znFAT_Device_Init(void); //存储设备初始化,底层驱动接口
UINT8 znFAT_Init(void); //文件系统初始化
UINT8 znFAT_Select_Device(UINT8 devno,struct znFAT_Init_Args *pinitargs); //在多设备情况下,用于选择某一个设备

UINT32 znFAT_ReadData(struct FileInfo *pFI,UINT32 offset,UINT32 len,UINT8 *app_Buffer); //数据读取
UINT32 znFAT_ReadDataX(struct FileInfo *pfi,UINT32 offset,UINT32 len);
UINT8 znFAT_Seek(struct FileInfo *pFI,UINT32 offset); //文件定位
UINT8 znFAT_Open_File(struct FileInfo *pFI,INT8 *filepath,UINT32 n,UINT8 is_file); //文件打开
UINT8 znFAT_Enter_Dir(INT8 *dirpath,UINT32 *pCluster,UINT32 *pos); //进入目录
UINT8 znFAT_Create_File(struct FileInfo *pfi,INT8 *pfn,struct DateTime *pdt); //创建文件
UINT8 znFAT_Create_Dir(INT8 *pdp,struct DateTime *pdt); //创建目录
UINT8 znFAT_Delete_File(INT8 *filepath); //删除文件
UINT8 znFAT_Make_FS(UINT32 tt_sec,UINT16 clu_sz); //格式化

UINT32 znFAT_WriteData(struct FileInfo *pfi,UINT32 len,UINT8 *pbuf); //写入数据
UINT32 znFAT_Modify_Data(struct FileInfo *pfi,UINT32 offset,UINT32 len,UINT8 *app_Buffer); //对文件数据进行修改
UINT8 znFAT_Dump_Data(struct FileInfo *pfi,UINT32 offset); //截断文件数据

UINT8 znFAT_Close_File(struct FileInfo *pfi); //关闭文件,如果程序中没有打开实时文件大小更新,则文件操作完后,尤其是写入和更改操作,必须调用此函数
UINT8 znFAT_Flush_FS(void); //刷新文件系统相关信息,如果程序中没有打开实时文件系统信息更新,则在程序中一定要调用此函数,否则将导致文件系统相关参数错误
‘’’

这三个函数必须使用:
znFAT_Device_Init(void);
UINT8 znFAT_Init(void);
UINT8 znFAT_Select_Device(UINT8 devno,struct znFAT_Init_Args *pinitargs);

文件在实际操作中基本已经创建好,需要实现写入数据和读取数据

znFAT_WriteData(文件名,写入长度,写入的数据)以追加方式写入
znFAT_ReadData(文件名,偏移量(从哪里开始),读多长,读到buf里去)

0xfd 补中文乱码

2022/11/16

B站文件系统与SD卡

待定待处理

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
znfat(振南文件系统)是一个开源的文件系统,用于在嵌入式系统和多用户环境下处理文件和存储数据。 振南文件系统的下载可以通过以下几个步骤进行: 1. 首先,打开您的网络浏览器,然后在搜索框中输入“znfat下载”。按下回车键,您会看到一系列与znfat相关的搜索结果。 2. 浏览搜索结果页面,并找到官方网站或源代码存储库。点击链接进入相应的网站。 3. 在网站页面中,您可以找到有关znfat文件系统的详细信息。这包括系统的特点、应用场景和最新的版本发布信息。请务必阅读这些信息,以确保选择适合您需要的版本。 4. 在网站页面的下载部分,您可以找到不同版本的znfat文件系统的下载链接。根据您的嵌入式系统或多用户环境的要求,选择适当的版本。 5. 点击下载链接,下载znfat文件系统的压缩包。请确保选择正确的操作系统和体系结构版本,以确保与您的计算机或嵌入式系统的兼容性。 6. 下载完成后,您可以解压缩文件并将其保存到您的计算机或嵌入式系统的指定目录中。 7. 验证文件系统是否正确下载并安装。您可以参考下载页面上的安装指南或文档来执行此操作。 需要注意的是,在下载和使用znfat文件系统时,请确保遵守相关的开源许可和使用条款。 以上是关于znfat(振南文件系统)下载的简要指南。请根据您的需要选择和下载适合的版本,并按照安装指南进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值