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

📄 minifs.h

📁 AT89C51 MP3源程序AT89C51 MP3源程序 SD AT89C51 MP3源程序AT89C51 MP3源程序 SD
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
;*****************************************************************************************************
;*									Copyright (c) 2006 by JiaoJinXing. 
;*											All rights reserved.
;*
;*---- 文件信息 --------------------------------------------------------------------------------------
;* 文   件   名 : minifs.h
;* 创   建   人 : 焦进星
;* 描        述 : 扇区缓存器文件
;*
;*---- 历史版本信息 ----------------------------------------------------------------------------------
;* 日   期  : 2008年 12 月 15 日
;* 创 建 人  : 焦进星
;* 描   述  : 建立版本 V1.0.0
;*
;*---- 联系方式 --------------------------------------------------------------------------------------
;* Email    : wyoujtg@163.com
;* Web      : http://wyoujtg.blog.163.com  
;*****************************************************************************************************
;*/

#ifndef MINIFS_H
#define MINIFS_H

/*
;*****************************************************************************************************
;* 描    述 : 平台配置
;*****************************************************************************************************
;*/
//#define WINDOWS
#define AVR_MMC

#ifdef  WINDOWS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DISK_MOUNT_FILE	"simdisk.dat"
#endif


#ifdef AVR_MMC
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>#endif

/*
;*****************************************************************************************************
;* 描    述 : 文件系统配置
;*****************************************************************************************************
;*/
#define MAX_FILE_OPEN 1

/*
;*****************************************************************************************************
;* 描    述 : 定义数据类型
;*****************************************************************************************************
;*/
#ifdef AVR_MMC
typedef unsigned char  uint8;
typedef unsigned int   uint16;
typedef unsigned long  uint32;
#endif

#ifdef WINDOWS
typedef unsigned char  uint8;
typedef unsigned short uint16;
typedef unsigned int   uint32;
#endif

#ifndef TRUE
#define TRUE 1
#endif 

#ifndef NULL
#define NULL ((void *)0)
#endif 

#ifndef FALSE
#define FALSE 0
#endif 

/*
;*****************************************************************************************************
;* 描    述 : 小端访问
;*****************************************************************************************************
;*/
#define GET_UINT16(buf, x)		( ((uint16)buf[x+0]) | ((uint16)buf[x+1]<<8) )
#define SET_UINT16(buf, x, v)	{	buf[x+0] = (uint8)((v)&0xff);\
									buf[x+1] = (uint8)((v>>8)&0xff);		}

#define GET_UINT32(buf, x)		( ((uint32)buf[x+0]) | ((uint32)buf[x+1]<<8) | ((uint32)buf[x+2]<<16) | ((uint32)buf[x+3]<<24) )

/*
;*****************************************************************************************************
;* 描    述 : 定义 BPB 结构
;*****************************************************************************************************
;*/
#define BPB_BytsPerSec 11
#define BPB_SecPerClus 13
#define BPB_RsvdSecCnt 14
#define BPB_NumFATs    16
#define BPB_RootEntCnt 17
#define BPB_TotSec16   19
#define BPB_FATSz16    22
#define BPB_TotSec32   32
#define BPB_FATSz32    36
#define BPB_RootClus   44
#define BPB_FSInfo     48

/*
;*****************************************************************************************************
;* 描    述 : 定义簇类型
;*****************************************************************************************************
;*/
#define	NEW_CLUS_CHAIN				0
#define EMPTY_CLUS                  0
#define EMPTY_CLUS_1                1
#define BAD_CLUS                    0xfff7
#define EOF_CLUS_1                  0xfff8
#define EOF_CLUS_END                0xffff

/*
;*****************************************************************************************************
;* 描    述 : 定义目录项数据结构
;*****************************************************************************************************
;*/
typedef struct _FDT
{
    char   Name[11];           /* 文件名	*/
    uint8   Attr;               /* 文件属性 */
    uint16  FstClusLO;          /* 起始簇   */
    uint32  FileSize;           /* 文件大小 */
} FDT;

/*
;*****************************************************************************************************
;* 描    述 : 定义文件信息结构体
;*****************************************************************************************************
;*/
typedef struct FileManageInfo
{   	
	FDT			fFDT;			/* 目录项数据结构	*/
	uint8		Flag;			/* 一些标志         */
	uint16		FdtIndex;		/* 文件目录项索引   */
    uint16      CurClus;        /* 当前簇号			*/
    uint32      Offset;         /* 文件指针偏移量	*/
} *M_FILE;

/*
;*****************************************************************************************************
;* 描    述 : 文件系统信息变量
;*****************************************************************************************************
;*/
#ifdef IN_FAT16
#define EXTERN
#else
#define EXTERN extern
#endif

EXTERN uint8  FS_SecPerClus;
EXTERN uint8  FS_FATStartSec;
EXTERN uint16 FS_MaxClus;
EXTERN uint16 FS_RootEntCnt;
EXTERN uint16 FS_RootDirStartSec;
EXTERN uint32 FS_DataStartSec;

/*
;*****************************************************************************************************
;* 描    述 : 定义一些有意义的标识
;*****************************************************************************************************
;*/
#define FDT_NO_FOUND	FS_RootEntCnt
#define MAX_FDT_NUM		FS_RootEntCnt
#define FILE_OPEN		0x01

/*
;*****************************************************************************************************
;* 函数名称 : Cache_Init
;* 描    述 : 扇区缓存器初始化
;* 输 	 入 : 无
;*        
;* 输 	 出 : 无
;*****************************************************************************************************
;*/
void Cache_Init(void);

/*
;*****************************************************************************************************
;* 函数名称 : OpenSector
;* 描    述 : 打开指定扇区
;* 输 	 入 : SecIndex: 扇区号
;*        
;* 输 	 出 : 扇区读写地址
;*****************************************************************************************************
;*/
uint8 *OpenSector(uint32 SecIndex);

/*
;*****************************************************************************************************
;* 函数名称 : WriteSector
;* 描    述 : 写已打开的扇区
;* 输 	 入 : 无
;*        
;* 输 	 出 : 无
;*****************************************************************************************************
;*/	
void WriteSector(void);

/*
;*****************************************************************************************************
;* 函数名称 : CacheWriteBack
;* 描    述 : 回写已打开的扇区
;* 输 	 入 : 无
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/		
uint8 CacheWriteBack(void);

/*
;*****************************************************************************************************
;* 函数名称 : Disk_Init
;* 描    述 : 磁盘初始化
;* 输 	 入 : 无
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 Disk_Init(void);

/*
;*****************************************************************************************************
;* 函数名称 : Init_IDE
;* 描    述 : 初始化IDE
;* 输 	 入 : 无
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 Init_IDE(void);


/*
;*****************************************************************************************************
;* 函数名称 : ReadIDESector
;* 描    述 : 读IDE指定扇区
;* 输 	 入 : SecIndex: 扇区号; Buf: 扇区内容存入的地址
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 ReadIDESector(uint32 SecIndex, uint8 *Buf);

/*
;*****************************************************************************************************
;* 函数名称 : WriteIDESector
;* 描    述 : 写IDE指定扇区
;* 输 	 入 : SecIndex: 扇区号; Buf: 要写入的内容
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 WriteIDESector(uint32 SecIndex, uint8 *Buf);

/*
;*****************************************************************************************************
;* 函数名称 : GetNextClus
;* 描    述 : 获得指定簇的下一簇号
;* 输 	 入 : ClusIndex: 簇号
;*        
;* 输 	 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 GetNextClus(uint16 ClusIndex);

/*
;*****************************************************************************************************
;* 函数名称 : SetNextClus
;* 描    述 : 设置指定簇的下一簇号
;* 输 	 入 : ClusIndex: 簇号, Value: 下一簇号
;*        
;* 输 	 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 SetNextClus(uint16 ClusIndex, uint16 Value);

/*
;*****************************************************************************************************
;* 函数名称 : AddNewClus
;* 描    述 : 为指定簇链增加一个簇
;* 输 	 入 : ClusIndex: 簇号
;*        
;* 输 	 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 AddNewClus(uint16 ClusIndex);

/*
;*****************************************************************************************************
;* 函数名称 : DelClusChain
;* 描    述 : 删除簇链
;* 输 	 入 : ClusIndex: 簇号
;*        
;* 输 	 出 : 无
;*****************************************************************************************************
;*/
void DelClusChain(uint16 CurClus);

/*
;*****************************************************************************************************
;* 函数名称 : ReadRootFDTInfo
;* 描    述 : 读取指定根目录项
;* 输 	 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 ReadRootFDTInfo(uint16 FDTIndex, FDT *pFDT);

/*
;*****************************************************************************************************
;* 函数名称 : WriteRootFDTInfo
;* 描    述 : 写指定根目录项
;* 输 	 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
;*        
;* 输 	 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 WriteRootFDTInfo(uint16 FDTIndex, FDT *pFDT);

/*
;*****************************************************************************************************
;* 函数名称 : GetFreeRootFDT

⌨️ 快捷键说明

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