新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AT89C52單片機的SD卡讀寫設計

        基于AT89C52單片機的SD卡讀寫設計

        作者:武漢理工大學自動化學院 蘇義鑫 程 敏 武漢大學 何力 時間:2008-08-04 來源:中電網 收藏

          卡的初始化

        本文引用地址:http://www.104case.com/article/86566.htm

          對卡進行操作首先要對卡進行初始化,初始化的過程中設置SD卡工作在SPI模式,其流程圖如圖3所示。

         

          在復位成功之后可以通過CMD55和ACMD41判斷當前電壓是否在工作范圍內。主機還可以繼續通過CMD10讀取SD卡的CID寄存器,通過CMD16設置數據Block長度,通過CMD9讀取卡的CSD寄存器。從CSD寄存器中,主機可獲知卡容量,支持的命令集等重要參數。SD卡初始化的C語言程序如下:

          unsigned char SD_Init(void)

          { unsigned char retry,temp;

          unsigned char i;

          for (i=0;i<0x0f;i++)

          { SPI_TransferByte(0xff); //延遲74個以上的時鐘

          }

          SD_Enable(); //開片選

          SPI_TransferByte(SD_RESET); //發送復位命令

          SPI_TransferByte(0x00);

          SPI_TransferByte(0x00);

          SPI_TransferByte(0x00);

          SPI_TransferByte(0x00);

          SPI_TransferByte(0x95);

          SPI_TransferByte(0xff);

          SPI_TransferByte(0xff);

          retry=0;

          do{ temp=Write_Command_SD(SD_INIT,0);

          //發送初始化命令

          retry++;

          if(retry==100) //重試100次

          {SD_Disable(); //關片選

          return(INIT_CMD1_ERROR);

          //如果重試100次失敗返回錯誤號

          }

          }while(temp!=0);

          SD_Disable(); //關片選

          return(TRUE); //返回成功

          }

          數據塊的讀寫

          完成SD卡的初始化之后即可進行它的讀寫操作。SD卡的讀寫操作都是通過發送SD卡命令完成的。SPI總線模式支持單塊(CMD24)和多塊(CMD25)寫操作,多塊操作是指從指定位置開始寫下去,直到SD卡收到一個停止命令CMD12才停止。單塊寫操作的數據塊長度只能是512字節。單塊寫入時,命令為CMD24,當應答為0時說明可以寫入數據,大小為512字節。SD卡對每個發送給自己的數據塊都通過一個應答命令確認,它為1個字節長,當低5位為00101時,表明數據塊被正確寫入SD卡。

          在需要讀取SD卡中數據的時候,讀SD卡的命令字為CMD17,接收正確的第一個響應命令字節為0xFE,隨后是512個字節的用戶數據塊,最后為2個字節的CRC驗證碼。

          可見,讀寫SD卡的操作都是在初始化后基于SD卡命令和響應完成操作的,寫、讀SD卡的程序流程圖如圖4和圖5所示。

         

        結束語

          實驗結果表明使用12MHz的晶體振蕩器時,讀寫速度和功耗都基本令人滿意,可以應用于對讀寫速度要求不高的情況下。本文詳細闡述了用對SD卡進行操作的過程,提出了一種不帶SD卡控制器,MCU讀寫SD卡的方法,實現了SD卡在電能監測及無功補償數據采集系統中的用途。


        上一頁 1 2 下一頁

        關鍵詞: 單片機 AT89C52 存儲 SD

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宁夏| 佛学| 台江县| 陆丰市| 宝山区| 鲁甸县| 临汾市| 巩义市| 清远市| 泽库县| 香河县| 阿巴嘎旗| 茶陵县| 靖边县| 韩城市| 曲靖市| 成都市| 荆门市| 凤阳县| 定襄县| 广西| 伊吾县| 峨眉山市| 犍为县| 乌兰察布市| 微山县| 柏乡县| 津市市| 龙江县| 简阳市| 朝阳区| 河池市| 军事| 古田县| 兴义市| 本溪市| 广州市| 开阳县| 宁陕县| 葵青区| 博客|