eMMC分区管理

本文详细介绍了eMMC的分区管理,包括引导分区、RPMB分区和GPP的配置方法。讲解了如何设置增强属性和扩展属性,并强调了配置过程中应注意的事项,如分区大小限制和完成位的设置。此外,提到了访问和配置分区可能影响设备初始化时间和数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

存储器配置初始状态(在进行任何分区操作前)包含用户数据区(UDA)、PRMB 分区和引导
分区(BOOT)(大小和技术特性是存储器厂商定义的)组成。
在这里插入图片描述
嵌入式设备还为主机提供了为不同的使用模型配置具有独立地址空间的额外本地内存分区的可能性,从逻辑地址0x00000000开始。言外之意就是各个分区的起始地址都是从0x0开始的;

内存块区域划分为:

  • 2个启动区分区,大小为128kb的倍数,可以从e-MMC启动。
  • 1个RPMB分区,其大小定义为128 KB的倍数。
  • 4个General Purpose Area(GPP)用于存储敏感数据或其他主机使用模式的分区,大小为写保护组的倍数。
[    1.666209] mmcblk0: mmc0:0001 8GTF4R 7.28 GiB
[    1.671148] mmcblk0boot0: mmc0:0001 8GTF4R partition 1 4.00 MiB
[    1.677498] mmcblk0boot1: mmc0:0001 8GTF4R partition 2 4.00 MiB
[    1.687637] mmcblk0rpmb: mmc0:0001 8GTF4R partition 3 512 KiB, chardev (244:0)

每个通用区域分区(GPP)都可以通过增强或扩展的技术特性(例如更好的可靠性)来实现,从而将它们与默认存储介质区分开来。
如果设备支持增强存储介质特性,boot和RPMB区域分区将默认实现为增强存储介质。

通用性(续)

Boot和RPMB区域分区的大小和属性由内存制造商定义(只读),而通用区域分区(GPP)的大小和属性在设备生命周期中只能由主机编程一次(一次性可编程)。
此外,主机可以自由配置用户数据区(UDA)中的一个段作为增强存储介质,并根据写保护组指定其起始位置和大小。
该增强用户数据区的属性在设备生命周期中只能编程一次(一次性可编程)。

由主机进行的通用分区(GPP)和增强用户数据区(UDA)配置可影响先前存储的数据(将被损毁)和设备初始化时间。
特别地,在配置之后的第一次上电期之后的初始化时间会超过数据手册定义的最长初始化时间,因为内部控制器要执行主机规定配置的设置。.
还有随后的初始化阶段会受到新配置的影响。最大上电时序要求在设备技术文件中规定。

可能的最终配置如下:
在这里插入图片描述

命令限制

引导分区

  • 不允许 class 6 (Write Protect) and class 7 (Lock Device)命令

RPMB分区

  • Only commands of classes Class0, Class2 and Class4 are admitted. Still usage of any other
    command than CMD0, CMD6, CMD8, CMD12, CMD13, CMD15 or commands defined in
    6.6.22 shall be considered as illegal one

GPP

  • 允许命令类 0、2、4、5 和 6。
  • 可为每一分区中的每一个写保护分组各自设置写保护。因此主机可以在各个写保护
    分区内设置不同的写保护类型。

在增强用户数据区,用户数据区所允许的命令类中的所有命令均可发送。

增强属性和扩展属性

增强属性

扩展属性

每个通用分区(GPP)可以有不同的扩展分区属性。属性类型列表包括:

  • Default,没有扩展属性设置
  • System code, 一个很少更新的分区,包含重要的系统文件(例如,包含主机操作系统的可执行文件)
  • 非持久性的,一个用于临时信息的分区(例如,交换文件以扩展host virtual mmory space)

单个分区不能同时为其设置增强属性和扩展属性。

  • Default,没有扩展属性设置
  • Enhanced storage: (spec中未对该属性进行定义,该属性由芯片制造商定义)实际产品中,设定Enhanced storage media后,会把该分区存储介质由MLC改为SLC(MLC容量是SLC容量的两倍),可提高读写寿命、性能等。

如何配置分区

配置GPP分区

1.首先查询eMMC是否支持分区配置

通过CMD8查询得到EXT_CSD寄存器的内容, 查看PARTITIONING_SUPPORT [160] ,该寄存器是只读的,由厂商定义。
在这里插入图片描述
在这里插入图片描述

2.检查是否进行了分区配置配置分区

在这里插入图片描述
在这里插入图片描述

bit0该位被设置为通知设备参数的定义已经完成,设备可以开始其内部配置活动。如果突然断电,而这个bit还没有设置,分区的配置将无效,必须重新设置。

3.选择大容量擦除单元长度

使用CMD6 参数是0x03AF0100改变ERASE_GROUP_DEF [175]的bit0
在这里插入图片描述

4.设置分区大小

在这里插入图片描述
在这里插入图片描述
这个寄存器定义了大容量内存的写保护组大小,如果ERASE_GROUP_DEF的ENABLE设置为HIGH, 则写保护组的大小为512KB * HC_ERASE_GRP_SIZE * HC_WP_GRP_SIZE
如果将ERASE_GROUP_DEF中的ENABLE位清除为LOW或HC_WP_GRP_SIZE设置为0x00,写保护组大小定义将是原始情况。

在这里插入图片描述
这个寄存器定义了大容量内存的擦除单元大小。如果主ERASE_GROUP_DEF [175]的bit0=1,从机使用这些值进行擦除操作。擦除单元大小=512Kbyte × HC_ERASE_GRP_SIZE。
如果将ERASE_GROUP_DEF中的ENABLE位清除为LOW或HC_WP_GRP_SIZE设置为0x00,写保护组大小定义将是原始情况。

5.设置分区属性

(1).增强属性PARTITIONS_ATTRIBUTE [156],使用CMD6 参数0x039C0200设置bit1为1,GPP1为增强属性。
在这里插入图片描述
(2).扩展属性EXT_PARTITIONS_ATTRIBUTE [53:52] ,使用CMD6 参数0x03340200设置52位bit1为1,GPP1为system code属性。
在这里插入图片描述

6.设置完成位

在这里插入图片描述
在这里插入图片描述

bit0该位被设置为通知设备参数的定义已经完成,设备可以开始其内部配置活动。如果突然断电,而这个bit还没有设置,分区的配置将无效,必须重新设置。

增强用户分区配置

1.首先查询eMMC是否支持分区配置

通过CMD8查询得到EXT_CSD寄存器的内容, 查看PARTITIONING_SUPPORT [160] ,该寄存器是只读的,由厂商定义。
在这里插入图片描述
在这里插入图片描述

2.检查是否进行了分区配置配置分区

在这里插入图片描述
在这里插入图片描述

bit0该位被设置为通知设备参数的定义已经完成,设备可以开始其内部配置活动。如果突然断电,而这个bit还没有设置,分区的配置将无效,必须重新设置。

3.选择大容量擦除单元长度

使用CMD6 参数是0x03AF0100改变ERASE_GROUP_DEF [175]的bit0
在这里插入图片描述

4. 设置增强属性开始地址

在这里插入图片描述
地址要与写保护分组对齐(也就是说开始地址应该为写保护分组倍数)
在这里插入图片描述

5.设置增强分区大小

在这里插入图片描述
在这里插入图片描述

假设通过cmd6参数0x038C0A00修改大小为10, 这样ENH_SIZE_MULT [142:140] =00000000 00000000 00001010b;
Enhanced User Data Area size = 10 x 2 ^0 x 16 x 1 x 512KBytes = 80MB

6.设置分区属性

(1).增强属性PARTITIONS_ATTRIBUTE [156],使用CMD6 参数0x039C0100设置bit0为1,UDA为增强属性。
在这里插入图片描述

7.设置完成位

在这里插入图片描述
在这里插入图片描述

bit0该位被设置为通知设备参数的定义已经完成,设备可以开始其内部配置活动。如果突然断电,而这个bit还没有设置,分区的配置将无效,必须重新设置。

设置分区的注意点

1.设置增强属性大小的区域有上限范围

在这里插入图片描述
注意,增强用户分区(UDA)和4个增强GPP分区,加起来的区域不能大于该值。

2.设置PARTITION_SETTING_COMPLETED [155] 完成位的作用

bit0该位被设置为通知设备参数的定义已经完成,设备可以开始其内部配置活动。如果突然断电,而这个bit还没有设置,分区的配置将无效,必须重新设置。

### 3.用户数据分区(UDA)的大小包含用户数据分区的增强用户数据分区大小

在这里插入图片描述
问:emmc的容量存在哪个寄存器的哪个位置?

答:eMMC 的容量信息通常存储在 EXT_CSD(Extended Card Specific Data)寄存器的特定位置中。在 EXT_CSD 寄存器中,关于容量的信息通常存储在以下位置:

  • EXT_CSD 寄存器的 212-215 字节:这些字节通常包含了 eMMC
    的总容量信息。一般来说,这四个字节以字节为单位表示的总容量值。 通过读取 EXT_CSD 寄存器的 212-215 字节,可以获取
    eMMC 的总容量信息。
    在这里插入图片描述

访问分区

在这里插入图片描述
提供一份三星的eMMC物料的EXT_CSD寄存器默认配置

part_conf: 0x49, rst_func: 0x1, bus_conditions: 0xa
ext_csd[0]: 0x0
ext_csd[1]: 0x0
ext_csd[2]: 0x0
ext_csd[3]: 0x0
ext_csd[4]: 0x0
ext_csd[5]: 0x0
ext_csd[6]: 0x0
ext_csd[7]: 0x0
ext_csd[8]: 0x0
ext_csd[9]: 0x0
ext_csd[10]: 0x0
ext_csd[11]: 0x0
ext_csd[12]: 0x0
ext_csd[13]: 0x0
ext_csd[14]: 0x0
ext_csd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

linux顿悟吧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值