SDHC microSD卡和SPI初始化

时间:2011-11-10 14:05:24

标签: spi

我有一张32 GB的Kingston SDHC microSD卡,必须通过MSP430F2618SPI进行通信。我无法使用CMD55 + ACMD41(bit30设置为1)对其进行初始化,如SD规范文件中所述。有效的是这个序列:

  CMD0, arg: 0         , CRC: 0x95 (response:0x01)
  CMD8, arg: 0x1AA     , CRC: 0x87 (response:0x01)
  CMD1, arg: 0x40000000, CRC: 0xFF (response:0x00)

我也尝试使用8 GB的SanDisk卡,也适用于此。所以实际上,我在这里使用CMD1,而不是ACMD41,HCS位设置为1.但是,它不稳定,有时它可以工作,有时却不行。这可能与硬件有关。

卡片使用参数0x40000000响应CMD1并不奇怪吗?

1 个答案:

答案 0 :(得分:9)

您不应使用CMD1初始化SDHC卡;如SD卡规范中所述:

  

在任何情况下都不建议使用CMD1,因为主机可能难以区分MultiMediaCard和SD存储卡。

如果向CMD1发出CMD8 0x1AA,某些控制器(大多数是较新的和较高容量的卡)只会处于空闲状态。 您应该在重置后CMD0发出CMD55 + ACMD41,然后使用CMD0

tl; dr 初始化您应该使用的卡片:

  1. 0x0 arg:0x95,CRC:0x01(回复:CMD8

  2. 0x000001AA arg:0x87,CRC:0x01(回复:CMD55

  3. 0x0 arg:CMD55,CRC:任意(ACMD每个 ACMD41的前缀)

  4. 0x40000000,arg:0x0,CRC:any

  5. 如果回复:0x1,你没事;如果是CMD0,请转到3。

  6. 请注意,大多数卡需要步骤3/4重复,通常一次,即实际序列为CMD8 / CMD55 / ACMD41 / { {1}} / CMD55 / ACMD41 - 当然,请尝试n次(在您的理由中选择n),如果不是,请假设失败。

    另外,请注意,您应该在CMD0之前和之后至少在处声明SS(也称为CS)低 - 实际上,可能始终在向SD卡发送任何命令时。