- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
HCS12X单片机的SD卡FAT文件系统读写设计
3.6 应用层函数接口
FAT文件系统向应用层设计了如下几个初级程序接口:Get Filelnfo(UINT8*F Info,FileInfo*TempFilelnfo)(获取文件信息),OutPut _RootFileinfo(void)(输出根目录文件信息),DirOr(UINT8 FileAttrib)(判断目录),Get Next Cluster(UINTl6 TempCluster)(获取下一文件簇信息),OutPutFileCluster(UINTl6 TempStart Cluster)(输出文件簇地址),OutPutFile(UINTl6 Temp StartCluster)(输出文件内容),ShowClusterContent(UINTl6 TempCluster)(输出簇内容)。通过这些初级程序接口实现了OpenDir(UINTl6 TempStartCluster)(目录打开),FileDelete(文件删除),FileDataRead(文件数据读取),FileCreate(UINTl6 TempStartCluster,UINT32TempFileLength)(文件创建)等功能。
3.6.1 目录读取及文件信息获取
FAT文件系统的具体文件和目录项都是通过读取ROOT目录来进行查找的,所以FAT的文件排布是以树形的结构排布。对于FAT来说,目录项与文件项在同一目录中是同样占32个字节的属性项。研究中使用了1个数据结构Filelnfo来存储文件信息,并通过if(Temp_F_Info[0x0b]&0x l0)来分辨文件与目录。
在FAT文件系统中,文件是以簇的形式保存在SD卡中的,簇的排布是不连续的,1个文件如果大于1个簇的话,则要通过FAT表来查找该文件所有簇所在的位置,从而找到整个文件。目录一般只占有1个簇的大小,在FAT表中等同于小于1个簇的小文件,值显示为FF。
目录是以文件的形式存储在父目录中的,目录中的文件信息记录了该文件的起始簇以及文件的大小,知道了文件的起始簇,通过FAT表中的信息可以很方便地找到文件的下一个簇的位置,并由文件的大小判断出文件的结束位置。
3.6.2 文件的读写
在FAT文件系统中,读取文件只需要知道该文件的起始簇以及大小便可以很方便地得到整个文件的信息。读取步骤是:获取根目录信息,通过根目录信息找到下一层目录所在簇位置,通过下一层目录信息递归找到文件所在目录,读取文件信息属性,得到文件的起始簇位置和文件大小,通过FAT表递归查找到文件的全部簇地址,最终以FF结尾;根据文件大小判断文件的结束位置,最后输出整个文件。
文件的创建和写入则是通过FAT表查找未被使用的空簇(值为00),写满1簇之后再查找下一未被使用的空簇,并同时更新FAT1表和FAT2表。然后在文件所被创建的目录信息中添加文件信息,最终实现文件的创建。
3.6.3 文件的删除
在FAT文件系统中,对文件的删除不需要把整个文件信息全部清除,只需要清除FAT表中的文件簇信息以及目录中的文件信息,避免了对SD卡的频繁读写,同时也节省了时间。
结语
本设计将SD卡的存储方式应用到单片机系统中,简化了复杂的文件数据的存储设计,减小了系统的尺寸,提高了系统的可靠性,使得单片机对文件的读出和存取简单易行。对FAT裁减实现了嵌入式文件系统,提高了系统的存储能力,同时也增强了单片机与PC级之间的通信能力,简化了繁琐的调试。采用Freescale 16位单片机MC9S12XSl28MAA的串行外设接口SPI对SD卡进行访问,加快了整个系统的设计进度。实践证明,该设计读写SD卡文件信息的速度以及稳定性满足调试要求。该设计只需对底层驱动进行简单修改就可直接应用于MMC卡、Micro SD卡等其他存储介质上。
作者:时 尧 天津大学 来源:电子设计工程
闂備礁缍婂ḿ褔顢栭崱妞绘敠闁逞屽墮椤潡宕瑰☉娆愮彇闂佹悶鍊曞ù鐑藉箯鐎n喖绠查柟浼存涧閹線姊虹化鏇熸珖妞ゃ垹锕、娆撳礋椤栨碍鐎┑鐐叉閸ㄧ喖寮婚敓锟� | More...
闂備礁缍婂ḿ褔顢栭崱妞绘敠闁逞屽墮椤潡宕瑰☉娆愮彇闂佹悶鍊曞ù鐑藉箯鐎n喖绠查柟浼存涧閹線姊虹化鏇熸珖妞ゃ垹锕、娆撳礋椤撶喎鐝伴梺鍛婃寙閳ь剟寮婚敓锟�
闂備礁鎲¢悧鏇犵礊婵犲洤鍌ㄩ柕鍫濐槹閸嬨劌霉閿濆懎鏆熼柣鏂挎嚇閹鎷呴悷鎵槰濡炪倖鎸婚幃鍌氱暦閾忚鍏滈柛婊€绀侀弫鎶芥煟閻樺弶鎼愬褌绮欓崺銏ゆ晸閿燂拷
闂備礁缍婂ḿ褔顢栭崱妞绘敠闁逞屽墮椤潡宕瑰☉娆愮彇闂佹悶鍊曞ù鐑藉箯鐎n喖绠查柟浼存涧閹線姊虹化鏇熸珖妞ゃ垹锕、娆撳礋椤掑倿妾┑掳鍊曠€氬嘲螞閿燂拷
闂佽绻愮换鎰偓姘嵆閵嗗倻鎹勬笟顖氭櫊闂侀潧锛忛埀顒勫蓟閵堝鍋ㄦい鏍ㄦ皑婢ф洟鏌i幘瑙勭《闁瑰嘲顑夐、姗€鎮滈崱姗嗗敹闂佽崵鍠嶇欢銈夊箯閿燂拷