<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)T89C52單片機的SD卡讀寫(xiě)設計

基于A(yíng)T89C52單片機的SD卡讀寫(xiě)設計

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

前言

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

  長(cháng)期以來(lái),以Flash Memory為體的卡因具備體積小、功耗低、可擦寫(xiě)以及非易失性等特點(diǎn)而被廣泛應用于消費類(lèi)電子產(chǎn)品中。特別是近年來(lái),隨著(zhù)價(jià)格不斷下降且容量不斷提高,它的應用范圍日益增廣。當數據采集系統需要長(cháng)時(shí)間地采集、記錄海量數據時(shí),選擇卡作為媒質(zhì)是開(kāi)發(fā)者們一個(gè)很好的選擇。在電能監測以及無(wú)功補償系統中,要連續記錄大量的電壓、電流、有功功率、無(wú)功功率以及時(shí)間等參數,當采集到這些數據時(shí)可以利用作為存儲媒質(zhì)。本文主要介紹了SD卡在電能監測及無(wú)功補償數據采集系統中的應用方案。

設計方案

  應用讀寫(xiě)SD卡有兩點(diǎn)需要注意。首先,需要尋找一個(gè)實(shí)現與SD卡通訊的解決方案;其次,SD卡所能接受的邏輯電平與提供的邏輯電平不匹配,需要解決電平匹配問(wèn)題。

  通訊模式

  SD卡有兩個(gè)可選的通訊協(xié)議:SD模式和SPI模式。SD模式是SD卡標準的讀寫(xiě)方式,但是在選用SD模式時(shí),往往需要選擇帶有SD卡控制器接口的MCU,或者必須加入額外的SD卡控制單元以支持SD卡的讀寫(xiě)。然而,AT89C52沒(méi)有集成SD卡控制器接口,若選用SD模式通訊就無(wú)形中增加了產(chǎn)品的硬件成本。在SD卡數據讀寫(xiě)時(shí)間要求不是很?chē)栏竦那闆r下,選用SPI模式可以說(shuō)是一種最佳的解決方案。因為在SPI模式下,通過(guò)四條線(xiàn)就可以完成所有的數據交換,并且目前市場(chǎng)上很多MCU都集成有現成的SPI接口電路,采用SPI模式對SD卡進(jìn)行讀寫(xiě)操作可大大簡(jiǎn)化硬件電路的設計。

  雖然AT89C52不帶SD卡硬件控制器,也沒(méi)有現成的SPI接口模塊,但是可以用軟件模擬出SPI總線(xiàn)時(shí)序。本文用SPI總線(xiàn)模式讀寫(xiě)SD卡。

  電平匹配

  SD卡的邏輯電平相當于3.3V TTL電平標準,而控制芯片AT89C52的邏輯電平為5V CMOS電平標準。因此,它們之間不能直接相連,否則會(huì )有燒毀SD卡的可能。出于對安全工作的考慮,有必要解決電平匹配問(wèn)題。

  要解決這一問(wèn)題,最根本的就是解決邏輯器件接口的電平兼容問(wèn)題,原則主要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應該小于接收電平器件識別為低電平的最高電壓值。

  一般來(lái)說(shuō),通用的電平轉換方案是采用類(lèi)似SN74ALVC4245的專(zhuān)用電平轉換芯片,這類(lèi)芯片不僅可以用作升壓和降壓,而且允許兩邊電源不同步。但是,這個(gè)方案代價(jià)相對昂貴,而且一般的專(zhuān)用電平轉換芯片都是同時(shí)轉換8路、16路或者更多路數的電平,相對本系統僅僅需要轉換3路來(lái)說(shuō)是一種資源的浪費。

  考慮到SD卡在SPI協(xié)議的工作模式下,通訊都是單向的,于是在單片機向SD卡傳輸數據時(shí)采用晶體管加上拉電阻法的方案,基本電路如圖1所示。而在SD卡向單片機傳輸數據時(shí)可以直接連接,因為它們之間的電平剛好滿(mǎn)足上述的電平兼容原則,既經(jīng)濟又實(shí)用。

   這個(gè)方案需要雙電源供電(一個(gè)5V電源、一個(gè)3.3V電源供電),3.3V電源可以用AMS1117穩壓管從5V電源穩壓獲取。

硬件接口設計

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

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

 

軟件設計

  SPI工作模式

  SD卡在上電初期自動(dòng)進(jìn)入SD總線(xiàn)模式,在此模式下向SD卡發(fā)送復位命令CMD0。如果SD卡在接收復位命令過(guò)程中CS低電平有效,則進(jìn)入SPI模式,否則工作在SD總線(xiàn)模式。

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

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

  sbit CS=P3^5;

  sbit CLK= P1^5;

  sbit DataI=P1^7;

  sbit DataO=P1^6;

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

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

  unsigned char SPI_TransferByte(unsigned char val)

  {

  unsigned char BitCounter;

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

  { CLK=0;

  DataI=0; // write

  if(val&0x80) DataI=1;

  val<<=1;

  CLK=1;

  if(DataO)val|=1; // read

  }

  CLK=0;

  return val;

  }

 


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

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

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>