SDnand 中的 CMD25 是 SD 卡协议中的多块写入命令(WRITE_MULTIPLE_BLOCK),用于连续写入多个数据块,适用于需要高效批量传输数据的场景(如文件系统写入大文件)。以下是其核心特性和使用要点:
1. 发送ACMD23(块数=9,参数0x09)设置总块数。 2. 发送CMD25(起始地址0x00,参数0x00000000)。 3. 连续发送10个512字节数据块,每个块以0xFE结尾。 4. 发送CMD12停止传输,或通过CMD23设置块数后自动停止。
通过合理使用 CMD25 与 ACMD23,并结合总线优化和错误处理机制,可显著提升 SDnand 的多块写入效率和可靠性。
流程:
发送 CMD25:携带起始地址参数(32 位块地址,SDHC/SDXC 卡直接使用扇区号,SDSC 卡需转换为字节地址)
数据传输:主机连续发送数据块,每个块包含 512 字节数据、1 字节 CRC16 和 1 字节结束标志(SDHC/SDXC 固定为 512 字节,SDSC 可通过 CMD16 调整)
停止传输:使用 **CMD12(STOP_TRANSMISSION)终止多块写入,或通过CMD23(SET_BLOCK_COUNT)** 设置块数后自动停止
SDSC:参数为字节地址(需手动转换为 512 字节块)
块长度:
SDSC 卡可通过 CMD16 调整块大小,但需确保卡支持
擦除要求:若写入区域未被擦除,卡可能返回错误。建议通过 ACMD23 设置预擦除块数,提升写入速度
若未设置 ACMD23,卡可能仅写入一个块或报错
CMD12/CMD23:
CMD23(UHS-104 卡支持):可替代 CMD12,通过设置块数自动停止,避免时序问题
擦除未完成:若写入前未擦除块,卡可能返回忙状态(DAT0 拉低)
CRC 错误:数据块校验失败,需重试写入
状态查询:
若卡进入 “Programming State”(忙状态),需等待 DAT0 恢复高电平后再操作
时钟频率:在 UHS-I 模式下,时钟频率可提升至 50MHz(SDR50)或 100MHz(DDR50),需卡和主机支持
预擦除策略:通过 ACMD23 设置预擦除块数,减少写入延迟
注意事项:
电源稳定性:多块写入过程中需确保供电稳定,避免中途掉电导致数据丢失
厂商扩展:部分 SDnand 可能支持厂商特定命令(如 CMD55/CMD56),需参考具体文档。
上一篇:SDNAND的读写擦除过程
下一篇:没有了!