色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AT89C52單片機(jī)的SD卡讀寫(xiě)設(shè)計(jì)

          基于AT89C52單片機(jī)的SD卡讀寫(xiě)設(shè)計(jì)

          作者:武漢理工大學(xué)自動(dòng)化學(xué)院 蘇義鑫 程 敏 武漢大學(xué) 何力 時(shí)間:2008-08-04 來(lái)源:中電網(wǎng) 收藏

            卡的初始化

          本文引用地址:http://cafeforensic.com/article/86566.htm

            對(duì)卡進(jìn)行操作首先要對(duì)卡進(jìn)行初始化,初始化的過(guò)程中設(shè)置SD卡工作在SPI模式,其流程圖如圖3所示。

           

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

            unsigned char SD_Init(void)

            { unsigned char retry,temp;

            unsigned char i;

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

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

            }

            SD_Enable(); //開(kāi)片選

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

            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);

            //發(fā)送初始化命令

            retry++;

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

            {SD_Disable(); //關(guān)片選

            return(INIT_CMD1_ERROR);

            //如果重試100次失敗返回錯(cuò)誤號(hào)

            }

            }while(temp!=0);

            SD_Disable(); //關(guān)片選

            return(TRUE); //返回成功

            }

            數(shù)據(jù)塊的讀寫(xiě)

            完成SD卡的初始化之后即可進(jìn)行它的讀寫(xiě)操作。SD卡的讀寫(xiě)操作都是通過(guò)發(fā)送SD卡命令完成的。SPI總線模式支持單塊(CMD24)和多塊(CMD25)寫(xiě)操作,多塊操作是指從指定位置開(kāi)始寫(xiě)下去,直到SD卡收到一個(gè)停止命令CMD12才停止。單塊寫(xiě)操作的數(shù)據(jù)塊長(zhǎng)度只能是512字節(jié)。單塊寫(xiě)入時(shí),命令為CMD24,當(dāng)應(yīng)答為0時(shí)說(shuō)明可以寫(xiě)入數(shù)據(jù),大小為512字節(jié)。SD卡對(duì)每個(gè)發(fā)送給自己的數(shù)據(jù)塊都通過(guò)一個(gè)應(yīng)答命令確認(rèn),它為1個(gè)字節(jié)長(zhǎng),當(dāng)?shù)?位為00101時(shí),表明數(shù)據(jù)塊被正確寫(xiě)入SD卡。

            在需要讀取SD卡中數(shù)據(jù)的時(shí)候,讀SD卡的命令字為CMD17,接收正確的第一個(gè)響應(yīng)命令字節(jié)為0xFE,隨后是512個(gè)字節(jié)的用戶(hù)數(shù)據(jù)塊,最后為2個(gè)字節(jié)的CRC驗(yàn)證碼。

            可見(jiàn),讀寫(xiě)SD卡的操作都是在初始化后基于SD卡命令和響應(yīng)完成操作的,寫(xiě)、讀SD卡的程序流程圖如圖4和圖5所示。

           

          結(jié)束語(yǔ)

            實(shí)驗(yàn)結(jié)果表明使用12MHz的晶體振蕩器時(shí),讀寫(xiě)速度和功耗都基本令人滿(mǎn)意,可以應(yīng)用于對(duì)讀寫(xiě)速度要求不高的情況下。本文詳細(xì)闡述了用對(duì)SD卡進(jìn)行操作的過(guò)程,提出了一種不帶SD卡控制器,MCU讀寫(xiě)SD卡的方法,實(shí)現(xiàn)了SD卡在電能監(jiān)測(cè)及無(wú)功補(bǔ)償數(shù)據(jù)采集系統(tǒng)中的用途。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 單片機(jī) AT89C52 存儲(chǔ) SD

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉