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

📄 fatprocess.h

📁 单片机读写U盘源码 基于51单片机和国产USB芯片CH374
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                               CH374做主机操作U盘读写程序
**                                     FAT16文件系统层
**                                         头文件
**
**                                        VBeat 0.5
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: FATProcess.H
**创   建   人: 徐亦朱
**最后修改日期: 2007年9月27日
**描        述: FAT文件系统层接口函数头文件
**              
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 徐亦朱
** 版  本: VBeat 0.3
** 日 期: 2007年9月21日
** 描 述: 完善程序风格
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007年9月27日
** 描 述: 优化数据结构及算法
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

UINT8  * rFILEBUF ;

/*********************************************************************************************************
** 函数名称: FATInit
** 功能描述: FAT文件系统参数初始化
**
** 输 入: 无
** 输 出: FAT文件系统各项参数初始化
**           A.返回ERR_Init报告异常传输错误
**           B.返回InitSuccess表示初始化成功完成
**         
** 全局变量: FAT.SecPerClus, FAT.BytesPerSec, FAT.RsvdSecCnt, FAT.shift, FAT.RootDirSectors
**           FAT.FirstRootSector, FAT.FirstDataSector, FAT.extra, DiskNums, FileNums 
** 调用模块: mReadSector
** 调试码:   DEBUG_Init
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------

********************************************************************************************************/
UINT8  FATInit( void ) ;

/*********************************************************************************************************
** 函数名称: FATOpen
** 功能描述: 打开文件函数
**
** 输 入: string: 指向要打开的文件名( 路径形式,例如: "/……/……/文件名" )
**         ProcessMode: 操作模式ProcessMode:
**                  ModeA1:  0x00 -- 打开文件,以便读,若文件不存在则退出
**                  ModeA2:  0x80 -- 打开文件,以便写,若文件不存在则退出
**                  ModeA3:  0x01 -- 打开文件,以便读,先将文件长度截为0,如果文件不存在则退出
**                  ModeA4:  0x81 -- 打开文件,以便写,先将文件长度截为0,如果文件不存在则退出
**                  ModeA5:  0x82 -- 打开文件,以便写,向已有文件的尾部追加内容,如果文件不存在则退出
**                  ModeB1:  0x10 -- 打开文件,以便读,若文件不存在则创建之
**                  ModeB2:  0x90 -- 打开文件,以便写,若文件不存在则创建之
**                  ModeB3:  0x11 -- 打开文件,以便读,先将文件长度截为0,若文件不存在则创建之
**                  ModeB4:  0x91 -- 打开文件,以便写,先将文件长度截为0,若文件不存在则创建之
**                  ModeB5:  0x92 -- 打开文件,以便写,向已有文件的尾部追加内容,若文件不存在则创建之  
**                  ModeC1:  0xF1 -- 打开目录,以便读写,若目录不存在则创建之
**                  ModeC2:  0xF2 -- 删除文件/目录,如果文件/目录不存在则退出
** 输 出: 逐级打开,需先打开上层目录
**         找到的文件/目录在簇内的地址信息记录在FIND结构中
**           A.返回ERR_Check报告异常传输错误
**           B.返回OpenSuccess则操作成功
**           C.返回ERR_NOFile查找文件失败,磁盘中无此文件
**           D.返回ERR_OPEN打开文件失败,没有可用的文件结构
**         
** 全局变量: 无
** 调用模块: ProcessPath, CheckFirst16, x16CheckFile, xProcessDirectory, x16RootDirectory, x16Creat
** 调试码:   DEBUG_OPEN
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱 
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  FATOpen( const UINT8 *string, UINT8 ProcessMode ) ;

/*********************************************************************************************************
** 函数名称: x16ReadFile
** 功能描述: FAT16读取文件
**
** 输 入: ReadNums: 可选的读取扇区数,若文件数据小于要求量,只会读取文件实际长度
** 输 出: 将所要求数量的文件数据读取到文件缓冲区FILE_BUF  
**           A.返回ERR_Read报告异常传输错误  
**           B.返回Clu_End表示一簇已读完,由于程序算法问题,此时FILEBUF中有效数据可能不足2048字节
**           C.返回File_End表示文件已读完,由于程序算法问题,此时FILEBUF中应有零碎数据( 不满一个扇区 )
**           D.返回ReadSuccess表示读取成功完成,并且不属于上述情况 
**
** 全局变量: files[ i ].find.Offset, FAT.SecPerClus
** 调用模块: x16ReadFAT, mReadSector, 
** 调试码:   DEBUG_READ
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  x16ReadFile( UINT8 ReadNums, UINT8 FileNum ) ;

/*********************************************************************************************************
** 函数名称: x16WriteFile
** 功能描述: FAT16写文件
**
** 输 入: WriteNums: 可选的写入字节数
** 输 出: 将FILE_BUF中的数据写入文件
**           A.返回ERR_Write报告异常传输错误  
**           B.返回WriteSuccess则写入成功返回
**           C.返回ERR_FullDisk表示磁盘已写满,无法正常写入数据
**
** 全局变量: FAT.SecPerClus, FAT.SecPerClus, files[ i ].wr.write.extra
** 调用模块: x16CheckClus, mReadSector, mWriteSector, x16List, memmove, memcpy
** 调试码:   DEBUG_WRITE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  x16WriteFile( UINT16 WriteNums, UINT8 FileNum ) ;

/*********************************************************************************************************
** 函数名称: FATClose
** 功能描述: 关闭文件
**
** 输 入: FileNum: 要关闭的文件编号
** 输 出: 文件缓冲区FILE_BUF中不满一个扇区的零碎数据被刷新到文件中
**           A.返回ERR_Close报告异常传输错误  
**           B.返回CloseSuccess则操作成功
**
** 全局变量: files[ i ].wr.write.extra, wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector ,
**           FAT.shift, FAT.SecPerClus
** 调用模块: x16List, mReadSector, x16CheckClus,  mWriteSector, memcpy
** 调试码:   DEBUG_CLOSE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  FATClose( UINT8 FileNum ) ;

/*********************************************************************************************************
** 函数名称: FATCopy
** 功能描述: 复制文件
**
** 输 入: deststr: 为要操作的目标文件名( 路径形式,例如: "/……/……/…….……" )
**         scrstr:  为要操作的源文件名( 路径形式,例如: "/……/……/…….……" ) 
** 输 出: 源文件的数据信息写入到目标文件中
**           A.返回ERR_Copy报告异常传输错误  
**           B.返回CopySuccess则操作成功
**
** 全局变量: FileNums, DiskNums
** 调用模块: FATOpen, x16ReadFile, x16WriteFile, FATClose
** 调试码:   DEBUG_CLOSE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  FATCopy( const UINT8 *deststr, const UINT8 *scrstr ) ;

/*********************************************************************************************************
**
**                                 引用变量及函数声明
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

extern FS  FAT ;
extern FILE  files[ 2 ] ;
extern clock sysclock ;
extern UINT8  DiskNums ;                          //DISKBUF能存储的扇区数  
extern UINT8  FileNums ;                          //FILEBUF能存储的扇区数 
extern UINT8  xdata DISKBUF[ DISKBUF_BYTES ] ;    //磁盘缓冲区
extern UINT8  xdata FILEBUF[ FILEBUF_BYTES ] ;    //文件缓冲区  

extern UINT8  mReadSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8  mWriteSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8  ProcessPath( const UINT8 *string, UINT8 * filename ) ;
extern UINT16 x16List( UINT16 clus, UINT16 value, UINT8 ProcessMode ) ;
extern UINT16 x16CheckClus( void ) ;
extern UINT8  xProcessDirectory( FILE * wr, UINT8 Attribute ) ;
extern UINT8  x16RootDirectory( FILE * wr, UINT8 Attribute ) ;
extern UINT8  x16Creat( FILE * wr, UINT8 Attribute ) ;
extern UINT8  CheckFile( FILE * wr, UINT16 TotalSectors, UINT32 ProcessSector ) ;
extern UINT8  CheckFirst16( FILE * wr ) ;
extern UINT8  x16CheckFile( FILE * wr ) ;

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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