SD-scard-对应CMD指令集讲解

目录:
SD的基本寄存器和基础信息描述:

SCR 寄存器:
<该寄存器保存的SD的特殊性信息(例如支持的总线位宽,SD卡的版本),MMC卡没有此寄存器,获取该寄存器的数据需要从数据线读的>


CSD寄存器:


OCR 寄存器:
<该寄存器保存着SD的可供电范围,并且区别是否为HC卡(根据返回的ORC回应第30位是否置1).>


CIA 参数描述:


CID参数描述:


CIS参数描述:
<标识号和长度加后续内容表示一个节点>


Card_Status寄存器
状态寄存器


SD卡的插入检测一般都是对应的中断触发脚,作为检测当前SD卡有没有被插入卡槽。

SD卡中的CMD命令子集:

CMD_0
当前指令位,进入空闲状态,该指令无灰度
CMD_1
读OCR寄存器,获取OCR寄存器里面的必要信息
CMD_2
发送CMD2,验证SD卡是否接入,长反馈(CID),广播获取卡的CID信息
CMD_3
发送CMD3,读取SD卡是否接入RCA (地址),短反馈 ,  广播获取SD卡所分配的相对地址
CMD_4
可选项:  SDIO不支持DSR 
CMD_6
选择服务: 在第1部分v1.10中添加了部分强制服务
CMD_7
发送CMD7,使能SD卡,如果参数值为0 , 即使取消所有选中SD卡
根据获取指定的RCA,选中SD卡,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中,
如果发送地址0,则表示取消选中全部卡
CMD_8
(CMD8): 发送CMD8指令过去,CRC校验值与发送的值相同,说明当前SD卡支持SD2.0协议。
CMD_9
发送CMD9,读取CSD寄存器获取卡的相关信息, 获取SD相关的存储信息,如块大小,容量等
CMD_10
发送CMD10 ,  读取CID信息
CMD_12
发送CMD12,强制停止所有传输. 停止多块传输操作
CMD_13
cmd13获取卡的状态,其实本质就是读 Card_Status 寄存器 
CMD_16
设置SD卡的块大小,在CSD寄存器有对应的操作描述,
CMD17
设置SD卡按照单个区块进行操作, 使SD卡进入传输状态,读取单个块。这个命令需要附带对应的地址参数
也就是需要读取的那个地址,按照整块读取出来。
CMD18
设置SD卡按照多块进行操作 , 使SD卡进入传输状态,读取多个块,直到收到CMD12为止,当前操作
会一直按照地址顺序读下去,直到接收到停止命令。
CMD_24
使SD卡进入传输状态,写入单个块。
CMD_25
使SD卡进入传输状态,写入多个块 
其实CMD24-25 和 CMD 17-18作为相对应的方向操作,一个进行读,一个进行写。都有对应的单块和多块分别。
CMD_27
写CSD寄存器/修改CSD寄存器里的数据,(不建议)
CMD_28
设置写保护块的地址
CMD_29
擦除写保护块的地址
CMD_32:
设置擦除块的起始地址,作为连续擦除机制使用
CMD_33
设置擦除块的终止地址,作为连续擦除机制使用 
CMD_38
擦除所选择的块
CMD_55    ( 说明指令 )
特殊指令前命令,在发送ACMD类指令前,需要发送此命令 

SD卡中的ACMD命令子集:
要注意一下ACMD和CMD之间的区别,ACMD是特殊命令,但是发送方法和SDICARG和SDICCON的
命令发送一样,但是每次发送ACMD命令之前,一定要发送一条CMD55说明命令,发送CMD55之后说明下一条命令属于特殊命令集ACMD。

ACMD_6
设置SD卡的总线位宽,这个需要读取SCR确定
ACMD_13
SD卡状态
ACMD_41
获取SD电压值,作为测试当前SD卡的支持的协议,所需的电压值是否正常。
ACMD_51 
获取SD卡的SCR寄存器的值

下面SD卡状态为连续状态:

CMD55+ACMD51
SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽
CMD7 + CMD16
发送CMD7,使能SD卡,使其进入传输状态),接着发送CMD16设置块大小(根据前面读取的CSD信息确定)。
CMD17/CMD18
发送CMD17/CMD18,命令的参数需要根据初始化时所判断的卡类型填写,按字节或按块.
循环读取数据,
CMD32-CMD33
连续擦除对应连续地址块的内存

《会持续更新当前表–来源自网络整理》
关注微信公众号 一起学习 ( 技术Code城 )

你可能感兴趣的:(笔记,库工具,c语言)