【发布时间】:2012-02-10 15:05:32
【问题描述】:
我一直在尝试使用LPC1766 SPI 外围设备做一个 SD 卡接口,但现在我遇到了一个我无法在任何地方找到答案的问题。
问题是:SDHC 卡没有按预期响应写入和读取命令。
在基于 Chan 的流程图和 NXP 应用说明的初始化中一切正常。我可以区分卡片版本,读取 OCR、CID、CSD 并确定它们的大小。
在这一步之后,我开始每隔一秒写入一个块并读回它以检查数据完整性。在金士顿 SDHC 4 GB Class 4 卡上,我可以发送第一个写入命令,但在第二个上,该卡甚至没有向 CMD24 应答(0x00 或 0x01)。使用 SanDisk 4 GB Class 4 卡,结果是不同的,每个命令都由卡回答,但在读回数据时我只得到零(我确定我没有写零)。如果我使用 SDSC 卡,一切正常。
我知道 SDHC 是块寻址而不是字节寻址,并且我需要发送 ACMD41 并开启 CCS 以用于 SDHC。我也知道时钟频率不是问题(使用 400 KHz 启动,然后 20 MHz 写入/读取),因为我刚刚打开了 CRC 检查并且所有卡都在接受命令和数据。如果我停止计算 CRC,所有卡都会拒绝命令和数据。
【问题讨论】:
-
使用 Chan 的 FatFs,我在使用大于 2Gb 的卡上取得了不同程度的成功。我一直认为有效的卡是具有 2048 字节块的 SD 版本 1.01 SDSC 卡,而不是 v2.0 SDHC。我从来没有进一步研究它,因为我不需要更高的容量。
-
我记得我稍微修改了Chan的代码,这样我就可以在没有电源的情况下正确初始化SanDisk卡。您能出示您使用的 SD 卡代码吗?
-
原因也可能是SPI驱动,如果你使用的是FIFO的,请注意TX-Fifo完全填充时RX-Fifo可能溢出的问题,因为它可以有效发送17字节(我的驱动程序在那里失败)
标签: embedded sd-card spi lpc sdhc