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

📄 fat16.h

📁 实现了avr下对sd卡的读写,支持文件存取,删除的功能
💻 H
字号:
//-------------------------------------------------------------------------
typedef struct{
	uint8_t		PB_BootIndicator;
	uint8_t		PB_StartHead;
	uint16_t	PB_StartSector;
	uint8_t		PB_SystemID;
	uint8_t		PB_EndHead;
	uint16_t	PB_EndSector;
	uint32_t	PB_RelativeSector;//相对偏移量为32bits,比如0x01C6 0x01C9,一般是固定的
	uint32_t	PB_TotalSector;		
} FAT_PB;//(PB short for parameter block)
//-------------------------------------------------------------------------
typedef struct{
	uint8_t		MBR_mbr[446];
	FAT_PB		MBR_pb[4];//fat_pb是指逻辑上存储区的属性,关键的值是PB_RelativeSector,即各逻辑盘对于物理盘的相对偏移
	uint16_t	MBR_Signature;//结束标记
} FAT_MBR;//总共一个扇区大小,512bytes,mbt_pb就是dpt,64个字节,每一个数组值 就是16字节,描塑一个分区,第一个分区是主分区,其他为扩展分区,SD卡只支持一个分区,所以MBR_pb[0]有用
//-------------------------------------------------------------------------
typedef struct{
	uint8_t		BS_jmpBoot[3];
	uint8_t		BS_OEMName[8];
	uint16_t	BPB_BytesPerSec;
	uint8_t		BPB_SecPerClus;
	uint16_t	BPB_RsvdSecCnt;
	uint8_t		BPB_NumFATs;
	uint16_t	BPB_RootEntCnt;
	uint16_t	BPB_TotSec16;
	uint8_t		BPB_Media;
	uint16_t	BPB_FATSz16;
	uint16_t	BPB_SecPerTrk;
	uint16_t	BPB_NumHeads;
	uint32_t	BPB_HiddSec;
	uint32_t	BPB_TotSec32;
	uint8_t		BS_DrvNum;
	uint8_t		BS_Reservedl;
	uint8_t		BS_BootSig;
	uint32_t	BS_VolID;
	uint8_t		BS_VolLab[11];
	uint8_t		BS_FilSysType[8];
	uint8_t		ExecutableCode[448];
	uint8_t		ExecutableMarker[2];
} FAT_BPB;//用来引导电脑上的操作系统,用来做接口的 
//-------------------------------------------------------------------------
typedef struct{
	uint8_t		NAME[8];//maxlen 
	uint8_t		TYPE[3];//txt....
} FILE_NAME;//总共 11字节 
//-------------------------------------------------------------------------
typedef struct{
	uint16_t	Start;//首簇号
	uint32_t	Size;//长度
} FILE_POSIT;//文件位置
//-------------------------------------------------------------------------
typedef struct{
	FILE_NAME	FileName;
	uint8_t		FileAttrib;//attribute,文件属性
	uint8_t		UnUsed[10];//系统保留
	uint8_t		FileUpdateTime[2];//文件的最近修改时间
	uint8_t		FileUpdateData[2];//文件的最近修改日期
	FILE_POSIT	FilePosit;
} DIR;//这些32个字节一读512个字节,是按顺序放入的,这只是一个文件的内容,一般说来DIR是有32个扇区,也就是32*512/32=512个文件可以放
//-------------------------------------------------------------------------
typedef struct{
	uint16_t	ClusID;
	uint16_t	SecOfClus;
	uint16_t	ByteOfSec;
} DATA_POSIT;
//-------------------------------------------------------------------------
#define	SD_SUCC				0
#define	SD_FAIL				1//在mmc.c中的return回来继续判断
//-------------------------------------------------------------------------
uint8_t InitFat16(void);
uint8_t CreateFile(uint8_t* Name,uint32_t Size);
uint8_t EreaseFile(uint8_t Name[11]);
uint8_t ReadFile(uint8_t Name[11],uint32_t Start,uint32_t len,uint8_t *p);
uint8_t WriteFile(uint8_t Name[11],uint32_t Start,uint32_t len,uint8_t *p);
//-------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -