新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AT89C52單片機(jī)的SD卡的讀寫設(shè)計(jì)

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

作者: 時(shí)間:2010-01-14 來源:網(wǎng)絡(luò) 收藏

  { CLK=0;

  DataI=0; // write

  if(val0x80) DataI=1;

  val=1;

  CLK=1;

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

  }

  CLK=0;

  return val;

  }

  卡的初始化

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

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

  unsigned char SD_Init(void)

  { unsigned char retry,temp;

  unsigned char i;

  for (i=0;i0x0f;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ò)誤號

  }

  }while(temp!=0);

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

  return(TRUE); //返回成功

  }



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉