首页 > 解决方案 > CRC CMD18 SD 卡

问题描述

我正在尝试使用 SPI 和 DSP 读取 SDHC 卡。

我使用 CMD17 命令成功读取了很多信息(容量,一些其他信息)。

现在我想使用 CMD18 命令(READ_MULTIPLE_BLOCK),因为我想读取 2 个扇区(2 * 512 字节)。我将所有值放在缓冲区中。

当我读到它时,不在卡上的 2 个扇区之间有 4 个字节(当我使用 4GB 4 类或 10 个字节时,当我使用 4GB 10 类时)(我用 HxD 读取了 2 个扇区)软件)。这些价值观是什么?

这是一个 4GB Class 4 的示例:

缓冲区值:

buffer[511] = 68    **// Good value**
buffer[512] = 143   // Bad value
buffer[513] = 178   // Bad value
buffer[514] = 255   // Bad value
buffer[515] = 254   // Bad value
buffer[516] = 48    **// Good value**

使用 HxD 读取的实际值

buffer[511] = 68    **// Good value**
buffer[512] = 48    **// Good value**
buffer[513] = 54    **// Good value**
buffer[514] = 48    **// Good value**
buffer[515] = 52    **// Good value**
buffer[516] = 69    **// Good value**

我不发送 CRC (0xFF),有问题吗?

谢谢您的帮助。

问候,

标签: sd-card

解决方案


buffer[512] = 143 // 错误值

buffer[513] = 178 // 错误值

这两个字节是 512 字节块的 CRC。可以不使用,但不能从接收流中拒绝。

buffer[514] = 255 // 错误值

卡预充下一区块,每次随机获得数量(包括零)255张。(取决于 SPI 速度和卡速度)

buffer[515] = 254 // 错误值

卡已准备好传输下一个数据块。您应该等待 254,然后您知道以下数据将是正确的。实际上,即使在第一个数据块之前,您也应该等待/获取这些 255...255、254。


推荐阅读