国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于AT89C52單片機的SD卡讀寫設(shè)計

發(fā)布時間:2010-8-6 10:20    發(fā)布者:lavida
關(guān)鍵詞: AT89C52 , SD卡 , 單片機 , 讀寫
長期以來,以Flash Memory為存儲體的SD卡因具備體積小、功耗低、可擦寫以及非易失性等特點而被廣泛應(yīng)用于消費類電子產(chǎn)品中。特別是近年來,隨著價格不斷下降且存儲容量不斷提高,它的應(yīng)用范圍日益增廣。當(dāng)數(shù)據(jù)采集系統(tǒng)需要長時間地采集、記錄海量數(shù)據(jù)時,選擇SD卡作為存儲媒質(zhì)是開發(fā)者們一個很好的選擇。在電能監(jiān)測以及無功補償系統(tǒng)中,要連續(xù)記錄大量的電壓、電流、有功功率、無功功率以及時間等參數(shù),當(dāng)單片機采集到這些數(shù)據(jù)時可以利用SD作為存儲媒質(zhì)。本文主要介紹了SD卡在電能監(jiān)測及無功補償數(shù)據(jù)采集系統(tǒng)中的應(yīng)用方案。  

設(shè)計方案  

應(yīng)用AT89C52讀寫SD卡有兩點需要注意。首先,需要尋找一個實現(xiàn)AT89C52單片機與SD卡通訊的解決方案;其次,SD卡所能接受的邏輯電平與AT89C52提供的邏輯電平不匹配,需要解決電平匹配問題。  

通訊模式  

SD卡有兩個可選的通訊協(xié)議:SD模式和SPI模式。SD模式是SD卡標(biāo)準(zhǔn)的讀寫方式,但是在選用SD模式時,往往需要選擇帶有SD卡控制器接口的MCU,或者必須加入額外的SD卡控制單元以支持SD卡的讀寫。然而,AT89C52單片機沒有集成SD卡控制器接口,若選用SD模式通訊就無形中增加了產(chǎn)品的硬件成本。在SD卡數(shù)據(jù)讀寫時間要求不是很嚴(yán)格的情況下,選用SPI模式可以說是一種最佳的解決方案。因為在SPI模式下,通過四條線就可以完成所有的數(shù)據(jù)交換,并且目前市場上很多MCU都集成有現(xiàn)成的SPI接口電路,采用SPI模式對SD卡進(jìn)行讀寫操作可大大簡化硬件電路的設(shè)計。  

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

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

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

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

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



  

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

硬件接口設(shè)計  

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

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



  

軟件設(shè)計  

SPI工作模式  

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

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

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

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 //片選開   
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;  
valCLK=1;

if(DataO)val|=1; // read  
}   
CLK=0;   
return val;  
}  

SD卡的初始化  

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



  

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

unsigned char SD_Init(void)  
{ unsigned char retry,temp;  
unsigned char i;  
for (i=0;i{ SPI_TransferByte(0xff); //延遲74個以上的時鐘  
}  
SD_Enable(); //開片選  
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次失敗返回錯誤號
}
}while(temp!=0);
SD_Disable(); //關(guān)片選
return(TRUE); //返回成功
}

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

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

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

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




結(jié)束語  

實驗結(jié)果表明單片機使用12MHz的晶體振蕩器時,讀寫速度和功耗都基本令人滿意,可以應(yīng)用于對讀寫速度要求不高的情況下。本文詳細(xì)闡述了用AT89C52單片機對SD卡進(jìn)行操作的過程,提出了一種不帶SD卡控制器,MCU讀寫SD卡的方法,實現(xiàn)了SD卡在電能監(jiān)測及無功補償數(shù)據(jù)采集系統(tǒng)中的用途。
本文地址:http://www.qingdxww.cn/thread-19620-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
Sammil 發(fā)表于 2011-1-19 22:19:48
學(xué)習(xí)學(xué)習(xí)
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節(jié)省時間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美三级视频在线观看 | 亚洲欧美成人影院 | 欧美理论大片清免费观看 | 青青草原免费在线 | 国产69久久精品成人看 | 怡红院五月天 | 91av片| 四虎影院网 | 欧美一二三区在线 | 韩国妈妈的朋友在线 | 国产精品青青青高清在线 | 91热久久免费频精品黑人99 | 日韩a视频在线观看 | 奶茶app下载网址进入下载 | 蜜桃视频一区二区在线看 | 日本四虎影院 | 免费高清欧美大片在线观看 | 亚洲成人欧美 | 国产精品高清在线观看 | 中文精品视频一区二区在线观看 | 色亚洲视频| 久热精品视频在线观看99小说 | 日韩欧美中 | 国产一区二区免费不卡在线播放 | 一区国产传媒国产精品 | 国产精品精品国产 | 国产在线色站 | 大桥未久日韩欧美亚洲国产 | 尹人香蕉| 日韩在线一区高清在线 | 欧美理论大片清免费观看 | 这里只有精品网 | 国产一区二区三区不卡在线观看 | 国产97免费视频 | 99re66热这里都是精品 | 欧美日韩 在线播放 | 亚洲天天更新 | 男人的天堂网在线 | 一区二区三区四区国产精品 | 日韩黄色成人 | 97免费视频在线观看 |