<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

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

 

  在復位成功之后可以通過(guò)CMD55和ACMD41判斷當前電壓是否在工作范圍內。主機還可以繼續通過(guò)CMD10讀取SD卡的CID寄存器,通過(guò)CMD16設置數據Block長(cháng)度,通過(guò)CMD9讀取卡的CSD寄存器。從CSD寄存器中,主機可獲知卡容量,支持的命令集等重要參數。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(); //開(kāi)片選

  SPI_TransferByte(SD_RESET); //發(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); //返回成功

  }

  數據塊的讀寫(xiě)

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

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

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

 

結束語(yǔ)

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


上一頁(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>