機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
單片機與MMC卡的接口
單片機與MMC卡的接口
 更新時間:2008-8-18 14:58:40  點擊數(shù):80
【字體: 字體顏色
代碼
  1. typedef struct{   
  2.   u8 FileName[8]; //文件名,不足8字節(jié)用空格補充   
  3.   u8 ExtName[3]; //擴(kuò)展名   
  4.   u8 attribute; //屬性,典型值:存檔(0x20)、卷標(biāo)(0x08)   
  5.   u8 reserved[10]; //保留   
  6.   u16 time; //time=Hr*2048+Min*32+Sec+2   
  7.   u16 date; //date=(Yr-1980)*512+Mon*32+Day   
  8.   u16 StartCluster; //起始簇號   
  9.   u32 FileLength; //文件長度   
  10. }DIR_tag;  

    文件名一般占用8字節(jié),長的文件名需要用resetx,ed[]數(shù)組。文件名的首字節(jié)又表明該文件的狀態(tài),00H表示該目錄項未使用,E5H表示該文件(或目錄)已被刪除。創(chuàng)建目錄時,屬性值設(shè)置為10H(表示子目錄),文件長度為0。

3.2 文件的讀寫
    MMC卡上文件都是以簇為單位存取的。當(dāng)讀取MMC卡上的文件時,首先要根據(jù)文件名查找到該文件的目錄登記項。根據(jù)目錄登記項中的起始簇號既可找到文件在數(shù)據(jù)區(qū)DATA中第1簇的內(nèi)容,又可在FAT表中找到第2個簇號。根據(jù)第2個簇號又能找到第2簇的內(nèi)容和FAT表中的第3個簇號。這樣,就可以根據(jù)FAT表中的簇號讀取到全部文件數(shù)據(jù)。寫文件時要保證FAT1和FAT2中內(nèi)容的一致性,即對兩塊都要進(jìn)行同樣的寫操作。對于FATl6,可以由下面的公式計算出數(shù)據(jù)起始邏輯扇區(qū)號:
    起始邏輯扇區(qū)=隱藏扇區(qū)數(shù)+1+2*每FAT扇區(qū)數(shù)+FDT扇區(qū)數(shù)+(起始簇號-2)*每簇扇區(qū)數(shù)
    從表1可知,MMC卡上隱藏的扇區(qū)數(shù)為0,每個FAT占用243個扇區(qū),F(xiàn)DT固定占用32個扇區(qū)。寫文件的相關(guān)代碼如下(設(shè)文件長度小于512字節(jié)):

代碼
  1. void file_write(DIR_tag  *file_tag,char *data){   
  2.     //data為指向數(shù)據(jù)的指針   
  3.     u16  j,offset=file_tag.StartCluster*2;   
  4.     //FAT16用16位表示1個簇   
  5.     mmc_read block(&sdc,fat1_addr+offset/512,mmc_buffer);    //讀取起始簇號所在的塊   
  6.     mmc_buffer[offset%512]=0xff;//文件結(jié)束標(biāo)志ff ff   
  7.     mme_buffer[offset%512+1]=0xff;   
  8.     mmc_write_block(&sdc,fat1_addr+offset/512,mmc_buffer);    //寫FAT1   
  9.   mmc_write_block(&sdc,fat2_addr+offset/512,mmc_buffer);    //寫FAT2,與FAT1同   
  10.   for(j=0,j<file_tag.FileLength;j++) mmc_buffer[i]=data[j];   
  11.   mmc_write_block(&sdc,519+(file_tag.StartCluster-2),mmc_buffer);    //寫入數(shù)據(jù)   
  12. }  

3.3 文件的刪除
    文件的刪除也是對MMC卡上文件管理的一個重要方面。刪除文件時,并不涉及數(shù)據(jù)區(qū)的操作,只須在文件的目錄登記項上作一個刪除標(biāo)記,并把文件在FAT表中所占用的簇標(biāo)記為“空簇”。刪除文件的代碼如下:

  • 上一篇: 深入嵌入式系統(tǒng)的 BootLoader
  • 下一篇: ARM Linux 中斷分析
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1