SD卡相关寄存器简介

SD Association制定了 SD卡、SDIO的相关的标准,目前物理层协议已经发展到 8.0,它定义了六个 SD卡接口寄存器,OCR、CID、CSD、RCA、DSR、SCR以及没直接说明的 SSR和 CSR。

OCR

工作条件寄存器,Operation conditions register,32 bits。通过 CMD1(SEND_OP_COND)获取,在 CMD线上传输,包括以下信息:

OCR

对比 eMMC的 OCR寄存器还是有相似性的,目前常用的是 SDHC/SDXC卡,主要关注

bit [31],忙状态位,在 device初始化完成后置位;

bit [30],0是 SDSC卡,1则是 SDHC/SDXC卡;

bit [29],1则是 UHS-II卡;

bit [24],置位则表示 device接受 ACMD41设置 1.8V为工作电压;

bit [23:15],表示 device支持的电压,基本是 High Speed mode用的;

bit [7],预留给低电压。现在 UHS-I mode的工作电压就是 1.8V,但这个 bit在 physical layer version 8.00还是没有描述。

CID

卡识别寄存器,Card IDentification register,128 bits。通过 CMD2(ALL_SEND_CID)或 CMD10(SEND_CID)获取,在 CMD线上传输。CMD2在 Ready State阶段获取,CMD10在 Stand-by State阶段使用,并且需要指定 RCA。CID寄存器的值是唯一的,常用于产品身份识别、key的派生等。CID寄存器包括以下信息:

CID

CSD

卡特性数据寄存器,Card-Specific Data register,128 bits。通过 CMD9(SEND_CSD)获取。CSD寄存器提供了 device内容访问方式的信息,定义了块大小,SD卡容量大小、数据格式、纠错类型、最长数据访问时间、数据传输速度、DSR寄存器是否可用等。可以通过 CMD27(PROGRAM_CSD)对可编程部分(marked by W/E)进行修改。更多详细信息可查看协议 5.3 CSD Register。

CSD structure

bit [127:126],CSD_STRUCTURE,描述 CSD register的版本,0x0为 Version 1.0对应 SDSC,0x1为 Version 2.0对应 SDHC/SDXC,0x2为 Version 3.0对应 SDUC。

下图是 CSD register (Version 2.0):

CSD 2.0

bit [95:84],卡支持的命令集,12 bits。目前定义了 12种命令集,所有版本的 SD卡必须支持 Class 0,2,4,5和 8,SDHC、SDXC、SDUC还需要支持 Class 7,支持哪个 Class就需要在对应的 bit置1。

CCC

bit [69:48],C_SIZE,卡容量,22 bits,计算方法是 C_SIZE+1乘 2的 READ_BL_LEN次方。例如,用 SDHC卡最大容量 32GB - 80MB计算,则 C_SIZE是 0x00ff5f(65375),即 65376 * 512 / 1024 /1024 = 31.921875‬GB。

RCA

相对地址寄存器,Relative card address register,16 bits。通过 CMD3(SET_RELATIVE_ADDR)设置。host在 Identification State阶段对 device设置地址,用于后续的通信。

DSR

Driver stage register,16 bits,通过 CMD4(SET_DSR)配置。在 SD中,这个寄存器是可选的,不一定需要实现。它可选择性地用于改善总线在扩展工作条件下的性能(取决于总线长度、传输速率或设备数量等参数)。具体影响 CMD和 DAT的总线驱动器中的预驱动级( pre-driver stage)和互补驱动晶体管,配置预驱动级的输出电压的上升和下降时间和互补驱动晶体管的数量。实际场景还未遇到需要配置的情况。

SCR

SD卡配置寄存器,SD CARD Configuration Register,64 bits,通过 ACMD51(SEND_SCR),从 DAT线读回。具体描述了 SD卡的版本、总线宽度、数据擦除后颗粒是 “0”或 “1”等。

SCR

bit [59:56](SD_SPEC)、bit [47](SD_SPEC3)、bit [42](SD_SPEC4)、bit [41:38](SD_SPECX),可以用于判断 SD卡的版本,不过常用的 SDXC/UHS-I mode的卡只需用上 SD_SPEC和 SD_SPEC3。

SCR_SPEC

bit [35:32],CMD_SUPPORT,支持 CMD20、CMD23、CMD48/49、CMD58/59会在这里有具体的 bit描述,当然首先要支持对应的 CCC(Card Command Class)。

SSR

SD 状态寄存器,SD Status register,512 bits, 通过 ACMD13(SD_STATUS),从 DAT线读回。描述有总线位宽、速度等级、保护区域大小、擦除相关参数等,具体查看协议 4.10.2 SD Status。

CSR

SD卡状态寄存器,Card Status,32 bits,通过 CMD13(SEND_STATUS),从 CMD线读回,response为 R1。描述卡是否发生了什么错误或者处于什么状态,例如 bit [29],传输设置的块长度是否与卡匹配;bit [27],擦除目的块无效;bit [25],卡是否上锁;bit [20],卡内部控制器是否出错;具体看协议 4.10.2 Card Status。


SD卡相关寄存器简介
http://xxxdk.xyz/xxx/2020/10/SD卡相关寄存器简介/
作者
sni
发布于
2020年10月20日
许可协议