FPGA_SD_SPI初始化、读步骤和写步骤

 一、SD卡初始化步骤

  1、上电后延时至少74Clock,等待SD卡内部操作完成。

  2、片选CS低电平选中SD卡。

  3、发送CMD0( {8'h40, 8'h00, 8'h00, 8'h00, 8'h00, 8'h95} ),需要返回0x01,进入Idle状态。

  4、为了区别SD卡是2.0还是1.0,或者是MMC卡,这里根据协议向上兼容的,首先发送只有SD2.0才有的命令CMD8( CMD8= {8'h48, 8'h00, 8'h00, 8'h01, 8'haa, 8'h87} ),

  如果CMD8返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55 (8'h77, 8'h00, 8'h00, 8'h00, 8'h00, 8'hff)+ ACMD41 ( {8'h69, 8'h40, 8'h00, 8'h00, 8'h00, 8'hff} ),直到返回0x00,确定是SD2.0卡。

  5、如果CMD8返回错误则判断为1.0卡或者MMC卡,循环发送CMD55 + ACMD41,返回无错误,则为SD1.0卡,到此SD1.0卡初始化成功,如果在一定的循环次数下,返回为错误,则进一步发送CMD1进行初始化,

  如果返回无错误,则确定是MMC卡,如果在一定的次数下,返回无错误,则不能识别该卡,初始化结束。

  6、CS拉高。

 二、SD卡读步骤

  1、发送CMD17( {8'h51, 8'h00, 8'h00, 8'h00, 8'h00, 8'hff } )(单块)或CMD18(多块)读命令,返回0x00

  2、接受数据开始令牌0xfe(或者0xfc) + 正式数据512Bytes + CRC校验2Bytes默认正式传输的数据长度是512Bytes,可用CMD16设置块长度。

  三、SD卡写步骤

  1、发送CMD24( {8'h58, 8'h00, 8'h00, 8'h00, 8'h00, 8'hff} )(单块)或者CMD25(多块)写命令,返回0x00。

  2、发送数据开始令牌0xfe(或者 0xfc) + 正式数据512Bytes + CRC校验2Bytes。

 

posted @ 2016-05-01 15:51  ‘Triangel  阅读(1349)  评论(0编辑  收藏  举报