www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]前言  長(zhǎng)期以來(lái),以Flash Memory為存儲(chǔ)體的SD卡因具備體積小、功耗低、可擦寫以及非易失性等特點(diǎn)而被廣泛應(yīng)用于消費(fèi)類電子產(chǎn)品中。特別是近年來(lái),隨著價(jià)格不斷下降且存儲(chǔ)容量不斷提高,它的應(yīng)用范圍日益增廣。當(dāng)數(shù)

前言

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

  設(shè)計(jì)方案

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

  通訊模式

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

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

  電平匹配

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

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

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

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

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

  硬件接口設(shè)計(jì)

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

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

  軟件設(shè)計(jì)

  SPI工作模式

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

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

  本文的實(shí)現(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;

  val<<=1;

  CLK=1;

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

  }

  CLK=0;

  return val;

  }

  SD卡的初始化

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

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

  unsigned char SD_Init(void)

  { unsigned char retry,temp;

  unsigned char i;

  for (i=0;i<0x0f;i++)

  { SPI_TransferByte(0xff); //延遲74個(gè)以上的時(shí)鐘

  }

  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次失敗返回錯(cuò)誤號(hào)

  }

  }while(temp!=0);

  SD_Disable(); //關(guān)片選

  return(TRUE); //返回成功

  }

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

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

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

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

  

  

  結(jié)束語(yǔ)

  實(shí)驗(yàn)結(jié)果表明單片機(jī)使用12MHz的晶體振蕩器時(shí),讀寫速度和功耗都基本令人滿意,可以應(yīng)用于對(duì)讀寫速度要求不高的情況下。本文詳細(xì)闡述了用AT89C52單片機(jī)對(duì)SD卡進(jìn)行操作的過(guò)程,提出了一種不帶SD卡控制器,MCU讀寫SD卡的方法,實(shí)現(xiàn)了SD卡在電能監(jiān)測(cè)及無(wú)功補(bǔ)償數(shù)據(jù)采集系統(tǒng)中的用途。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

深圳2022年9月14日 /美通社/ -- 近日,憶聯(lián)旗下企業(yè)級(jí)固態(tài)硬盤UH811a/UH831a系列經(jīng)過(guò)微軟中國(guó)技術(shù)中心的各項(xiàng)嚴(yán)格測(cè)試,已正式通過(guò)了微軟WHQL認(rèn)證。標(biāo)志著憶聯(lián)UH811a/UH831a系列與Windo...

關(guān)鍵字: 微軟 硬件 SSD 讀寫

深圳2022年9月8日 /美通社/ -- 9月5-6日,由開放數(shù)據(jù)中心委員會(huì)(ODCC)主辦的"2022開放數(shù)據(jù)中心峰會(huì)"于北京國(guó)際會(huì)議中心隆重召開。作為ODCC白金會(huì)員單位,憶聯(lián)受邀出席本次峰會(huì),一...

關(guān)鍵字: DC 固態(tài)硬盤 讀寫 GB

北京2022年8月26日 /美通社/ -- 8月25日,由國(guó)際權(quán)威財(cái)經(jīng)雜志《亞洲銀行家》主辦的"中國(guó)未來(lái)金融峰會(huì)"在北京成功舉辦;華為攜手中國(guó)銀行榮獲2022年度金融技術(shù)與平臺(tái)獎(jiǎng)項(xiàng)"最佳銀行...

關(guān)鍵字: 華為 數(shù)據(jù)中心 讀寫 PS

北京2022年8月16日 /美通社/ -- "一只南美洲亞馬遜河流域熱帶雨林中的蝴蝶,偶爾扇動(dòng)幾下翅膀,可以在兩周以后引起美國(guó)得克薩斯州的一場(chǎng)龍卷風(fēng)。" -- 這便是著名的"蝴蝶效...

關(guān)鍵字: 噪音 讀寫 工程師 音頻

(全球TMT2022年8月12日訊)西湖大學(xué)聯(lián)手浪潮信息等科技企業(yè)建設(shè)領(lǐng)先的創(chuàng)新平臺(tái)與實(shí)驗(yàn)室,為前沿科技研究構(gòu)建數(shù)據(jù)基座,創(chuàng)造影響世界、造福人類的科學(xué)知識(shí)和技術(shù)。西湖大學(xué)工學(xué)院采用了浪潮分布式存儲(chǔ)AS13000、AI服...

關(guān)鍵字: 節(jié)點(diǎn) 分布式 讀寫 INFIN

北京2022年8月11日 /美通社/ -- 堅(jiān)持面向世界科技前沿,不斷向科學(xué)技術(shù)廣度和深度進(jìn)發(fā)是科技工作者的初心和使命。工欲善其事,必先利其器,西湖大學(xué)聯(lián)手浪潮信息等科技企業(yè)建設(shè)領(lǐng)先的創(chuàng)新平臺(tái)與實(shí)驗(yàn)室,為前沿科技研究構(gòu)建...

關(guān)鍵字: 節(jié)點(diǎn) 分布式 讀寫 數(shù)據(jù)安全

搶占5G、AI邊緣計(jì)算市場(chǎng)  深圳2022年8月1日 /美通社/ -- 全球工業(yè)級(jí)存儲(chǔ)與嵌入式外圍領(lǐng)導(dǎo)大廠宜鼎國(guó)際(Innodisk),積極布局Edge...

關(guān)鍵字: SSD 讀寫 AI 5G

臺(tái)灣臺(tái)北, July 14, 2022 (GLOBE NEWSWIRE) -- 特種存儲(chǔ)和內(nèi)存解決方案領(lǐng)域的全球領(lǐng)先企業(yè)ATP Electronics推出新的3D三層單元(TLC)S750/S650系列SD和microS...

關(guān)鍵字: DVR MICROSD SD卡 行車記錄儀

摘要:為滿足熱帶魚的飼養(yǎng)要求,設(shè)計(jì)了一種基于AT89C52單片機(jī)的小型智能溫控魚缸系統(tǒng)。該系統(tǒng)利用Ds18B20傳感器檢測(cè)水溫,并通過(guò)測(cè)量溫度與設(shè)定溫度的對(duì)比控制加熱裝置的通斷?,F(xiàn)詳細(xì)介紹了魚缸系統(tǒng)的各部分硬件構(gòu)成以及控...

關(guān)鍵字: AT89C52單片機(jī) 水溫控制 DS18B20傳感器

北京2022年6月9日 /美通社/ -- 狹小,不到0.002立方米空間內(nèi);氣流,被每秒500轉(zhuǎn)的風(fēng)扇擾動(dòng);瞬間,所有電氣組件變?yōu)槟μ齑髽?;極限,硬盤數(shù)據(jù)接近滿載;此時(shí),硬盤讀寫頭以10納米的距離,懸浮于盤片之上……...

關(guān)鍵字: 工程師 波導(dǎo) 讀寫 BSP

單片機(jī)

21600 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉