新聞中心

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

        51單片機讀寫SD卡程序

        作者: 時間:2016-11-29 來源:網絡 收藏
        SD卡簡介
        SD卡,是一種基于半導體快閃記憶器的新一代記憶設備,SD于1999年8月研制成功,其重量只有2克。但卻擁有高記憶容量、快速數據傳輸率、極大的移動靈活性以及很好的安全性。SD卡也很容易重新格式化,有廣泛的應用領域,如音樂、電影、新聞等多媒體文件都可以方便地保存,數碼相機也開始支持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年,這幾家公司發起成立了SD協會(Secure Digital Association簡稱SDA),陣容強大,吸引了大量廠商參加。其中包括IBM,Microsoft,Motorola,NEC、Samsung等。在這些領導廠商的推動下,SD卡已成為目前消費數碼設備中應用最廣泛的一種存儲卡。SD卡具有大容量、高性能、安全等多種特點的多功能存儲卡,它比MMC卡多了一個進行數據著作權保護的暗號認證功能(SDMI規格),讀寫速度比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字節緩沖區,注意需要使用 xdata關鍵字
        unsigned char xdata DATA[512];
        void delayms(unsigned int count)
        {
        int i,j;
        for(i=0;i
        {
        for(j=0;j<260;j++);
        }
        }
        //===========================================================
        //寫一字節到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卡讀一字節,模擬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;
        }
        //================================================================
        //發命令到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

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 锡林郭勒盟| 禹州市| 菏泽市| 贵德县| 海南省| 苏尼特右旗| 都安| 余庆县| 瓮安县| 廊坊市| 河曲县| 张家口市| 大渡口区| 屏山县| 湖南省| 南川市| 广水市| 武陟县| 增城市| 卢氏县| 宜昌市| 屯留县| 汽车| 神木县| 姚安县| 临沂市| 崇信县| 红河县| 青浦区| 陇西县| 北流市| 新民市| 罗江县| 阿瓦提县| 巩义市| 高碑店市| 桐城市| 南丹县| 云安县| 剑河县| 永德县|