eMMC器件相关寄存器简介

前言

eMMC / SD Card / SDIO是三个非常有趣的设备/接口,在 Linux,它们的驱动都放在了 “drivers/mmc”目录,协议是两个不同的组织制定的。

JDEDC在 JESD84-B51协议中定义了七个 eMMC设备接口寄存器,OCR、CID、CSD、EXT_CSD、RCA、DSR和 QSR。

OCR

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

OCR

bit [23:7],device的工作电压配置,即 host与 device通信所需的电压范围;

bit [30:29],表明 device的访问模式,包括按 byte寻址和按 sector寻址,容量小于等于 2GB的 eMMC器件为 byte mode,大于2GB的为 sector mode(host也可以通过 EXT_CSD [215:212]寄存器的 SEC_COUNT来确认寻址模式);

bit [31],状态信息位,在 device初始化完成后置位。

CID

设备识别寄存器,Device 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

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

CSD

CCC 表示 eMMC支持的指令集;READ_BL_LEN表示读块的最大长度,WRITE_BL_LEN与它一致;DSR_IMP用于确认 DSR寄存器是否允许配置。

EXT_CSD

扩展设备特性数据寄存器,Extended CSD register,512 bytes。通过 CMD8(SEND_EXT_CSD)获取。高 320 bytes是属性段,定义了 device的能力,不能被host修改,低 192 bytes是模式段,定义了 device的工作配置,可以通过 CMD6(SWITCH)改变。EXT_CSD寄存器内容较长,可自行查看协议 7.4 Extended CSD register。EXT_CSD寄存器的作用十分的丰富:

1、切换 eMMC boot/RPMB/User Data分区(PARTITION_CONFIG [179] [2:0] PARTITION_ACCESS);

2、查看 eMMC寿命(DEVICE_LIFE_TIME_EST_TYP_B [269]、DEVICE_LIFE_TIME_EST_TYP_A [268]、PRE_EOL_INFO [267]);

3、可靠写(WR_REL_PARAM [166]、ERASE_GROUP_DEF [175]=0x1、WR_REL_SET [167]=0x1f/all、PARTITION_SETTING_COMPLETED [155]=0x1);

4、写保护(HC_ERASE_GRP_SIZE [224]、ERASE_GROUP_DEF [175]、HC_WP_GRP_SIZE [221])

5、… 等。

RCA

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

DSR

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

QSR

队列状态寄存器,Queue Status Register,队列状态寄存器,32 bits。通过 CMD13(SEND_STATUS)并设置传参 SQS位(bit [15])为 1,进行一次 QSR查询,host用以确认各任务队列处于准备中还是准备执行。CMDQ相关知识,建议多看协议 “Command Queuing”相关内容,例如 “Annex B (Normative) Host Controller Interface for Command Queuing”。


eMMC器件相关寄存器简介
http://xxxdk.xyz/xxx/2020/09/eMMC器件关键寄存器简介/
作者
sni
发布于
2020年9月10日
许可协议