microSDHC 卡在 CMD25 WRITE_MULTIPLE_BLOCK 的数据传输部分返回垃圾字节,为什么/它们是什么?

问题描述 投票:0回答:1

我正在用 C 语言编写一个低级驱动程序,以通过 SPI 与 microSDHC 卡进行通信。到目前为止,我已经能够成功初始化卡、读取单个块、读取多个块以及写入单个块(块大小512)。但是,当我尝试写入多个块时,卡正确响应 CMD25(写入多个块),但是当发送第一个数据块时,卡似乎回显开始数据令牌(0xFE),然后发送垃圾(? ) 周期性字节。

我希望在数据传输期间从卡中看到 0xFF,所以我不确定为什么会看到这些字节,或者它们的含义。任何人都可以提供有关可能出现问题或如何确定卡响应这些字节的原因的见解吗?

更多信息:

这是我的设置中 CMD25 的跟踪和数据传输的开始:

所以,我传输命令字节[0x40 | 25, 0x00, 0x00, 0x00, 0x00, 0x01],这是从地址/扇区 0 开始执行多块写入的格式。卡响应 0x00,表明它处于 READY 状态。然后,我发送数据开始令牌 (0xFE),后跟 514 字节的 0xA5(512 块 + 未由卡检查的 16 位 CRC)。但是,由于某种原因,卡在我发送后立即响应 0xFE,并且正如跟踪所示,在数据传输期间我会定期从卡获取非 0xFF 字节。每次运行时,垃圾字节的值都会发生变化,但似乎总是以卡中的 0xFE 开头。

microSDHC卡是金士顿品牌,32GB,据我从数据表来看,它应该支持CMD25。

这是 CMD24、单块写入和数据传输开始的跟踪,它确实工作正常,我通过读回块来验证:

sd-card spi
1个回答
1
投票

我发现了问题所在。 CMD25 的“开始”块标记是 0xFC,与单块写入的开始标记 0xFE 不同。使用0xFC后,SD卡正确响应CMD25。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.