6.6.33 Dynamic Capacity Management 动态容量管理
/*
动态容量管理是一种功能,允许EMMC动态调整其报告的容量。当EMMC有磨损块并需要重新分配备用块来替换它们时,此功能非常有用。使用动态容量管理,当检测到磨损块时,EMMC可以向host报告降低的容量,然后重新分配备用块来替换它们。这使得EMMC即使具有磨损块的情况下,仍然可以继续工作,而不会导致任何数据丢失或损坏。
要使用动态容量管理,host必须使用下发带有特殊参数的CMD6命令从而启用此功能。接着,EMMC将监视其块的磨损程度,并相应调整其报告的容量。EMMC还将通过ext_csd寄存器提供有关实际容量和磨损块数量的信息。
值得注意的是,动态容量管理可能会导致EMMC的报告容量随时间波动。这是正常行为,不表示EMMC出现任何故障。
*/
大量的内存使用和Flash的老化可能会导致坏块。动态容量管理为EMMC提供了一种机制,可以减少其报告的容量并延长设备的使用寿命。
操作动态容量的机制基于内存阵列分区和WP组的粒度(见6.14章节)。
通过释放用户区域地址空间内的任何WP组来减少容量。释放的WP组将成为永久写保护组,不得对其进行读取:写入释放的WP组中的地址将返回WP错误;从释放的WP组中的地址读取是被禁止的,可能会返回错误;
使用CMD30检查写保护和使用CMD31检查写保护类型时,应相应地说明受保护的组和永久写保护的方式。
释放写保护组的前提是在释放之前必须先取消保护,才能被释放掉。且通用分区的写保护组也不能被释放 - 只有来自用户区域的组可以被释放。
EMMC在ext_csd寄存器的第58字节中保留指示DYNCAP_NEEDED功能,以通知host需要释放多少个WP组。host应监视此字节并释放所请求的WP组,以使EMMC继续正常工作。
如果EMMC报告非零的DYNCAP_NEEDED,而host没有相应地释放WP组,则EMMC的性能可能会降低,最终变得无法正常工作。
此外,如果host将值“1”写入EXCEPTION_EVENTS_CTRL的DYNCAP_EVENT_EN,可以报告DYNCAP_NEEDED的状态的异常事件位。一旦启用,EMMC状态中的异常位(在每个R1响应中报告)应设置为非零的DYNCAP_NEEDED。
为了释放WP组并查询组的状态,host应首先将EXT_CSD字节[59]中的CLASS_6_CTRL设置为0x01(参见表174),然后使用类6命令(CMD28-31)来释放和/或查询WP组的状态。在使用类6命令进行写保护操作之前,host应将CLASS_6_CTRL设置为0x00。
当CLASS_6_CTRL设置为0x01时:
- CMD28用于释放WP组
- CMD29被忽略(无操作)
- CMD30返回已释放或未释放WP组的状态
- CMD31返回一个固定的64位零模式
动态容量命令和状态仅适用于大容量EMMC,并基于大容量写保护组的大小。
EMMC内部用户区域的大小在通电时不应更改,即使从用户区