新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機讀寫SD卡程序

        51單片機讀寫SD卡程序

        作者: 時間:2016-11-29 來源:網(wǎng)絡 收藏
        SD卡簡介
        SD卡,是一種基于半導體快閃記憶器的新一代記憶設備,SD于1999年8月研制成功,其重量只有2克。但卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動靈活性以及很好的安全性。SD卡也很容易重新格式化,有廣泛的應用領域,如音樂、電影、新聞等多媒體文件都可以方便地保存,數(shù)碼相機也開始支持SD卡。SD卡容量最高能達到4GB。
        SD卡在24mm×32mm×2.1mm的體積內結合了〔SanDisk〕快閃記憶卡控制與MLC(Multilevel Cell)技術和Toshiba(東芝)0.16u及0.13u的NAND技術,通過9針的接口界面與專門的驅動器相連接,不需要額外的電源來保持其上記憶的信息。而且它是一體化固體介質,沒有任何移動部分,所以不用擔心機械運動的損壞。
          SD卡(Secure Digital Memory Card)是一種基于半導體閃存工藝的存儲卡,1999年,由日本松下、東芝及美國SanDisk公司共同研制完成。2000年,這幾家公司發(fā)起成立了SD協(xié)會(Secure Digital Association簡稱SDA),陣容強大,吸引了大量廠商參加。其中包括IBM,Microsoft,Motorola,NEC、Samsung等。在這些領導廠商的推動下,SD卡已成為目前消費數(shù)碼設備中應用最廣泛的一種存儲卡。SD卡具有大容量、高性能、安全等多種特點的多功能存儲卡,它比MMC卡多了一個進行數(shù)據(jù)著作權保護的暗號認證功能(SDMI規(guī)格),讀寫速度比MMC卡要快4倍。
        好了,既然這么好,我們在這里給出51單片機讀寫2G SD卡程序:
        #include //程序通過調試
        #include
        //=============================================================
        //定義SD卡需要的4根信號線
        sbit SD_CLK = P3^7;
        sbit SD_DI = P3^5;
        sbit SD_DO = P3^6;
        sbit SD_CS = P3^4;
        //===========================================================
        //定義按鍵端口
        sbit KEY = P2^7;
        //===========================================================
        //定義512字節(jié)緩沖區(qū),注意需要使用 xdata關鍵字
        unsigned char xdata DATA[512];
        void delayms(unsigned int count)
        {
        int i,j;
        for(i=0;i
        {
        for(j=0;j<260;j++);
        }
        }
        //===========================================================
        //寫一字節(jié)到SD卡,模擬SPI總線方式
        void SdWrite(unsigned char n)
        {
        unsigned char i;
        for(i=8;i;i--)
        {
        SD_CLK=0;
        SD_DI=(n&0x80);
        n<<=1;
        SD_CLK=1;
        }
        SD_DI=1;
        }
        //===========================================================
        //從SD卡讀一字節(jié),模擬SPI總線方式
        unsigned char SdRead()
        {
        unsigned char n,i;
        for(i=8;i;i--)
        {
        SD_CLK=0;
        SD_CLK=1;
        n<<=1;
        if(SD_DO) n|=1;
        }
        return n;
        }
        //============================================================
        //檢測SD卡的響應
        unsigned char SdResponse()
        {
        unsigned char i=0,response;
        while(i<=8)
        {
        response = SdRead();
        if(response==0x00)
        break;
        if(response==0x01)
        break;
        i++;
        }
        return response;
        }
        //================================================================
        //發(fā)命令到SD卡
        void SdCommand(unsigned char command, unsigned long argument, unsigned char CRC)
        {
        SdWrite(command|0x40);
        SdWrite(((unsigned char *)&argument)[0]);
        SdWrite(((unsigned char *)&argument)[1]);
        SdWrite(((unsigned char *)&argument)[2]);
        SdWrite(((unsigned char *)&argument)[3]);
        SdWrite(CRC);
        }
        //================================================================
        //初始化SD卡
        unsigned char SdInit(void)
        {
        int delay=0, trials=0;
        unsigned char i;
        unsigned char response=0x01;
        SD_CS=1;
        for(i=0;i<=9;i++)
        SdWrite(0xff);
        SD_CS=0;
        //Send Command 0 to put MMC in SPI mode
        SdCommand(0x00,0,0x95);

        response=SdResponse();
        if(response!=0x01)
        {
        return 0;
        }
        while(response==0x01)
        {
        SD_CS=1;
        SdWrite(0xff);
        SD_CS=0;
        SdCommand(0x01,0x00ffc000,0xff);
        response=SdResponse();
        }
        SD_CS=1;
        SdWrite(0xff);
        return 1;
        }

        上一頁 1 2 下一頁

        關鍵詞: 51單片機讀寫SD

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 灵寿县| 江孜县| 宁津县| 汨罗市| 蒙阴县| 临澧县| 镇远县| 纳雍县| 北安市| 阿拉善右旗| 聂拉木县| 共和县| 剑川县| 丹棱县| 治县。| 永丰县| 清河县| 尖扎县| 都江堰市| 郸城县| 阳曲县| 信阳市| 大洼县| 亳州市| 阿拉尔市| 竹溪县| 西乡县| 汤原县| 嘉祥县| 临泽县| 磐石市| 沈丘县| 雷州市| 高邑县| 抚远县| 吉水县| 嵊泗县| 郸城县| 诏安县| 桓台县| 富裕县|