📄 fat.h
字号:
/*
-------------------------------------------------------------------------------
* 力格 : FAT32 Interface Code
* 颇老疙 : fat.h
* 父电 荤恩 : kkamcneko@naver.com
* 父电 朝楼 : 2005-11-11
* 荐沥茄 朝楼 : 2005-12-29
* Version : 0.1
* Target MCU : AVR ATMega128
* 徘 荤捞令 : 4
* 眠玫 俊叼磐 : EditPlus (http://www.editplus.com)
-------------------------------------------------------------------------------
*/
#ifndef FAT_H
#define FAT_H
#include "../global.h"
#include "filelist.h"
// Bytes per Sector for SD/MMC
#define SECTOR_SIZE 512
// Master Boot Record
#define MBR_ADDR 0
// define ASCII
#define SPACE 0x20
#define DIR_ENTRY_IS_FREE 0xE5
// define DIR Attribute
#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
#define ATTR_CWD 0x40
// 滚欺俊 历厘且 叼泛磐府 浚飘府狼 俺荐
#define ENTRY_BUF_SIZE 100
//====================================================================//
// MBR FAT Table
// Offset: 446~461
struct tagPartTable
{ // OFFSET
U8 Bootable; // 446 0x1BE
U8 StartHead; // 447 0x1EF
U16 StartCylSec; // 448 0x1C0
U8 Type; // 450 0x1C2
U8 EndHead; // 451 0x1C3
U16 EndCylSec; // 452 0x1C4
U32 StartLBA; // 454 0x1C6
U32 Size; // 458 0x1CA
};
//====================================================================//
//====================================================================//
// Partition Boot Record(PBR)
// Offset: 0~35
struct tagBootSector
{ // OFFSET
U8 BS_jmpBoot[3]; // 0 0x00
char BS_OEMName[8]; // 3 0x03
U16 BPB_BytesPerSec; // 11 0x0B // 冀磐寸 官捞飘荐
U8 BPB_SecPerClus; // 13 0x0D // 努矾胶磐寸 冀磐荐
U16 BPB_RsvdSecCnt; // 14 0x0E // 抗距等 冀磐荐 -- 风飘叼泛配府 困摹甫 备且锭 荤侩
U8 BPB_NumFATs; // 16 0x10 // FAT狼 肮荐(FAT #1, FAT #2秦辑 焊烹 2俺肺 备己)
U16 BPB_RootEntCnt; // 17 0x11
U16 BPB_TotSec16; // 19 0x13
U8 BPB_Media; // 21 0x15
U16 BPB_FATSz16; // 22 0x16
U16 BPB_SecPerTrk; // 24 0x18
U16 BPB_NumHeads; // 26 0x1A
U32 BPB_HiddSec; // 28 0x1C
U32 BPB_TotSec32; // 32 0x20
};
// FAT16 / FAT32 备盒篮 MBR FAT Table Type栏肺 搬沥
// ex) FAT32狼 版快 Type Code啊 0x0B唱 0x0C啊 等促.
// Offset: 36~89 (FAT32 Structure)
struct tagBPB32
{ // OFFSET
U32 BPB_FATSz32; // 36 0x24 // FAT(FAT #1, FAT #2)啊 瞒瘤窍绰 冀磐荐 -- 风飘叼泛配府 困摹甫 备且锭 荤侩
U16 BPB_ExtFlags; // 40 0x28
U16 BPB_FSVer; // 42 0x2A
U32 BPB_RootClus; // 44 0x2C // 风飘叼泛配府狼 矫累努矾胶磐(焊烹 2)
U16 BPB_FSInfo; // 48 0x30
U16 BPB_BkBootSec; // 50 0x32
U8 BPB_Reserved[12]; // 52 0x34
U8 BS_DrvNum; // 64 0x40
U8 BS_Reserved1; // 65 0x41
U8 BS_BootSig; // 66 0x42
U32 BS_VolID; // 67 0x43
char BS_VolLab[11]; // 71 0x47
char BS_FilSysType[8]; // 82 0x52
};
//====================================================================//
//====================================================================//
// Directory Entry
struct tagDirEntry
{ // OFFSET
U8 DIR_Name[8]; // 00 0x00
U8 DIR_Ext[3]; // 00 0x00
U8 DIR_Attr; // 11 0x0B
U8 DIR_NTRes; // 12 0x0C
U8 DIR_CrtTimeTenth; // 13 0x0D
U16 DIR_CrtTime; // 14 0x0E
U16 DIR_CrtDate; // 16 0x10
U16 DIR_LastAccDate; // 18 0x12
U16 DIR_FstClusHI; // 20 0x14
U16 DIR_WrtTime; // 22 0x16
U16 DIR_WrtDate; // 24 0x18
U16 DIR_FstClusLO; // 26 0x1A
U32 DIR_FileSize; // 28 0x1C
};
// 变颇老 捞抚阑 困茄 浚飘府
// 变颇老 备盒牢瘤 舅扁 困秦辑绰 Attribute甫 曼绊窍搁 等促.
// 变颇老牢 版快 Attribute啊 0x0F啊 等促.
// FAT Long Directory Entry Structure
struct tagLongDirEntry
{ // OFFSET
U8 LDIR_Ord; // 00 0x00
U8 LDIR_Name1[10]; // 01 0x01
U8 LDIR_Attr; // 11 0x0B
U8 LDIR_Type; // 12 0x0C
U8 LDIR_Chksum; // 13 0x0D
U8 LDIR_Name2[12]; // 14 0x0E
U16 LDIR_FstClusLO; // 26 0x1A
U8 LDIR_Name3[4]; // 28 0x1C
};
//====================================================================//
//====================================================================//
// FAT Buffer
struct tagFATBuffer
{
U8 buffer[SECTOR_SIZE];
U32 lastSector;
};
// Directory Entry Buffer (叼泛磐府 浚飘府甫 100俺鳖瘤 历厘)
struct tagDirEntryBuffer // cluster:entry 蔼栏肺 角力 叼泛配府 浚飘府狼 困摹甫 备窃
{
U32 cluster[ENTRY_BUF_SIZE];
U8 entry[ENTRY_BUF_SIZE];
U8 index;
};
//====================================================================//
int fatInit(void); // FAT包访 檬扁拳
U32 fatGetDirEntry(U32 cluster); // 泅犁叼泛磐府郴俊 阿 颇老狼 浚飘府 困摹蔼阑 备窃
struct tagFileInfo fatGetFileInfo(U32 cluster, U8 entry);
U32 fatGetNextCluster(U32 cluster);
U32 fatGetPrevCluster(U32 startCluster, U32 curCluster);
U32 fatClusToSec(U32 cluster); // Convert cluster to sector
void fatBufferInit(U32 cluster); // Initialize Buffer
void fatDirEntryBufferInit(void);
int fatDirEntryBufferInsert(U32 cluster, U8 entry);
U8 fatDirEntryBufferIsFull(void);
void fatFormalizeFileName(U8 *fileName);
// 蜡聪内靛 茄臂阑 炼钦屈栏肺 函券
U16 uniToKssm(U16 wchar);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -