Emai:xiaohua0877@163.com SD 卡协议学习点滴 第二版本 1 SD卡协议学习点滴(一) 首先SD卡有所谓操作模式(operation mode)的概念,每种操作模式又具体对应一种或多种状态,主机通过发送命令可以使SD卡在不同的状态间转换,SD卡则接受命令,并根据自己现在所处状态做出不同的响应。 系统上电时刻或者搜寻 SD卡时,SD卡控制器应该处于 SD卡识别模式;SD卡在刚接入系统时刻也处于这种模式,并且处于此模式下的Idle状态。 SD卡识别模式:在这种模式下,控制器会检验SD卡的工作电压范围,识别SD卡类型,并要求它们发送各自的相对地址(Relative Card Address);这些操作在SD卡各自的CMD线上进行。所有的操作均使用默认的 SD卡识别时钟频率(identification clock rate) SD卡复位 :发送GO_IDLE_STATE(CMD0)到SD卡后,除处于非活动状态(Inactive state)之外的SD卡都会进入空闲状态(Idle state);在Idle状态,SD卡的CMD线处于输入模式,默认相对地址为 0x0000,默认驱动寄存器设定为最低速度,最大驱动电流能力。 工作条件检测在控制器和 SD卡进行任何通信之前,控制器不清楚 SD卡支持的工作电压范围,故而控制器首先使用默认的电压发送一条 reset指令(CMD0),紧跟着的CMD8指令,用于取得SD卡支持工作电压范围数据。SD卡通过检测CMD8的参数部分来检查控制器使用的工作电压,控制器通过分析回传的CMD8参数部分来校验 SD卡是否可以在所给电压下工作。如果 SD卡可以在指定电压下工作,则它回送CMD8的命令响应字,其中包含 check voltage, check pattern。如果 SD卡不支持所给电压,则SD卡不会给出任何响应信息,并继续处于 Idle状态。在PLV2.0(physical layer version2.0)下,在首次执行 ACMD41之前,必须执行 CMD8指令,用以初始化 SDHC卡,SDHC卡根据是否接收到 CMD8指令来鉴别控制器是否支持 PLV2.0协议。使用低电压的控制器也必须在ACMD41命令之前发送CMD8,避免可以工作在两种电压模式下的SD卡因为没有接收到 CMD8, 而默认工作在高电压环境下,被误认为是只支持高电压工作模式。 : SD_SEND_OP_COND(ACMD41)命令的目的是给予SD卡控制器一个识别SD卡是否可以在所给Vdd范围下工作的机制,如果 SD卡无法在指定 Vdd范围内工作,则它会进入非活动状态(Inactive state)。要注意的是,ACMD41是应用相关型命令,因而,每次发出的ACMD41命令都必须紧跟在一条 APP_CMD(CMD55)命令之后。在空闲态...