在 SPI 模式下读取 SD 卡时,如何区分数据令牌和错误令牌?

When reading an SD card in SPI Mode, how do I distinguish a data token from an error token?

对于 SPI 读取,发送 CMD27,取回命令响应,后跟数据令牌和数据或错误令牌。

Data token is  1 1 1 1 1 1 1 0
Error token is 0 0 0 X X X X X

据我所知,空闲读取为 1 位流,因此如果我将这样的掩码放在错误标记上,我将获得有效的数据标记:

                    start error token here
1 1 1 1 1 1 1 1 1 1 0 0 0 X X X X X X 1 1 1 1
      start data token here

如果读取的第一个数据字节以两个零位开始(极有可能),则这与错误标记不明确。寻找流的结尾不起作用,因为这会产生无限的 1 位。 (我预计在合法读取中会有 1 位的长流)。

考虑到跨坏扇区的 CMD28 读取,情况变得更糟(我需要远程 CMD28 来满足我的性能要求)。 Looking for end of stream swallows the next data start packet.

我确实有代码(大约 70 行)可以通过此接口成功初始化 SD 卡并读取其配置寄存器。我可以很容易地发送读取命令就好了。但是我不知道如何编写代码来判断返回的响应是否成功。

(抱歉,没有可显示的代码。您真的只想看到一个 ASM 循环从引脚中拉出位吗?)

发出读块命令(CMD17)或读多块(CMD18)命令后,卡片会输出全1,直到returnsR1(如有错误请指正)

返回 R1 后,卡将发出全 1 信号(阅读规范我得到的印象是 BUSY 仅在数据传输后才被允许,除非该命令的响应类型是 table 中的 R1b 7-3 ).

R1 之后不全为 1 的第一个字节将是数据标记 (0xFE) 或错误标记 (0x0X,其中 X 是从 1 到 F)。