📄 fat.h
字号:
/*#######################################################################################
Connect ARM to MMC/SD
#######################################################################################*/
#ifndef _FAT_H_
#define _FAT_H_
#include <string.h>
#include "mmc.h"
#include "typedefs.h"
//Prototypes
extern U16 fat_root_dir_addr (U08 *);
extern U16 fat_read_dir_ent (U16,U08,U32*,U08 *,U08 *);
extern U16 fat_addr (U08 *);
extern void fat_load (U16,U32 *,U08 *);
extern void fat_read_file (U16,U08 *,U32);
extern void fat_write_file (U16,U08 *,U32);
extern void fat_cluster_data_store (void);
extern U08 fat_search_file (U08 *,U16 *,U32 *,U08 *,U08 *);
//Block Size in Bytes
#define BlockSize 512
//Master Boot Record
#define MASTER_BOOT_RECORD 0
//Volume Boot Record location in Master Boot Record
#define VBR_ADDR 0x1C6
//define ASCII
#define SPACE 0x20
#define DIR_ENTRY_IS_FREE 0xE5
#define FIRST_LONG_ENTRY 0x01
#define SECOND_LONG_ENTRY 0x42
//define DIR_Attr
#define ATTR_LONG_NAME 0x0F
#define ATTR_READ_ONLY 0x01
#define ATTR_HIDDEN 0x02
#define ATTR_SYSTEM 0x04
#define ATTR_VOLUME_ID 0x08
#define ATTR_DIRECTORY 0x10
#define ATTR_ARCHIVE 0x20
//FAT16 DBR
struct BootSec
{
U08 BS_jmpBoot[3]; //3 bytes 跳转指令
U08 BS_OEMName[8]; //8 bytes OEM ID
//------------ BPB -----------------
U16 BPB_BytesPerSec; //2 bytes 扇区字节数 512 ...
U08 BPB_SecPerClus; //1 byte 每簇扇区数
U16 BPB_RsvdSecCnt; //2 bytes 保留扇区数.第一个FAT开始之前的扇区数,包括引导扇区.
U08 BPB_NumFATs; //1 bytes FAT数,该分区上FAT的副本数.
U16 BPB_RootEntCnt; //2 bytes 根目录项数.能够保存在该分区的根目录夹中的32个字节长的文件和文件夹名称项的总数.
U16 BPB_TotSec16; //2 bytes 小扇区数.该分区上的扇区数.当大于65536个扇区,将使用大扇区数
U08 BPB_Media; //1 bytes 媒体描述符.HD:0xF8;FD:0xF0...
U16 BPB_FATSz16; //2 bytes 每FAT扇区数.该分区上每个FAT所占用的扇区数.
U16 BPB_SecPerTrk; //2 bytes 每道扇区数
U16 BPB_NumHeads; //2 bytes 磁头数
U32 BPB_HiddSec; //4 bytes 隐藏扇区数.该分区上引导扇区之前的扇区数.
U32 BPB_TotSec32; //4 bytes 小扇区数.该分区上的扇区数.
};
//FAT12 and FAT16 Structure Starting at Offset 36
#define BS_DRVNUM 36
#define BS_RESERVED1 37
#define BS_BOOTSIG 38
#define BS_VOLID 39
#define BS_VOLLAB 43
#define BS_FILSYSTYPE 54
//FAT32 Structure Starting at Offset 36
#define BPB_FATSZ32 36
#define BPB_EXTFLAGS 40
#define BPB_FSVER 42
#define BPB_ROOTCLUS 44
#define BPB_FSINFO 48
#define BPB_BKBOOTSEC 50
#define BPB_RESERVED 52
#define FAT32_BS_DRVNUM 64
#define FAT32_BS_RESERVED1 65
#define FAT32_BS_BOOTSIG 66
#define FAT32_BS_VOLID 67
#define FAT32_BS_VOLLAB 71
#define FAT32_BS_FILSYSTYPE 82
//End of Boot Sctor and BPB Structure
//32 bytes
struct DirEntry {
U08 DIR_Name[11]; //8 chars filename
U08 DIR_Attr; //file attributes RSHA, Longname, Drive Label, Directory
U08 DIR_NTRes; //set to zero
U08 DIR_CrtTimeTenth; //creation time part in ms
U16 DIR_CrtTime; //creation time
U16 DIR_CrtDate; //creation date
U16 DIR_LastAccDate; //last access date
U16 DIR_FstClusHI; //first cluster high word
U16 DIR_WrtTime; //last write time
U16 DIR_WrtDate; //last write date
U16 DIR_FstClusLO; //first cluster low word
U32 DIR_FileSize; //the size of file
};
#endif //_FAT_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -