2011-11-10 56 views
5

我有一个32   GB金士顿SDHC microSD卡,必须通过SPIMSP430F2618进行通信。我无法使用CMD55 + ACMD41(bit30设置为1)对其进行初始化,如SD规范文件中所述。什么工作是这样的顺序:SDHC microSD卡和SPI初始化

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.但是,它并不稳定,有时可以工作,有时不会。这可能与硬件有关。

卡片是否响应CMD1的参数为0x40000000这不奇怪吗?

回答

6

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

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

如果您向其发出CMD1,某些控制器(主要是更新的和更高容量的卡)将停留在IDLE中。 复位后应首先发出CMD8 0x1AACMD0),然后使用CMD55 + ACMD41

TL;博士初始化卡,你应该:

  1. CMD0 ARG:0x0,CRC:0x95(应答:0x01

  2. CMD8 ARG:0x000001AA,CRC:0x87(应答:0x01

  3. CMD55 ARG:0x0,CRC:任何(CMD55作为前缀ACMD

  4. ACMD41,ARG:0x40000000,CRC:任何

  5. 如果响应:0x0,你行;如果是0x1,转到3.

注意,大多数卡需要步骤3/4重复,一般一次,即在实际的序列是CMD0/CMD8/CMD55/ACMD41/CMD55/ACMD41 - 以一定要试试n次(在你的理由中选择n),如果没有,则认为失败。

此外,请注意,您应该断言SS(又名CS)低至少在CMD0之前和之后 - 实际上,可能总是发送任何命令到SD卡时。