⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat16.h

📁 U盘读写协议:我开发U盘的重要参考代码。 bulk_only传输协议
💻 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 + -