?? fat.h
字號:
/************************************************************/
/* SD Code for AT91SAM7S64 */
/* By pasyong */
/* 2006-5 */
/* Base IAR 4.30A */
/************************************************************/
#ifndef FAT_H
#define FAT_H
#define CHAR unsigned char
#define BYTE unsigned char
#define WORD unsigned int
#define DWORD unsigned long
//簇定義
#define MSDOSFSROOT 0
#define CLUST_FREE 0
#define MSDOSFSFREE CLUST_FREE
#define CLUST_FIRST 2 // 第一個數據簇
#define CLUST_RSRVD 0xfffffff6 // 系統保留簇
#define CLUST_BAD 0xfffffff7 // 壞簇
#define CLUST_EOFS 0xfffffff8 // 第一個結束簇
#define CLUST_EOFE 0xffffffff // 最后一個結束簇
#define FAT12_MASK 0x00000fff // FAT12掩碼
#define FAT16_MASK 0x0000ffff // FAT16掩碼
#define FAT32_MASK 0x0fffffff // FAT32掩碼
// 分區類型
#define PART_TYPE_UNKNOWN 0x00
#define PART_TYPE_FAT12 0x01
#define PART_TYPE_XENIX 0x02
#define PART_TYPE_DOSFAT16 0x04
#define PART_TYPE_EXTDOS 0x05
#define PART_TYPE_FAT16 0x06
#define PART_TYPE_NTFS 0x07
#define PART_TYPE_FAT32 0x0B
#define PART_TYPE_FAT32LBA 0x0C
#define PART_TYPE_FAT16LBA 0x0E
#define PART_TYPE_EXTDOSLBA 0x0F
#define PART_TYPE_ONTRACK 0x33
#define PART_TYPE_NOVELL 0x40
#define PART_TYPE_PCIX 0x4B
#define PART_TYPE_PHOENIXSAVE 0xA0
#define PART_TYPE_CPM 0xDB
#define PART_TYPE_DBFS 0xE0
#define PART_TYPE_BBT 0xFF
struct partrecord // 16 字節
{
BYTE prIsActive; // 0x80代表該分區為缺省分區
BYTE prStartHead; // 該分區入口的磁頭地址
WORD prStartCylSect; // 該分區入口的扇區地址和柱面地址
BYTE prPartType; // 該分區類型
BYTE prEndHead; // 該分區結束的扇區地址
WORD prEndCylSect; // 該分區結束的柱面地址
DWORD prStartLBA; // 該分區內第一個扇區地址
DWORD prSize; // 該分區所包含的扇區總數
};
struct partsector
{
CHAR psPartCode[512-64-2]; // 啟動代碼 (446 bytes)
BYTE psPart[64]; // 四個分區表(64 bytes)
BYTE psBootSectSig0; // 兩個簽名(2 bytes)
BYTE psBootSectSig1;
#define BOOTSIG0 0x55
#define BOOTSIG1 0xaa
};
//系統引導扇區(DOS BOOT RECORD)DBR結構
struct bootsector710 {
BYTE bsJump[3]; // 跳轉指令
CHAR bsOEMName[8]; // 廠商標志和OS版本號
CHAR bsBPB[53]; // BIOS 參數塊
CHAR bsExt[26]; // 擴展BPB
CHAR bsBootCode[418]; // 引導扇區代碼
BYTE bsBootSectSig2;
BYTE bsBootSectSig3;
BYTE bsBootSectSig0; // 引導扇區簽名0x55
BYTE bsBootSectSig1; // 引導扇區簽名0xAA
#define BOOTSIG0 0x55
#define BOOTSIG1 0xaa
#define BOOTSIG2 0
#define BOOTSIG3 0
};
// BIOS 參數塊
struct bpb710 {
WORD bpbBytesPerSec; // 每扇區字節數
BYTE bpbSecPerClust; // 每簇扇區數
WORD bpbResSectors; // 保留區域中的保留扇區數
BYTE bpbFATs; // FAT表的份數
WORD bpbRootDirEnts; // 根目錄項數
WORD bpbSectors; // 此域為存儲卷上的扇區總數
BYTE bpbMedia; // 固定存儲介質描述
WORD bpbFATsecs; // FAT表所占的扇區數
WORD bpbSecPerTrack; // 每道扇區數
WORD bpbHeads; // 磁頭數
DWORD bpbHiddenSecs; // 隱藏扇區數
DWORD bpbHugeSectors; // 總扇區數
DWORD bpbBigFATsecs;// 每個FAT區所占扇區數
WORD bpbExtFlags; // 擴展標志
#define FATNUM 0xf
#define FATMIRROR 0x80
WORD bpbFSVers; // 文件系統版本
#define FSVERS 0
DWORD bpbRootClust; // 根目錄簇號
WORD bpbFSInfo; // 文件系統信息扇區號
WORD bpbBackup; // 備份引導扇區
};
// 目錄或文件入口地址結構
struct direntry {
BYTE deName[8]; // 文件名
#define SLOT_EMPTY 0x00 // 目錄項為空
#define SLOT_E5 0x05
#define SLOT_DELETED 0xe5 // 文件已被刪除
BYTE deExtension[3]; // 擴展名
BYTE deAttributes; // 文件屬性
#define ATTR_NORMAL 0x00 // 讀寫
#define ATTR_READONLY 0x01 // 只讀
#define ATTR_HIDDEN 0x02 // 隱藏
#define ATTR_SYSTEM 0x04 // 系統文件
#define ATTR_VOLUME 0x08 // 卷標文件
#define ATTR_LONG_FILENAME 0x0f // 長文件名文件
#define ATTR_DIRECTORY 0x10 // 子目錄文件
#define ATTR_ARCHIVE 0x20 // 歸檔文件
BYTE deLowerCase; // 系統保留
#define LCASE_BASE 0x08
#define LCASE_EXT 0x10
BYTE deCHundredth; // 文件創建時間的10MS
BYTE deCTime[2]; // 文件創建時間
BYTE deCDate[2]; // 文件創建日期
BYTE deADate[2]; // 文件最近訪問日期
WORD deHighClust; // 文件起始簇號的高16位
BYTE deMTime[2]; // 文件最近修改時間
BYTE deMDate[2]; // 文件最近修改日期
WORD deStartCluster; // 文件起始簇號的低16位
DWORD deFileSize; // 文件長度
};
// 一個扇區中的目錄項數
#define DIRENTRIES_PER_SECTOR 0x10
// 長文件名入口地址結構
struct winentry {
BYTE weCnt;
#define WIN_LAST 0x40
#define WIN_CNT 0x3f
BYTE wePart1[10];
BYTE weAttributes;
#define ATTR_WIN95 0x0f
BYTE weReserved1;
BYTE weChksum;
BYTE wePart2[12];
WORD weReserved2;
BYTE wePart3[4];
};
#define WIN_CHARS 13 //長文件名入口地址結構可包含13個字符
//在FAT32中,文件名最長可到255個字符
#define WIN_MAXLEN 255
// 目錄或文件入口地址結構中的時間結構
#define DT_2SECONDS_MASK 0x1F // 秒
#define DT_2SECONDS_SHIFT 0
#define DT_MINUTES_MASK 0x7E0 // 分
#define DT_MINUTES_SHIFT 5
#define DT_HOURS_MASK 0xF800 // 時
#define DT_HOURS_SHIFT 11
// 目錄或文件入口地址結構中的日期結構
#define DD_DAY_MASK 0x1F // 日
#define DD_DAY_SHIFT 0
#define DD_MONTH_MASK 0x1E0 // 月
#define DD_MONTH_SHIFT 5
#define DD_YEAR_MASK 0xFE00 // 年 - 1980
#define DD_YEAR_SHIFT 9
// 調可函數
void ReadBlock(unsigned long LBA);
unsigned long fatClustToSect(unsigned long clust);
unsigned char fatInit( void);
unsigned int fatClusterSize(void);
unsigned long fatGetDirEntry(unsigned int entry);
unsigned long fatGetFilesize(void);
char* fatGetFilename(void);
char* fatGetDirname(void);
void fatLoadCluster(unsigned long cluster, unsigned char *buffer);
unsigned long fatNextCluster(unsigned long cluster);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -