




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1基于MCF51QE128的SD卡文件系统设计SDCARDFILESYSTEMDESIGNBASEDONMCF51QE128童静TONGJING摘要随着嵌入式系统的发展,越来越多的嵌入式设备需要处理大量的数据,同时市场上也随之涌现出了许多大容量的存储器件,使用文件系统将成为这类嵌入式应用的一个必然趋势。本文基于FREESCALE公司MCF51QE128微控制器和SD卡,结合实验数据,深入探讨了FAT16文件系统及其存储原则,实现了文件的创建、打开和多扇区数据的读写。关键词MCF51QE128微控制器,SD卡,FAT16文件系统ABSTRACTWITHTHEDEVELOPMENTOFEMBEDDEDSYSTEMS,MOREANDMOREEMBEDDEDDEVICESNEEDTODEALWITHLARGEAMOUNTSOFDATA,WHILETHEMARKETALSOEMERGEDALOTOFLARGECAPACITYMEMORIES,USETHEFILESYSTEMWILLBEANINEVITABLETRENDFORTHESEEMBEDDEDAPPLICATIONSTHEPAPERBASEDONFREESCALEMCF51QE128MICROCONTROLLERANDSECUREDIGITALCARD,INDEPTHEXPLORATIONINTOFAT16FILESYSTEMANDFILESSTORAGEPRINCIPLESINCOMBINATIONWITHEXPERIMENTALDATA,ANDDESCRIBEDHOWTOCREATE,OPENAFILE,ANDREADORWRITEMULTISECTORDATAKEYWORDSMCF51QE128MICROCONTROLLER,SECUREDIGITALCARD,FAT16FILESYSTEM引言MCF51QE128微控制器是飞思卡尔公司生产的8位/32位兼容的低功耗微处理器,工作电压的典型值是36V,与SD卡的工作电压兼容,可直接与SD卡连接而无须电平转换电路。SD卡因为其体积小、功耗低、容量大且成本低廉,目前被广泛应用于各类嵌入式数据采集系统中。本文针对此类应用,通过实测512MSD卡数据,以实例的形式深入解析了FAT16文件系统的存储原则,并给出了实现方案。1FAT16文件系统SD卡格式化为FAT文件系统时,一般只采用1个分区,以便于存储空间的管理,其划分形式如图1所示。FAT16主要由图中所示的6个深色部分组成,主引导记录位于SD卡的第0扇区,通常情况下,每扇区的大小为512字节。图1FAT16的组织形式11主引导记录MSR(MASTERBOOTRECORD,主引导记录)总是位于存储卡的起始位置,即扇区0。图2是主引导记录的详细信息。由于只有1个分区,所以由偏移量0X1BE可找到第1分区的入口,接着由偏移量0X08找到第1分区的相对起始扇区,即第1分区引导记录所在扇区。以512MBSD卡为例,读图2中地址0X1C60X1C9处4个字节数据0X000000E9(由高位向低位读取),可知第1分区引导记录位于SD卡的第0XE9个扇区。2图2主引导记录12分区引导记录分区BR(BOOTRECORD,引导记录)位于分区的第0扇区,由跳转代码、OEM(ORIGINALEQUIPMENTMANUFACTURER,原始设备制造商)、BPB(BIOSPARAMETERBLOCK,BIOS参数块)、扩展BPB、引导代码和结束标志组成。图3重点列出了分区引导记录中BPB的各项参数。读图3中0X000000E9扇区,由偏移量0X0B处2字节数据0X0200512,可知SD卡每扇区字节数为512。类似,可得到其他相关参数。图3分区引导记录13FAT表和文件存储原则FAT16文件系统主要通过FAT表(FAT1和FAT2)、根目录和数据区实现对文件的存储管理。FAT表记录了数据文件的存储链表,对数据的读取极为重要,通常都会有一个或多个备份。这里,FAT2就是对FAT1的备份,必须随着FAT1即时同步更新。根目录一般以32字节为单位来存放文件记录,具体描述如表1所示。数据区主要存放文件数据,为了有效利用存储空间,一般以簇为单位,簇的大小通常是2的N次幂个扇区。FAT格式化后,簇的大小就确定下来了,可通过读取分区引导记录获得,例如,读图3中0X000000E9扇区,由偏移量0X0D处1字节数据0X1016,可知SD卡的1个簇占16个扇区。3表1根目录文件记录项如果将SD卡的存储空间想象成一本书,要阅读一篇文章,首先应该打开目录找到文章的页码,然后根据页码翻到文章所在的地方。类比到FAT16文件系统,FAT表和根目录就像书的目录,簇号类似于书的页码,而数据区存放的就是文章的具体内容。以打开文件为例,文件的存储原则可以这样描述首先在根目录中查找文件名,如有匹配,就找到了文件的开始簇号,好比知道了文章的页码。但文件的存储和书不同,书的内容一般是连续的,而文件在存储后是可以随意修改的,例如添加或删除,因而在存储空间上可能不连续,这样就无法仅通过开始簇号找到整个文件。那么怎样才能完整找到这些不连续的数据呢答案就是FAT表。FAT表以“0XF8FFFFFF”作为开始标志,以2字节为单位存放文件簇号。FAT表实质是一个2维链表,如图4所示。图4FAT16文件存储实例FAT表上面的数字是这2个字节在表中的位置序号,同时也代表文件的簇号,与数据区的簇号对应,类似目录的页码。通常SD卡上第一个文件的开始簇号为2。若文件长度小于1簇,则其开始簇号所对应的2字节值为“FFFF”。若文件大于1簇,则其开始簇号所对应2字节中存放的是文件所在的下一个簇号,由所得簇号再查找其对应的2字节,可找到文件接下来的簇号,以此类推,直到最后所得簇号对应的2字节值为“FFFF”,即为文件的结束簇号。根据上述原则,由FAT表和根目录就可以确定文件在数据区的存储簇号,从而实现文件数据的管理。以图4中数据为例,通过读FAT表可知SD卡中存放了3个文件第1个文件起始簇号为2,占4簇,依次为2、3、5和6;第2个文件仅占1簇,簇号为4;第3个文件占7和8共2簇。通过读根目录,可以依次找个这3个文件的记录信息,如文件名、开始簇、文件长度等。最后根据文件所占的簇号和文件长度可在数据区中找到文件所占的扇区,即文件的具体内容。42FAT16文件系统设计深入理解了FAT文件系统的存储原则后,下面具体实现文件系统的基本功能文件的创建、打开和读写。这里假定已经实现了MCF51QE128微控制器和SD卡的硬件接口和底层通信,具体细节参考文献3。21数据结构为了便于对主引导记录、分区引导记录、FAT表、根目录和数据区中的相关信息进行记录和处理,定义了FAT16_T和FILE_T两个结构体类型。文中数据类型BYTE、WORD和DWORD分别对应于8位、16位和32位数据。FAT16_T结构体类型用于记录主引导记录和第1分区引导扇区信息,定义如下TYPEDEFSTRUCTDWORDPARTITION_START/分区起始扇区WORDSECTOR_BYTES/每扇区字节数BYTECLUSTER_SECTORS/每簇扇区数WORDRESERVE_SECTORS/保留扇区数BYTEFATS/FAT表备份个数WORDFAT_SECTORS/每FAT的扇区数DWORDFAT_START2/FAT的起始扇区DWORDROOT_START/根目录起始扇区DWORDFILE_START/文件数据的起始扇区/FAT表中,逆序查找,出现的第1个内容为空的2字节所对应的簇号WORDFAT_WRITECLUSTER/FAT表中,逆序查找,出现的第1个内容为空的2字节所在的扇区DWORDFAT_WRITESECTOR/FAT表中,逆序查找,出现的第1个内容为空的2字节所在的扇区的偏移量WORDFAT_WRITEOFFSETWORDFAT_ENDCLUSTER/FAT表的结束簇号/根目录中第1个文件的编号,即起始簇为2的文件的编号,根目录编号从0开始BYTEROOT_STARTNUM/SD卡中文件的总个数,初始化查FAT表得到,打开新文件时增加1BYTEFILES_NUMBYTEOPENFILE/是否有文件打开标志FAT16_TFILE_T结构体类型用于记录每个文件项信息,定义如下TYPEDEFSTRUCTBYTENAME11/文件名BYTEATTRIBUTE/属性WORDTIME/时间WORDDATE/日期WORDSTARTCLUSTER/文件起始簇号DWORDSIZE/文件长度,以字节为单位DWORDSECTORS/文件所占扇区的个数DWORDCLUSTERS/文件所占簇的个数/文件结束簇号已有文件,查FAT表;新文件,则等于起始簇号WORDENDCLUSTER5BYTEROOT_NUMBER/根目录中文件记录项编号DWORDROOT_SECTOR/根目录中文件记录项所在扇区WORDROOT_OFFSET/根目录中文件记录项相对于每扇区的偏移量DWORDFAT_STARTSECTOR/FAT表中文件起始簇号存放的扇区WORDFAT_STARTOFFSET/FAT表中文件起始簇号相对于每扇区的偏移量DWORDFAT_ENDSECTOR/FAT表中文件结束簇号存放的扇区WORDFAT_ENDOFFSET/FAT表中文件结束簇号相对于每扇区的偏移量BYTEFILE_LEFTSECTORS/文件结束簇内剩下的可写新数据的扇区的个数DWORDFILE_WRITESECTOR/文件结束簇内剩下的可写新数据的起始扇区DWORDFILE_NEWSECTORS/从新簇开始所需写入的扇区数DWORDFILE_NEWCLUSTERS/新写入数据的簇数FILE_T22FAT16初始化FAT16初始化主要读取主引导记录和第1分区引导扇区信息,并保存到FAT16_T类型变量中,算法流程如图5所示。图5FAT16初始化流程图FAT16初始化子程序中调用了底层SD卡读数据块函数SD_READBLOCK,其函数声明为BYTESD_READBLOCKDWORDSECTOR,BYTEBUFFER,用于读入地址为SECTOR扇区中的数据,暂存入BUFFER中,后文中SD_WRITEBLOCK函数功能定义与之类似。预编译函数FROM_BE_32和FROM_BE_16分别实现由高位向低位读取4字节和2字节数据,定义如下DEFINEFROM_BE_32XX/根据分区起始扇区地址读取第1分区的引导扇区IFSD_READBLOCKFATPARTITION_START,BUFFERRETURN06/每扇区字节数,第1分区偏移0X0B(11)处,2字节FATSECTOR_BYTESWORDFROM_BE_16WORD/每簇扇区数,第1分区偏移0X0D(13)处,1字节FATCLUSTER_SECTORSBUFFER13/保留扇区数,第1分区偏移0X0E(14)处,2字节FATRESERVE_SECTORSWORDFROM_BE_16WORD/FAT表备份个数,第1分区偏移0X10(16)处,1字节FATFATSBUFFER16/每FAT的扇区数,第1分区偏移0X16(22)处,2字节FATFAT_SECTORSWORDFROM_BE_16WORD/FAT的起始扇区,由第1分区开始,在保留扇区之后FATFAT_START0FATPARTITION_STARTFATRESERVE_SECTORSFATFAT_START1FATFAT_START0FATFAT_SECTORS/根目录的起始扇区,由FAT2开始,加上每FAT的扇区数FATROOT_STARTFATFAT_START1FATFAT_SECTORS/文件数据的起始扇区,由根目录的起始扇区根目录所占的32个扇区FATFILE_STARTFATROOT_START32/逆序查找FAT表,出现第1个内容为空的2字节所对应的簇号、扇区和偏移量FORI1I0I/从FAT表的最后一个扇区开始读扇区IFSD_READBLOCKFATFAT_START0I,BUFFERRETURN0/以2字节为单位FORJ256J0J/找到最后2个不为0的字节,根据扇区地址I和偏移量J,计算对应簇号IFBUFFER2J10|BUFFER2J20/FAT表中,逆序查找,出现的第1个内容为空的2字节所对应的簇号FATFAT_WRITECLUSTERWORDI256JQUIT0/FAT表中,逆序查找,出现的第1个内容为空的2字节所在的扇区FATFAT_WRITESECTORFATFAT_START0FATFAT_WRITECLUSTER/256/FAT表中,逆序查找,出现的第1个内容为空的2字节所在的扇区的偏移量FATFAT_WRITEOFFSETWORDFATFAT_WRITECLUSTERFATFAT_WRITECLUSTER/2562562/FAT表的结束簇号FATFAT_ENDCLUSTERWORDFATFAT_SECTORSFATSECTOR_BYTES/21/第1个文件编号/读根目录的起始扇区,确定根目录第1个文件的编号IFSD_READBLOCKFATROOT_START,BUFFERRETURN0/在根目录的起始扇区内以32字节为单位查找起始簇为2的第一个文件记录项/起始簇号在文件项偏移量26处QUIT1FORI0IROOT_STARTNUMBYTEI/找到该项后即退出QUIT0/文件总个数/计算在写扇区偏移量之前,FAT表中共有多少个0XFFFF,去掉1则为总文件个数/根据FAT_WRITESECTOR和FAT_WRITEOFFSET可确定循环查找次数FATFILES_NUM0FORI0IFAT_WRITESECTORFATFAT_START0I/依次读FAT扇区IFSD_READBLOCKFATFAT_START0I,BUFFERRETURN0/以2字节为单位,顺序查找0XFFFF,并记录其个数FORJ0JFILES_NUM/文件个数加1/去掉最开始的一个0XFFFF,即得文件总个数FATFILES_NUM/初始化时没有文件打开FATOPENFILE0RETURN123打开和创建文件打开和创建文件采用一个函数来实现,首先根据读入的文件名查找根目录,若有匹配项则打开文件,否则创建一个新文件,算法流程如图6所示。图6打开和创建文件流程图打开和创建文件子程序代码如下BYTEOPEN_FILEFILE_TFILE,FAT16_TFAT,BYTEBUFFER,BYTENAMEDWORDI,J,M,NBYTEQUIT1BYTEFATQUIT18BYTENEWFILE1/新文件标志,初始值为1WORDNEXTCLUSTER/暂存下一个簇号DWORDFAT_NEXTSECTOR/暂存FAT表中文件下一个簇号存放的扇区WORDFAT_NEXTOFFSET/暂存FAT表中文件下一个簇号相对于每扇区的偏移量/读入文件名,首先将文件名清空FORI0INAMEIFORI0NAMEI/读入8位文件名/读入3位扩展名IFILENAME8NAMEIFILENAME9NAMEI1FILENAME10NAMEI2/在根目录中查找是否有文件项匹配FORI0IROOT_STARTI,BUFFERRETURN0/以32字节为单位,查找文件名是否为0FORJ0JNAME,/文件属性/创建时间FILETIMEWORDFROM_BE_16WORD/创建日期FILEDATEWORDFROM_BE_16WORD/文件起始簇号FILESTARTCLUSTERWORDFROM_BE_16WORD/文件长度FILESIZEFROM_BE_32DWORD/文件所占扇区的个数IFFILESIZEFATSECTOR_BYTESFILESECTORSFILESIZE/FATSECTOR_BYTESELSEFILESECTORSFILESIZE/FATSECTOR_BYTES1/文件所占簇的个数IFFILESECTORSFATCLUSTER_SECTORSFILECLUSTERSFILESECTORS/FATCLUSTER_SECTORSELSEFILECLUSTERSFILESECTORS/FATCLUSTER_SECTORS1/文件结束簇号/由文件的起始簇号查FAT表得出文件的结束簇号/计算FAT表中文件起始簇号存放的扇区和偏移量FILEFAT_STARTSECTORDWORDFATFAT_START0FILESTARTCLUSTER/2569FILEFAT_STARTOFFSETWORDFILESTARTCLUSTERFILESTARTCLUSTER/2562562/设置查找扇区和偏移量初值FAT_NEXTSECTORFILEFAT_STARTSECTORFAT_NEXTOFFSETFILEFAT_STARTOFFSET/查找FAT表,从起始簇号所在的扇区开始M代表扇区,N代表偏移FORM0MFAT_SECTORSM/如果M不等于文件起始簇和下一个簇所在扇区,则跳过下面比较IFFAT_NEXTSECTORFATFAT_START0MCONTINUE/在FAT表中,从文件起始簇所在扇区开始读扇区IFSD_READBLOCKFAT_NEXTSECTOR,BUFFERRETURN0/以2字节为单位遍历FAT表FORN0NFAT_START0NEXTCLUSTER/256FAT_NEXTOFFSETWORDNEXTCLUSTERNEXTCLUSTER/2562562/否则,是结束簇,读结束簇的簇号,为最后一个簇号/可根据I和J的值推算ELSEFILEENDCLUSTERWORDM256N/文件结束簇号FATQUIT0/根目录中文件记录项编号,用户第1个文件从2开始FILEROOT_NUMBERBYTE16IJNEWFILE0/不是新文件QUIT0/如果没有文件名匹配,则创建一个新文件IFNEWFILEFILEATTRIBUTE0/文件属性FILETIME0/创建时间FILEDATE0/创建日期/若为新文件,则FAT写簇号FAT_WRITECLUSTER即为其起始簇号FILESTARTCLUSTERFATFAT_WRITECLUSTER/文件起始簇号FILESIZE0/文件长度FILESECTORS0/文件所占扇区的个数FILECLUSTERS0/文件所占簇的个数FILEENDCLUSTERFILESTARTCLUSTER/文件结束簇号10/根目录中文件记录项编号FILEROOT_NUMBERBYTEFATROOT_STARTNUMFATFILES_NUM/根据文件起始簇号,根目录的记录项号,计算文件FAT表、/根目录和数据区的相关信息,已有文件和新文件的计算一致/FAT表/FAT表中文件起始簇号存放的扇区FILEFAT_STARTSECTORFATFAT_START0FILESTARTCLUSTER/256/FAT表中文件起始簇号相对于每扇区的偏移量FILEFAT_STARTOFFSETWORDFILESTARTCLUSTERFILESTARTCLUSTER/2562562/FAT表中文件结束簇号存放的扇区FILEFAT_ENDSECTORFATFAT_START0FILEENDCLUSTER/256/FAT表中文件结束簇号相对于每扇区的偏移量FILEFAT_ENDOFFSETWORDFILEENDCLUSTERFILEENDCLUSTER/2562562/根目录/每项文件存放的起始扇区,根据根目录项的编号计算,/32字节为单位,故512/3216FILEROOT_SECTORFATROOT_STARTFILEROOT_NUMBER/FATCLUSTER_SECTORS/根目录项,每项文件存放在该扇区的偏移量FILEROOT_OFFSETWORDFILEROOT_NUMBERFILEROOT_NUMBER/FATCLUSTER_SECTORSFATCLUSTER_SECTORS32/文件数据区/文件结束簇内可写新数据的扇区的个数/若文件的扇区数是每簇扇区数的整数倍,则剩余扇区数为每簇扇区数IFFILESECTORSFATCLUSTER_SECTORSFILEFILE_LEFTSECTORSBYTEFATCLUSTER_SECTORSELSEFILEFILE_LEFTSECTORSBYTEFILECLUSTERSFATCLUSTER_SECTORSFILESECTORS/文件结束簇内可写新数据的起始扇区FILEFILE_WRITESECTORDWORDFATFILE_STARTFILEENDCLUSTER2FATCLUSTER_SECTORSFATCLUSTER_SECTORSFILEFILE_LEFTSECTORS/打开文件时,置0FILEFILE_NEWSECTORS0FILEFILE_NEWCLUSTERS0/如果是新文件,则相应修改FAT表和根目录记录项IFNEWFILE/修改FAT表,首先读FAT表写扇区FATFAT_WRITESECTOR,暂存入BUFFERIFSD_READBLOCKFATFAT_WRITESECTOR,BUFFERRETURN0/将2字节0XFFFF写入FAT表相应偏移量处,包括备份FAT表11FORI0IFATSI/将2字节0XFFFF存入BUFFERWORD/将修改写入FATSD_WRITEBLOCKFATFAT_WRITESECTORFATFAT_SECTORSI,BUFFER/相应修改FAT表的写簇号、扇区位置和偏移/加入2字节数据后,写簇号相应自加1FATFAT_WRITECLUSTER/将新文件的信息写入根目录的文件记录项,首先读取文件记录IFSD_READBLOCKFILEROOT_SECTOR,BUFFERRETURN0/将11位文件名存入BUFFER相应记录项偏移处BYTECPY/将文件的首簇号存入相应记录项偏移量1A,1B(26,27)处,2字节WORD/将文件长度存入相应记录项偏移量1C,1D,1E,1F(2831)处,4字节DWORD/将读入的数据写入文件根目录SD_WRITEBLOCKFILEROOT_SECTOR,BUFFERFATFILES_NUM/文件总数加1/有文件打开FATOPENFILE1RETURN124多扇区数据读写多扇区数据的读写是在打开文件的基础上,以扇区为单位读写文件,可连续读写多个扇区数据,同时写入文件的属性、日期和时间。这里主要讨论了写数据的算法流程,如图7所示,读数据与之类似,不再赘述。12图7写文件流程图多扇区数据写子程序代码如下BYTEWRITE_FILEFILE_TFILE,FAT16_TFAT,BYTEATTRIBUTE,WORDTIME,WORDDATE,DWORDSIZE_S,BYTEBUFFERWORDI,JBYTEQUIT1BYTENAMEMATCH0/判断是否有文件名匹配BYTETEMP512/暂存1扇区数据BYTEFATWRITE/是否修改FAT表标志,1表示需修改/暂存变量WORDFAT_WRITECLUSTERFATFAT_WRITECLUSTER/暂存写簇号WORDENDCLUSTERFILEENDCLUSTER/暂存文件结束簇号BYTEFILE_LEFTSECTORSFILEFILE_LEFTSECTORS/暂存剩余扇区个数DWORDFILE_WRITESECTORFILEFILE_WRITESECTOR/暂存写剩余扇区地址/文件新增加簇的起始扇区DWORDFILE_NEWSECTORDWORDFATFILE_STARTFAT_WRITECLUSTER2FATCLUSTER_SECTORSDWORDFAT_WRITESECTORFATFAT_WRITESECTOR/暂存FAT表写入扇区WORDFAT_WRITEOFFSETFATFAT_WRITEOFFSET/暂存FAT表写入扇区偏移量DWORDFAT_ENDSECTORFILEFAT_ENDSECTOR/暂存FAT表文件结束簇号扇区地址/暂存FAT表中文件结束簇号相对于每扇区的偏移量WORDFAT_ENDOFFSETFILEFAT_ENDOFFSETIFFATOPENFILERETURN0/若无文件打开,或SD卡已满,不执行写操作,退出/写入文件基本信息FILEATTRIBUTEATTRIBUTE/文件属性FILETIMETIME/创建时间FILEDATEDATE/创建日期/文件长度,在原基础上增加,应是512的整数倍FILESIZEFILESECTORSSIZE_SFATSECTOR_BYTES/根据写入数据扇区数SIZE_S,设置文件数据写入位置/首先将写入数据扇区数与文件剩余扇区数进行比较/若写入扇区数小于等于剩余扇区数,则新簇写入扇区数为0,新写入数据簇数为0/文件结束簇不变,写簇号不变,不需要修改FAT表,仅修改根目录中的文件长度IFSIZE_SFILE_NEWSECTORS0/新增加扇区数FILEFILE_NEWCLUSTERS0/新增加簇数/修改文件剩余扇区数IFSIZE_SFILE_LEFTSECTORS/若写入扇区等于剩余扇区,则新剩余扇区应为16FILEFILE_LEFTSECTORSFATCLUSTER_SECTORSELSE13FILEFILE_LEFTSECTORSBYTEFILEFILE_LEFTSECTORSSIZE_SFATWRITE0/不需要修改FAT表,直接修改文件目录项即可ELSE/否则,若写入扇区数大于剩余扇区数,需要计算新簇写入扇区数和簇数FILEFILE_NEWSECTORSSIZE_SFILE_LEFTSECTORS/新增加扇区数/新增加簇数IFFILEFILE_NEWSECTORSFATCLUSTER_SECTORSFILEFILE_NEWCLUSTERSFILEFILE_NEWSECTORS/FATCLUSTER_SECTORSELSEFILEFILE_NEWCLUSTERSFILEFILE_NEWSECTORS/FATCLUSTER_SECTORS1/修改文件剩余扇区数,若新增扇区数是16的整数倍,则新剩余扇区数为16IFFILEFILE_NEWSECTORSFATCLUSTER_SECTORSFILEFILE_LEFTSECTORSBYTEFATCLUSTER_SECTORSELSEFILEFILE_LEFTSECTORSBYTEFATCLUSTER_SECTORSFILEFILE_NEWSECTORSFATCLUSTER_SECTORSFATFAT_WRITECLUSTERFILEFILE_NEWCLUSTERS/修改写簇号FILEENDCLUSTERWORDFATFAT_WRITECLUSTER1/修改文件结束簇号FATWRITE1/需相应修改FAT表/判断写文件是否超出SD存储容量IFFATFAT_WRITECLUSTERFATFAT_ENDCLUSTERRETURN0/修改文件结束簇内可写新数据的起始扇区IFSIZE_SFATCLUSTER_SECTORSFILEFILE_WRITESECTORDWORDFATFILE_STARTFILEENDCLUSTER2FATCLUSTER_SECTORSFATCLUSTER_SECTORSELSEFILEFILE_WRITESECTORDWORDFATFILE_STARTFILEENDCLUSTER2FATCLUSTER_SECTORSFATCLUSTER_SECTORSFILEFILE_LEFTSECTORS/如果写入数据增加簇,则修改FAT表,包括FAT1和FAT2IFFATWRITE/首先找到原文件FAT表中最后一个簇号所在的扇区FAT_ENDSECTOR,将数据读出IFSD_READBLOCKFAT_ENDSECTOR,TEMPRETURN0/在原文件结束簇号偏移量FAT_ENDOFFSET处将数据修改成下一簇号,/即原写簇号FAT_WRITECLUSTERWORD/将修改后的值写回FAT表,包括FAT1和FAT2FORI0IFATSISD_WRITEBLOCKFAT_ENDSECTORFATFAT_SECTORSI,TEMP/根据新增簇数,修改FAT表FORI0IFILE_NEWCLUSTERS1I/在写扇区FAT_WRITESECTOR处读出FAT表IFSD_READBLOCKFAT_WRITESECTOR,TEMPRETURN0FAT_WRITECLUSTER/写簇号顺序加1/在写偏移量处修改写簇号14WORD/将修改后的值写回FAT表,包括FAT1和FAT2FORJ0JFATSJSD_WRITEBLOCKFAT_WRITESECTORFATFAT_SECTORSJ,TEMP/根据新写入簇号,计算写入扇区和偏移量FAT_WRITESECTORFATFAT_START0FAT_WRITECLUSTER/256FAT_WRITEOFFSETWORDFAT_WRITECLUSTERFAT_WRITECLUSTER/2562562/写入文件结束标志0XFFFFIFSD_READBLOCKFAT_WRITESECTOR,TEMPRETURN0/读结束扇区WORD/将修改后的值写回FAT表,包括FAT1和FAT2FORI0IFATSISD_WRITEBLOCKFAT_WRITESECTORFATFAT_SECTORSI,TEMP/修改根目录的文件记录项IFSD_READBLOCKFILEROOT_SECTOR,TEMPRETURN0/首先读取文件记录/将文件属性存入相应记录项偏移量0X0B(11)处,1字节TEMPFILEROOT_OFFSET11FILEATTRIBUTE/将文件时间存入相应记录项偏移量0X16,0X17(22,23)处,2字节WORD/将文件日期存入相应记录项偏移量0X18,0X19(24,25)处,2字节WORD/将文件长度存入相应记录项偏移量1C,1D,1E,1F(2831)处,4字节DWORD/将读入的数据写入文件根目录SD_WRITEBLOCKFILEROOT_SECTOR,TEMP/将数据写入文件数据区/若写入扇区数小于且等于剩余扇区数,即不需要修改FAT表时IFFATWRITE/直接写入文件的扇区数SIZE_SFORI0ISECTOR_BYTESJTEMPJBUFFERSD_WRITEBLOCKFILE_WRITESECTOR,TEMPFILE_WRITESECTORELSE/若写入扇区数大于剩余扇区数/首先将原剩余扇区数FILE_LEFTSECTORS写满FORI0ISECTOR_BYTESJTEMPJBUFFERSD_WRITEBLOCKFILE_WRITESECTOR,TEMPFILE_WRITESECTOR/再从原写入簇计算得到的写起始扇区开始,写新增扇区数FILEFILE_NEWSECTORSFORI0IFILE_NEWSECTORSI15/将数据分割成以扇区为单位,从原写入扇区开始依次写入FORJ0JSECTOR_BYTESJTEMPJBUFFERSD_WRITEBLOCKFILE_NEWSECTOR,TEMPFILE_NEWSECTOR/写结束后关闭文件FATOPENFILE0RETURN13设计小结本文基于FREESCALE公司MCF51QE128微控制器,深入探讨了SD卡上FAT16文件系统的存储原则,给出了实现方案。软件算法上,对单扇区数据读写进行改进,实现了连续多个扇区数据的读写,大大提高了文件的读写效率,特别适用于数据量较大的视频、音频数据采集系统的文件存储。随着SD卡的快速流行,在此类存储设备中引入文件系统将得到更加广泛的应用。参考文献1DOBIASH,JACKFAT16STRUCTUREINFORMATIONHTTP/HOMETELEPORTCOM/BRAINY/FAT16HTM2ALLANEVANSAPPLICATIONNOTE,FAT16INTERFACEFORMSP430,20043童静基于MCF51QE128的SD卡接口设计单片机与嵌入式系统应用,200916大学毕业论文规范一、结构要求一份完整的本科生毕业论文档案袋内应包含两个部分内容1、毕业论文装订册;2、毕业论文附件材料。二、版面要求A4纸张,其中页边距上3CM,下、左25CM,右2CM;页脚175CM;每册的封面与封底需用白色的铜版纸张规格120G150G印制。三、毕业论文装订册组成部分与要求(一)封面。论文题目不得超过20个字,要简练、准确,可分为两行。(二)内容。1、毕业论文任务书。任务书由指导教师填写,经系部审查签字后生效。2、毕业论文开题报告;3、毕业论文学生申请答辩表与指导教师毕业论文评审表;4、毕业论文评阅人评审表;5、毕业论文答辩表;6、毕业论文答辩记录表;7、毕业论文成绩评定总表;8、学位论文原创性声明及版权使用授权书;9、中英文题目与作者;10、中英文内容摘要和关键词。(1)摘要是论文内容的简要陈述,应尽量反映论文的主要信息,内容包括研究目的、方法、成果和结论,不含图表,不加注释,具有独立性和完整性。中文摘要一般为200400字左右,英文摘要应与中文摘要内容完全相同。(2)关键词是反映毕业论文主题内容的名词,是供检索使用的。主题词条应为通用技术词汇,不得自造关键词。关键词一般为35个,按词条外延层次(学科目录分类),由高至低顺序排列。关键词排在摘要正文部分下方。11、目录;目录按三级标题编写,要求层次清晰,且要与正文标题一致。主要包括绪论、正文主体、结论、致谢、主要参考文献及附录等。12、正文。论文正文部分包括绪论(或前言、序言)、论文主体及结论。(1)绪论。综合评述前人工作,说明论文工作的选题目的和意义,国内外文献综述,以及论文所要研究的内容。(2)论文主体。论文的主要组成部分,主要包括选题背景、方案论证、过程论述、结果分析、结论或总结等内容。要求层次清楚,文字简练、通顺,重点突出,毕业论文文字数,本科生论文一般应不少于5000字(或20个页码),专科生论文不少于3000字。17中文论文撰写通行的题序层次采用以下格式1111111111(3)结论(或结束语)。作为单独一章排列,但标题前不加“第XXX章”字样。结论是整个论文的总结,应以简练的文字说明论文所做的工作,一般不超过两页。13、参考文献及引用资料目录(规范格式见件四)。14、致谢。对导师和给予指导或协助完成毕业论文工作的组织和个人表示感谢。文字要简洁、实事求是,切忌浮夸和庸俗之词。15、附录。三封底。四、毕业论文附件材料组成部分与要求(见附件五)(一)封面;(二)内容目录按二级标题编写1、英文文献翻译11英文文献原文(要求不少于3000个单词)12中文翻译2、专业阅读书目。(10篇,每篇不少于300字。)21书目名一22书目名二(三)封底。附一毕业论文系列表格;附二毕业论文中英文封面;附三毕业论文正文格式;附四规范的参考文献格式。附五毕业论文附件材料。181毕业论文任务书系部指导教师职称学生姓名专业班级学号论文题目论文内容目标及进度要求指导教师签名年月日系部审核此表由指导教师填写由所在系部审核1921毕业论文学生开题报告课题名称课题类型指导教师学生姓名学号专业班级本课题的研究现状、研究目的及意义题类型A理论探究型B实践应用型2022本课题的研究内容本课题研究的实施方案、进度安排2123已查阅的主要参考文献指导教师意见指导教师签名年月日223毕业论文学生申请答辩表课题名称指导教师职称申请理由学生所在系部专业班级学号学生签名日期毕业论文指导教师评审表序号评分项目(外国语类)满分评分1工作量152文献阅读与文献综述103创新能力与学术水平254论证能力255文字表达106学习态度与规范要求15总分100评语(是否同意参加答辩)指导教师签名另附毕业设计(论文)指导记录册年月日234毕业论文评阅人评审表学生姓名专业班级学号论文题目评阅人评阅人职称序号评分项目(外国语类)满分评分1工作量152文献阅读与文献综述103创新能力与学术水平254论证能力255文字表达106学习态度与规范要求15总分100评语评阅人签名年月日245毕业论文答辩表学生姓名专业班级学号论文题目序号评审项目指标满分评分1报告内容思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论有应用价值。402报告过程准备工作充分,时间符合要求。103创新对前人工作有改进或突破,或有独特见解。104答辩回答问题有理论依据,基本概念清楚。主要问题回答准确,深入。40总分100答辩组评语答辩组组长(签字)年月日答辩委员会意见答辩委员会负责人(签字)年月日2561毕业论文答辩记录表学生姓名专业班级学号论文题目答辩时间答辩地点答辩委员会名单问题问题1提问人回答(要点)问题问题2提问人回答(要点)问题问题3提问人回答(要点)记录人签名(不足加附页)2662问题问题4提问人回答(要点)问题问题5提问人回答(要点)问题问题6提问人回答(要点)问题问题7提问人回答(要点)问题问题8提问人回答(要点)记录人签名277毕业论文成绩评定总表学生姓名专业班级毕业论文题目注成绩评定由指导教师、评阅人和答辩组分别给分以百分记,最后按“优90100”、“良8089”、“中7079”、“及格6069”、“不及格60以下”评定等级。其中,指导教师评定成绩占40,评阅人评定成绩占20,答辩组评定成绩占40。成绩类别成绩评定指导教师评定成绩评阅人评定成绩答辩组评定成绩总评成绩402040评定等级28附二(空1行)中文封面示例毕业论文(1号宋体居中)(空1行)XXXXXXXXXXXXXXX(2号黑体居中,标题行间距为32磅)(宋体小3)学生姓名XXXXXX学号XXXXXX所在系部XXX专业班级XXXXX指导教师XXX教授(职称)日期二XX年X月29英文扉页示例WRITINGTHETITLEOFTHEPAPERINENGLISHHERE(TIMESNEWROMAN2号粗体居中)BYNAMEJUNE20XX(DATE)(TIMESNEWROMAN小2号居中)30学位论文原创性声明本人郑重声明所呈交的学位论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。作者签名年月日学位论文版权使用授权书本学位论文作者完全了解学院有关保管、使用学位论文的规定,同意学院保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密,在年解密后适用本授权书。2、不保密。(请在以上相应方框内打“”)作者签名年月日导师签名年月日31附三(空1行)摘要(小2号黑体,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距)(空1行)(小4号宋体,15倍行距)。(200400字左右)(空1行)关键词(小4号宋体)(小4号黑体)32(空1行)ABSTRACT(TIMESNEWROMAN小2号,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距)(空1行)(TIMESNEWROMAN小4号字体,15倍行距)(空1行)KEYWORDS(TIMESNEWROMAN,小4号字体)(TIMESNEWROMAN小4号字体,加粗)33(空1行)CONTENTS(小2号TIMESNEWROMAN,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距)(空1行)摘要(小4号宋体,行距18磅,一级目录加粗,下同)IABSTRACT(小4号TIMESNEWROMAN,行距18磅,一级目录加粗,下同)II1INTRODUCTION(小4号TIMESNEWROMAN,行距18磅,一级目录加粗,下同)12(正文第2章,一级目录)221(正文第2章第1条,二级目录)Y211(三级目录)Y212(三级目录)Y22(正文第2章第2条,二级目录)Y221(三级目录)Y222(三级目录)Y2X(正文第2章第X条,二级目录)Y3(正文第3章,一级目录)Y(略)CONCLUSION(一级目录)YACKNOWLEDGMENTS(一级目录)YBIBLIOGRAPHY(一级目录)YAPPENDIXA(需要时)Y34APPENDIXB(需要时)Y注1目录按三级标题编写;2Y表示具体的数字。35(空1行)1INTRODUCTION(可作为正文第1章标题,小2号TIMESNEWROMAN,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距)(小4号TIMESNEWROMAN,15倍行距。下同)12(作为正文第2章标题,小2号字体,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距)(TIMESNEWROMAN字体,小4号,15倍行距)11(作为正文2级标题,用小3号字体)(小4号TIMESNEWROMAN,15倍行距)111(作为正文3级标题,用4号字体,不加粗)(小4号TIMESNEWROMAN,15倍行距)(正文各1级标题之间需要另新起一页)(空1行)1对论文正文中某一特定内容的进一步解释或补充说明性的注释,置于本页地脚,前面用圈码标识。小5号TIMESNEWROMAN,单倍行距,下同。36注1引用参考文献的内容请予以注明;2正文各页的格式请以此页为标准复制。37(空1行)CONCLUSION(小2号TIMESNEWROMAN,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距)(空1行)(小4号TIMESNEWROMAN,15倍行距)38(空1行)BIBLIOGRAPHY(用小2号字体,加粗,居中,并留出上下间距为段前05行,段后05行,2倍行距。)(空1行)小4号TIMESNEWROMAN或宋体,15倍行距;标点符号使用半角实心。英文文献在前,中文文献在后,以AZ字母顺序排序1CONNORUKASENAVAGEPEERRESPONSEGROUPSINESLWRITINGCLASSESHOWMUCHIMPACTONREVISIONJJOURNALOFSECONDLANGUAGEWRITING1994332572762JTHOMASRUSSELLWRONALDLANEKLEPPNERSADVERTISINGPROCEDUR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 15473-2025核电厂安全级静止式蓄电池充电器、逆变器和不间断电源系统的鉴定
- 森林灭火知识培训方案课件
- 森林消防装备维护保养课件
- 4.3.2发生在肺内的气体交换 解码呼吸的“动力之源”肺与外界的气体交换课件(内嵌视频)人教版(2024)七年级生物下册
- 桥梁知识培训资料课件
- 2025年高校化学实验岗位招聘考试备考策略与热点解析
- 2025年注册验船师资格考试(B级练习题)能力提高训练题及答案一
- 2025年茶艺师初级笔试核心考点复习
- 2025年财务管理岗位招聘面试宝典预测题解析与实战案例
- 2025年公务员行政职业能力测试全真模拟卷
- 期中考试考试安排及流程说明
- 铜矿采选工程可行性研究报告
- 2025年秋季学期学校全面工作计划
- 收费站文明服务培训
- 战术基础动作课件教学
- 2024年医师定期考核超声专业试题及答案
- 充电桩行业知识培训总结课件
- 2024-2030年钻石行业市场调研及前景趋势预测报告
- 免疫性脑炎护理查房
- 老高糖健康管理培训课件
- 2025年卫生人才面试题目及答案
评论
0/150
提交评论