我有一个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并不奇怪吗?

最佳答案

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



如果您向它们发出CMD1,则某些 Controller (主要是更新的容量和更高容量的卡)将仅停留在IDLE中。
重置后应首先发出CMD8 0x1AA(CMD0),然后使用CMD55 + ACMD41

tl; dr初始化卡,您应该:

  • CMD0 arg:0x0,CRC:0x95(响应:0x01)
  • CMD8 arg:0x000001AA,CRC:0x87(响应:0x01)
  • CMD55 arg:0x0,CRC:任何(CMD55是每个ACMD的前缀)
  • ACMD41,arg:0x40000000,CRC:任何
  • 如果响应:0x0,你还可以;如果是0x1,请转到3。

  • 请注意,大多数卡需要重复执行步骤3/4,通常重复一次,即实际顺序为CMD0/CMD8/CMD55/ACMD41/CMD55/ACMD41-确保可以尝试n次(在您的原因内选择n),并且如果没有,则假设失败。

    另外,请注意,至少应在CMD0之前和之后将S̲S̲(aka CS)置为低电平-实际上,在向SD卡发送任何命令时,可能始终置为低电平。

    关于spi - SDHC microSD卡和SPI初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8080718/

    10-13 06:00