【eMMC协议】6.6.15 - 6.6.22

6.6.15 Write protect management

  1. 为了允许主机保护数据不被擦除或写入,eMMC应支持两个级别的写入保护命令:
  • 通过在CSD中设置永久或临时写保护位,可以对整个设备(包括boot分区、GPP分区、RPMB和UDA/EUDA分区)进行写保护。 当对整个设备应用永久保护时,它会覆盖当前在整个设备或特定段中启用的所有其他保护机制。CSD寄存器位和扩展CSD寄存器位数不受此保护的影响。 当为整个设备启用临时写保护时,它仅适用于那些尚未受到其他机制保护的段。
  • 在EMMC中,特定段可以是永久、上电或临时写保护方式。EXT_CSD中的ERASE_GROUP_DEF决定了segment size。当设置为0时,segment size以CSD寄存器中指定的WP_GRP_SIZE擦除组为单位定义。当设置为1时,segment size以EXT_CSD中指定的HC_WP_GRP_SIZE擦除组为单位定义。
  • 如果host没有为设备设置ERASE_GROUP_DEF位,该设备的高容量写保护已在上一次电源循环中的某些区域中设置,则当主机向该设备发出写或擦除命令时,该设备可能显示未知行为,因为先前设置的写保护组大小与当前写保护组尺寸不匹配。
  • SET_WRITE_PROT命令将寻址的写入保护组的写入保护设置为由US_PERM_WP_EN(EXT_CSD[171] bit 2)和US_PWR_WP_EN(EXT_CSD[171] bit 0)规定的写入保护的类型。 CLR_WRITE_PROT命令可以清除临时写入保护。如果CLR_WRITE_PROT命令应用于具有永久或上电写保护的写保护组,则该命令将失败。在这里插入图片描述
  1. 通过设置EXT_CSD USER_WP字节中的CD_PERM_WP_DIS、US_PERM_WP_DIS和US_PWR_WP_DIS位,可以禁用主机为整个设备设置永久保护以及为特定段设置永久和上电写保护的能力。
    在这里插入图片描述

  2. 主机能够使用SEND_WRITE_PROT_TYPE命令(CMD31)检查给定段的写保护状态。启用完整设备保护后,所有段将显示为具有永久保护。 SEND_WRITE_PROT和SEND_WRTE_PROT_TYPE命令类似于单个块读取命令。 设备应发送一个数据块,其中分别包含32或64个写保护位(表示从指定地址开始的32个写保护组),然后是16个CRC位。写保护命令中的地址字段是以字节为单位的group address,容量最高可达2GB,容量大于2GB时为扇区单位。

  3. 对于高于2 GB容量的设备,将忽略低于组大小的所有LSB。如果主机提供超出范围的地址作为CMD28、CMD29或CMD30的自变量,则设备将拒绝该命令,用address_out_of_range位集进行响应,并保持Tran状态。

6.6.18 Field Firmware Update

  1. 使用此机制,主机将新版本的固件下载到eMMC设备,并在成功下载后指示eMMC装置将新下载的固件安装到设备中。 为了启动FFU进程,主机首先通过读取EXT_CSD中的SUPPORTED_MODES和FW_CONFIG字段来检查eMMC设备是否支持FFU功能。如果eMMC设备支持FFU功能,主机可以启动FFU过程。
  2. FFU过程通过在EXT_CSD的MODE_CONFIG字段中切换到FFU模式开始。在FFU模式下,主机应使用closed-ended或open ended命令(CMD17/CMD18/CMD24/CMD25)下载新固件并读取供应商数据。在此模式下,主机应将这些命令的参数设置为FFU_ARG字段中定义的参数 。如果这些命令具有不同的参数,则不会定义设备行为,并且FFU过程可能会失败。主机应将块长度设置为DATA_SECTOR_SIZE。下载的fw必须与DATA_SECTOR_SIZE 大小对齐。
  3. 一旦处于FFU模式,主机就可以使用一个或多个写入命令向设备发送新的fw。 通过将EXT_CSD中的MODE_CONFIG字段设置回Normal状态,主机可以恢复写入和读取命令的常规功能。
  4. 切换出FFU模式可能会中止固件下载操作。当切换回FFU模式时,主机应检查FFU状态,通过读取扩展CSD中的NUMBER_OF_FW_SECTIONS_CORRECTLY_PROGRAMMED来获得有关成功下载的扇区数的指示。 在成功下载的扇区数为零的情况下,主机应重新开始从其第一个扇区下载新的固件包。如果成功下载的扇区数量为positive,主机应继续从下一个扇区下载,这将恢复固件下载操作。
  5. 如果设备支持MODE_OPERATION_CODES字段(在扩展CSD中FFU_FEATURES字段的SUPPORTED_MODE_OPERATION_CODES bit中定义),主机可以通过将MODE_OPELATION_CODES设置为FFU_ABORT来中止固件下载过程,以通知设备FFU操作已中止。
  6. 作为响应,设备应将NUMBER_OF_FW_SECTORS_CORRECTLY_PROGRAMMED字段设置为零,并准备接收新的固件包。如果主机成功将固件包下载到设备,则可以将MODE_OPERATION_CODES设置为FFU_INSTALL,设备应将NUMBER_OF_FW_SECTORS_CORRECTLY_PROGRAMMED字段设置为零,安装新固件并将MODE_CONFIG设置为Normal状态,以恢复读写命令的正常操作。
  7. 如果主机通过FFU过程执行CMD0/HW_Reset/power cycle,在成功执行FFU_INSTALL命令之前,设备可能会中止下载过程。 如果设备不支持MODE_OPERATION_CODES字段,主机将设置为NORMAL状态,并启动CMD0/HW_Reset/power cycle 以安装新固件。在这种情况下,设备不需要使用NUMBER_OF_FW_SECTIONS_CORRECTLY_PROGRAMMED。
  8. 当处于FFU_MODE且主机发送其他不属于以上命令时,设备将处于未知状态。

6.6.21 Sleep

  1. 设备可以通过睡眠/唤醒(CMD5)在睡眠状态和待机状态之间切换。在睡眠状态下,存储设备的功耗可以降到最小。 在此状态下,存储器设备仅对命令RESET(CMD0,参数为0x00000000或0xF0F0F0或H/W重置)和SLEEP/AWAKE(CMD5)作出反应。存储设备将忽略所有其他命令。待机状态和睡眠状态之间的状态转换超时时间在EXT_CSD寄存器S_A_TIMEOUT中定义。 休眠状态期间的最大电流消耗在EXT_CSD寄存器S_C_VCC和S_C_VCCQ中定义。
  2. Sleep命令:在Sleep/AWAKE(CMD5)参数中bit 15设置为1。Awake命令:SLEEP/Awake(CMD5)参数中bit 15设置为0。 sleep命令用于启动从待机状态到睡眠状态的状态转换。 Awake命令用于启动从睡眠状态到待机状态的转换 。存储器设备通过下拉DAT0线来表示busy。
  3. 在睡眠状态下,VCC电源可能会关闭。这是为了进一步节省系统功耗。只有在达到睡眠状态(存储器设备已清除busy位)后,才允许关闭VCC电源。 在允许从睡眠状态到待机状态的状态转换之前,VCC电源必须至少恢复到最低工作电压。
  4. 通过首先通过CMD7(可在锁定状态下执行的0类命令)取消选择设备,然后发出睡眠命令,可以将锁定的设备置于睡眠状态。这将允许设备在锁定时节省功耗。被锁定的设备随后可以退出睡眠,并通过Awake命令进入待机状态。 反过来,在设备进入睡眠状态后锁定设备,是无法生效的。

6.6.22 Replay Protected Memory Block

  1. 此功能为系统提供了一种方法,以验证和重放保护的方式将数据存储到特定的存储区域。通过首先将验证密钥信息编程到eMMC存储器(共享机密)来提供的。

  2. 由于在这个阶段还不能对系统进行身份验证,因此身份验证密钥编程必须在一个安全的环境中进行,就像在OEM生产中一样。此外,验证密钥用于用消息验证码(MAC)对RPMB区域进行的读写访问进行签名。 随机数生成和计数寄存器的使用为防止消息重放提供了额外的保护,因为攻击者可能会记录和重放消息。

  3. RPMB数据结构
    在这里插入图片描述

  • Request/Response

    定义对内存的请求和响应的类型。响应类型对应于上一个Replay Protected Memory Block读/写请求。

  • Key / MAC

    认证密钥或消息认证码(MAC)取决于发送方。MAC将在最后(或唯一)数据块中传递。

  • Result

    包括有关写入计数器的状态(有效、过期)以及对Replay Protected Memory Block的访问成功与否的信息

  • Write Counter

    主机发出的成功通过身份验证的数据写入请求和经过身份验证的设备配置。

  • Address

    要编程到RPMB或从中读取的数据的地址。地址是被访问的半扇区大小(256B)的序列号,第一个地址是0x0000。CMD 18和CMD 25中的地址参数将被忽略。

  • Nonce

    主机为请求生成的随机数,并由eMMC RPMB复制到responce中。

  • Data

    写入或者读取的数据

  • Block Count

    请求读取/编程的块数(半扇区,256B)。此值等于CMD23参数中的计数值。

  1. RPMB 内存映射
    • Key: 一次性可编程认证密钥寄存器。此寄存器不能被覆盖、擦除或读取。该密钥由eMMC RPMB用于在计算MAC时验证访问。
    • Write Counter: 主机发出的成功的已验证数据写入请求和已验证设备配置写入请求的总量的计数器值。eMMC生产后的初始值为0x0000 0000。在成功编程访问的同时,eMMC RPMB会自动将值增加一。无法重置该值。计数器达到其最大值0xFFFF FFFF后,它将不再递增(防止溢出),并且操作结果值中的位[7]将被永久设置。
    • Data: 只能通过成功验证的读/写来读取和写入的数据。此数据可能会被主机重写,但不能被擦除。
  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blank_time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值