📄 fat16.h
字号:
//Fat16
#define FILEMODE_READ 1
#define FILEMODE_WRITE 2
#define FILE_Name 0
#define FILE_Type 8
#define FILE_Attribute 11
#define FILE_FileLUTime 21
#define FILE_LUDate 23
#define FILE_StartClustNum 25
#define FILE_Size 27
#define Disk_Size (512*64) //Disk的空间大小(以Sector/Page为基本单位)
//1024簇X每簇32个扇区
#define Root_Cluster (0) //MBR所在的簇号
#define Data_Cluster (1) //数据真正开始的扇区
#define BPB_Sector (0)
#define Fat_Sector (BPB_Sector+1)
#define Directory_Sector (Fat_Sector+4)
#define End_Cluster (Disk_Size/32)
#define UNUSED_MARK (0xFF)
#define BAD_MARK (0x00)
#define LAST_BLOCK (0xFFFF)
#define FILE_NO_FOUND (512)
//#define BLOCK_SIZE (32*512)
/*
typedef struct _FILE{
U8 Buffer[BLOCK_SIZE]; //文件缓冲区
U32 fileblock; //文件当前的簇的位置(簇号)
U32 filemode; //打开文件的模式
U32 filebufnum; //文件缓冲区中已经读取/写入的字节数
U32 fileCurpos; //读写的当前位置
U32 filesize; //文件的大小(字节数)
} FILE;
*/
/*typedef __packed struct _DIRECTORY_ENTRY{
U8 FileName[8];
U8 FileType[3];
U8 FileAttribute;
U8 Reserved[10];
U16 FileLUTime;
U16 FileLUDate;
U16 FileStartClustNum;
U32 FileSize;
} Directory_Entry;*/
//extern U8 root_buf[512][32]; //每个文件项为32个字节,一个簇共有512个32字节
//extern U32 pre_block,current_block;
//extern U8 tx_buf[16*1024];
//extern U8 Page_Buf[528];
//函数定义
/********************************************************************/
/*从StartBlock开始查找一个空闲的Block,返回该Block的值*/
/********************************************************************/
//U32 seek_blank_block(U32 StartBlock);
/********************************************************************/
/*如果Flash的MBR和Fat16结构受损,则调用此函数可以恢*/
/*复 */
/********************************************************************/
void Format_Fat16Media(void);
void WriteMBR2Flash(void);
void CreatFAT16(void);
void CreatDirectoryEntry(void);
/*
将第StScetor到Ensector 中的数据写入Flash中
*/
void Write2Flash(unsigned int block,unsigned int StSector,unsigned int EnSector,unsigned char *ClusterBuf);
/********************************************************************/
/*将当前Block_Buf中的内容写到Current_Block所指的簇中 */
/********************************************************************/
//void write_file(U8 endflag,U8 *block_buf); //used in OSFile 2 times
/********************************************************************/
/*返回此文件项在根目录中的位置,根据此位置, */
/*然后到其第26和第27字节的值,再计算出首簇位置 */
/********************************************************************/
//U32 find_file(U8 *file_information); //use in many file for find a file
/********************************************************************/
/*将文件的当前Block的内容读到缓存区中就OK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -