SD NAND的操作命令遵循SD存储卡协议(SD Physical Layer Specification),主要通过SDIO或SPI接口与主机通信。其命令体系涵盖初始化、数据传输、状态管理、安全控制等功能,以下是核心命令的分类说明及操作要点:
CMD0 (GO_IDLE_STATE)
功能:强制卡进入空闲状态(Idle State),复位内部寄存器。
应用场景:上电初始化或软件复位。
CMD8 (SEND_IF_COND)
功能:检测卡支持的电压范围及接口版本(SD 2.0+)。
响应:若卡返回有效响应(如0x1AA),则为SD 2.0及以上版本;无效响应则可能为SD 1.1或MMC。
ACMD41 (SD_SEND_OP_COND)
功能:协商操作电压,并等待卡准备就绪(通过响应中的Busy位判断)。
注意:需先发送CMD55 (APP_CMD) 声明后续为应用命令。
CMD16 (SET_BLOCKLEN)
功能:设置单块数据长度(默认512字节)。
关键点:读写操作前需明确块大小,否则可能导致地址错位(ADDRESS_ERROR)。
CMD17/24 (READ_SINGLE_BLOCK/WRITE_SINGLE_BLOCK)
功能:单块读/写操作,指定起始地址后传输单块数据。
时序:写操作需在主机发送数据后等待卡的CRC状态令牌(010表成功)。
CMD18/25 (READ_MULTIPLE_BLOCK/WRITE_MULTIPLE_BLOCK)
功能:连续多块读/写,通过CMD12 (STOP_TRANSMISSION) 终止传输。
优化:写操作前发送ACMD23 (SET_WRITE_BLOCK_COUNT) 预定义块数,提升效率。
数据校验机制
每块数据附加CRC16校验位,传输错误时卡返回负状态(101)。
CMD13 (SEND_STATUS)
READY_FOR_DATA
:标识缓冲区是否可接收新数据。
CURRENT_STATE
:卡当前状态(如传输态、编程态)。
功能:读取32位卡状态(Card Status)或512位扩展状态(SD Status)。
关键字段:
ACMD6 (SET_BUS_WIDTH)
功能:切换数据总线宽度(1位或4位模式)。
限制:仅在传输状态(Transfer State)有效。
CMD11 (VOLTAGE_SWITCH)
功能:将信号电平从3.3V切换至1.8V(UHS-I模式)。
条件:卡需支持UHS-I,且ACMD41中S18R=1。
CMD42 (LOCK_UNLOCK)
用CMD16设置块长度为密码长度+2。
发送数据包(如0x01设置密码,0x04解锁)。
功能:密码管理(设置/清除/修改密码)及卡锁定/解锁。
操作流程:
CMD32/33/38 (ERASE)
功能:擦除指定扇区(CMD32/33定义起止地址,CMD38执行擦除)。
注意:擦除粒度由CSD寄存器定义,最小单位为扇区(通常含多个块)。
CMD19 (TUNING_BLOCK)
功能:发送调试块(64字节预定义模式),优化信号采样点。
应用场景:UHS-I模式下补偿时序偏差(如PCB负载差异)。
CMD55 (APP_CMD)
功能:声明下一命令为应用特定命令(ACMDxx的前置命令)。
命令 | 类型 | 功能描述 | 典型应用场景 |
---|---|---|---|
CMD0 | 广播命令 | 复位卡至空闲状态 | 初始化/复位 |
CMD8 | 点对点 | 检测SD 2.0+兼容性 | 版本识别 |
ACMD41 | 应用命令 | 设置操作电压 | 电压协商 |
CMD16 | 配置命令 | 设置数据块长度 | 读写前预处理 |
CMD17 | 读命令 | 单块读取 | 小数据读取 |
CMD24 | 写命令 | 单块写入 | 小数据写入 |
CMD42 | 安全命令 | 密码管理与锁定 | 数据加密保护 |
CMD13 | 状态命令 | 读取卡/扩展状态 | 故障诊断 |
物理特性限制:
写操作前需擦除目标块(NAND特性),但SD NAND控制器自动处理此过程,用户无需显式调用擦除。
状态机约束:
部分命令(如ACMD6)仅在传输状态有效,错误状态下发令将返回ILLEGAL_COMMAND
。
SPI模式差异:
SPI模式下不支持Class 1/3/9命令(如加密相关命令),且初始化流程需省略CMD。
如需具体命令格式或时序图细节,可参考SD物理层协议文档或联系芯片供应商(如芯存者提供驱动例程)。
上一篇:microsd卡为什么容易坏