新聞中心

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

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

        作者: 時間:2010-01-14 來源:網絡 收藏

          硬件接口

          卡提供9Pin的引腳接口便于外圍電路對其進行操作,9Pin的引腳隨工作模式的不同有所差異。在SPI模式下,引腳1(DAT3)作為SPI片選線CS用,引腳2(CMD)用作SPI總線的數據輸出線MOSI,而引腳7(DAT0)為數據輸入線MISO,引腳5用作時鐘線(CLK)。除電源和地,保留引腳可懸空。

          本文中控制卡的MCU是ATMEL公司生產的低電壓、高性能CMOS 8位,內含8K字節的可反復擦寫的只讀程序存儲器和256字節的隨機存儲數據存儲器。由于只有256字節的數據存儲器,而卡的數據寫入是以塊為單位,每塊為512字節,所以需要在最小系統上增加一片RAM。本系統中RAM選用存儲器芯片HM62256,容量為32K。對RAM進行時,鎖存器把低8位地址鎖存,與P2口的8位地址數據構成16位地址空間,從而可使SD卡一次512字節的塊操作。系統硬件圖如圖2所示。

          軟件

          SPI工作模式

          SD卡在上電初期自動進入SD總線模式,在此模式下向SD卡發送復位命令CMD0。如果SD卡在接收復位命令過程中CS低電平有效,則進入SPI模式,否則工作在SD總線模式。

          對于不帶SPI串行總線接口的來說,用軟件來模擬SPI總線操作的具體做法是:將P1.5口(模擬CLK線)的初始狀態設置為1,而在允許接收后再置P1.5為0。這樣,MCU在輸出1位SCK時鐘的同時,將使接口芯片串行左移,從而輸出1位數據至AT89C52單片機的P1.7(模擬MISO線),此后再置P1.5為1,使單片機從P1.6(模擬MOSI線)輸出1位數據(先為高位)至串行接口芯片。至此,模擬1位數據輸入輸出便完成。此后再置P1.5為0,模擬下1位數據的輸入輸出,依此循環8次,即可完成1次通過SPI總線傳輸8位數據的操作。

          本文的實現程序把SPI總線功能集成在一起,傳遞的val變量既是向SPI寫的數據,也是從SPI讀取的數據。具體程序如下:(程序是在Keil uVision2的編譯環境下編寫)

          sbit CS=P3^5;

          sbit CLK= P1^5;

          sbit DataI=P1^7;

          sbit DataO=P1^6;

          #define SD_Disable() CS=1 //片選關

          #define SD_Enable() CS=0 //片選開

          unsigned char SPI_TransferByte(unsigned char val)

          {

          unsigned char BitCounter;

          for(BitCounter=8; BiCounter!=0; BitCounter--)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 临洮县| 铜梁县| 莱芜市| 榕江县| 河源市| 长白| 青神县| 临漳县| 巫山县| 定远县| 鹤山市| 宣威市| 哈巴河县| 邵东县| 孝昌县| 莱州市| 鲁山县| 东海县| 葫芦岛市| 闽侯县| 锡林浩特市| 绥棱县| 嘉义县| 加查县| 长泰县| 紫阳县| 三原县| 婺源县| 保亭| 烟台市| 高清| 新乡市| 正蓝旗| 安龙县| 仙居县| 马山县| 敦煌市| 五大连池市| 永仁县| 修文县| 平昌县|