本文主要是介绍EMMC/SD学习小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
eMMC之分区管理、总线协议和工作模式
JDEDC EMMC 协议中文
SD卡协议中文2.0 3.0
EMMC4.4 非Boot模式读流程
- 等待74个时钟
- CMD0 复位emmc至idle状态
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD0 | bc | 00000000 | - | GO_IDLE_STATE | 复位设备至idle状态 |
CMD0 | bc | f0f0f0f0 | - | GO_PRE_IDLE_STATE | 复位设备至pre-idle状态 |
CMD0 | - | fffffffa | - | GO_INITIATION | 启动替换的引导操作 |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD1 | bc | [31:0] OCR | R3 | SEND_OP_COND | 请求idle状态设备发送在CMD线发送其OCR结构 |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD2 | bc | [31:0] 填充位 | R2 | ALL_SEND_CID | 请求设备在CMD线发送其CID编号 |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD3 | ac | [31:16] RCA [15:0] 填充位 | R1 | SET_RELATIVE_ADDR | 分配相对地址到设备 |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD9 | ac | [31:16] RCA [15:0] 填充位 | R2 | SEND_CSD | SEND_CSD寻址的设备在CMD线上发送其设备专有数据(CSD) |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD7 | ac | [31:16] RCA [15:0] 填充位 | R2 | SELECT/DESELECT_C ARD | 在stand-by和transfer状态之间或program- ming和disconnect状态之间切换设备的命令。两种情况下,设备以其自己的相对地址被选定并以其他地址被取消选定;地址0取消所有设备的选定。 |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD13 | ac | [31:16] RCA [15:0] 填充位 | R1 | SEND_STATUS | 寻址的设备发送其状态寄存器 |
- 根据ECSD switch不同的位宽。(可选) CMD8, CMD13, CMD6
- CMD18读数据
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD18 | adtc | [31:0] 数据地址1 | R1 | READ_MULTIPLE_ BLOCK | 从设备向主机连续传输数据块,直至被停止命令中断,或所要求传输的块数。 |
SD1.0 初始化流程
- 等待74个时钟
- CMD0 复位SD卡至idle状态
- CMD8 发送SD 卡接口条件,包含了主机支持的电压信息,并询问卡是否支持。保留位应该设置为0。
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD8 | bcr | [31:12]保留位,[11:8]VHS,[7:0]检查模式 | R7 | SEND_IF_COND | 发送SD 卡接口条件,包含了主机支持的电压信息,并询问卡是否支持。保留位应该设置为0。 |
- ACMD41 发送卡的支持信息(HCS)。发送ACMD需要先发送CMD55。
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
CMD55 | ac | [31:16]RCA [15:0]填充位 | R1 | APP_CMD | 告诉卡,下个命令是特定应用命令,而不是标准命令。 |
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
ACMD41 | bcr | [31]保留位 [30]HCS(OCR30) [29:24]保留位 [23:0]VddVdd 电压(OCR[23:0]) | R3 | SD_SEND_OP_COND | 发送卡的支持信息(HCS),并要求卡通过命令线返回OCR 寄存器内容。当卡收到SEND_IF_COND 时,HCS 是有效的。保留位设为0。CCS 位对应OCR[30] |
- 接下来SD卡初始化就是CMD2和CMD3,大致是和MMC卡流程是一样的。后面有一些命令SD和MMC还是不同的,比如switch的命令就不同,SD卡使用的是ACMD6来定义数据的宽度等等,而MMC是使用CMD8来switch。
命令索引 | 类型 | 参数 | 应答 | 缩写 | 命令说明 |
---|
ACMD6 | ac | [31:2]填充位 [1:0]总线宽度 | R1 | SET_BUS_WIDTH | 定义数据总线的宽度(‘00’=1bit,‘10’=4bit)。接受的数据总线定义在SCR 寄存器中。 |
这篇关于EMMC/SD学习小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!