新闻中心

EEPW首页>嵌入式系统>设计应用> 基于AT89C52单片机的SD卡的读写设计

基于AT89C52单片机的SD卡的读写设计

作者: 时间:2010-01-14 来源:网络 收藏

  { CLK=0;

  DataI=0; // write

  if(val0x80) DataI=1;

  val=1;

  CLK=1;

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

  }

  CLK=0;

  return val;

  }

卡的初始化

  对卡进行操作首先要对卡进行初始化,初始化的过程中设置SD卡工作在SPI模式,其流程图如图3所示。

  在复位成功之后可以通过CMD55和ACMD41判断当前电压是否在工作范围内。主机还可以继续通过CMD10读取SD卡的CID寄存器,通过CMD16设置数据Block长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可获知卡容量,支持的命令集等重要参数。SD卡初始化的C语言程序如下:

  unsigned char SD_Init(void)

  { unsigned char retry,temp;

  unsigned char i;

  for (i=0;i0x0f;i++)

  { SPI_TransferByte(0xff); //延迟74个以上的时钟

  }

  SD_Enable(); //开片选

  SPI_TransferByte(SD_RESET); //发送复位命令

  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);

  //发送初始化命令

  retry++;

  if(retry==100) //重试100次

  {SD_Disable(); //关片选

  return(INIT_CMD1_ERROR);

  //如果重试100次失败返回错误号

  }

  }while(temp!=0);

  SD_Disable(); //关片选

  return(TRUE); //返回成功

  }



评论


相关推荐

技术专区

关闭