eMMC分区和存储的ROM address

关于eMMC的特性介绍:https://blog.csdn.net/CSDN1013/article/details/100859235

以下内容部分参考自JEDEC eMMC-5.1-JESD84-B51标准文档。

eMMC系统

应用处理器(AP)内部一般包含了eMMC Host Controller。其通过Clock,CMD, Data和Data Strobe与eMMC连接。

eMMC的部分主要包括Device Controller和内部的Flash。

 

寻址

eMMC 4.1的寻址方式是字节寻址(32bit)。==>带来的限制就是最大容量到2GB

为了支持更大容量的eMMC,添加了新的sector寻址的方式(1 sector=512bytes)。容量大于2GB的设备,都是采用sector寻址的方式。

 

传输

命令:命令(command)的传输方向为Host→Device, 通过CMD线串行传输

应答:应答(response)的传输方向为Host→ Device, 通过CMD线传输

数据:数据(Data)的传输方向是双向的(Host->Device或者Device->Host)。可以选择1位(DAT0),4位(DAT0-DAT3)或8位线传输(DAT0-DAT7)。

 

分区管理

eMMC默认有4个物理区域:RPMB, Boot Area Partition 1(第一个启动分区), Boot Area Partition 2(第二个用于启动的分区), User Data Area. 

Boot Area Partition 1/2 本身有一些默认值. 

RPMB(Replay Protected Memory Block重放保护内存块)分区的具体应用场景还没有遇到。可以参考这篇文章了解一下:https://blog.csdn.net/xiezhi123456/article/details/81479793

根据芯片厂商的启动过程文档和ROM大小,可以查看eMMC里不同的地址对应的image文件。

了解这个地址是实现以下目标的前提:

  1. 通过U-boot烧写/更新文件系统
  2. 供应商开发自己的USB FW Update功能的话,需要弄清楚ROM的分布(u-boot, SNOR及eMMC其他分区的地址,大小)

     

我们知道在AP启动的时候,一般会有一个倒计时(时间可以设定,比如10s或5s等)。在这个倒计时时间范围内,用户可以选择正常启动,进入U-boot console或者其他模式。

当选择U-boot命令行时,我们可以通过U-boot mmc相关的命令来查看:以下是MMC device 0的User Area Partition的信息。

#mmc part
Partition Map for MMC device 0  --   Partition Type: EFI
 
Part    Start LBA       End LBA         Name
        Attributes
        Type GUID
        Partition GUID
  1     0x00000022      0x00032021      "secure"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   30453444-3741-4544-4642-414234443045
  2     0x00032022      0x00034021      "boot"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   30453846-4231-3035-3842-433834383446
  3     0x00034022      0x0007f021      "system"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   31413234-3633-3639-3538-323734433843
  4     0x0007f022      0x0007f821      "env"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   41444630-3833-4244-4445-344334344235
  5     0x0007f822      0x0008f821      "home"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   36313735-3935-3439-3744-343534364533
  6     0x0008f822      0x0008f8e9      "dtb"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   33444544-3133-4442-3039-343234433342
  7     0x0008f8ea      0x00e8ffdd      "data"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   30373137-4438-4630-3335-303434394235

U-boot命令行下emmc相关的命令可以查看: https://blog.csdn.net/CSDN1013/article/details/109453915

但是,这些分区的信息并没有ARM-TF,DRAM配置信息,U-boot ROM在emmc中的具体地址。需要参考芯片厂商给的信息描述。如下图:

eMMC ROM layout

 

U-boot header信息节选:

ImageOffestSizeParameter
U-boot04u-boot Target Address
44DRAM Parameters

 

首先,需要切换Partition,因为Boot loader header和前期启动需要的ROM放在Boot Area Partition 1中。以DRAM参数为例:

切换到Boot partition 1,然后用mmc read读取emmc中的数据到内存中,然后把内存对应地址的数据显示出来。

#mmc dev 0 1
switch to partitions #1, OK
mmc0(part 1) is current device
 
//emmc layout表格中可以看到DRAM Parameters Size包含在U-boot header中,U-boot header的sector offset为504(MICOM OFFSET+248).所以需要先读取sector 504的数据
//从第0x000001F8(十进制为504)个sector开始,读取1298(16进制转换为512)个sector,到地址为0x24000000的内存中
# mmc read 0x24000000 0x000001F8 512
 
MMC read: dev # 0, block # 504, count 1298 ... 1298 blocks read: OK
 (79.2 MiB/s)
 
 
//从U-boot header表格中,可以看到DRAM Parameter size的offest是4,size也是4
//从0x24000000开始,显示内存中的数据。DRAM Parameter size的值为0x200
# md 0x24000000
24000000: 30000000 00000200 0009e600 0001f400    ...0............
24000010: 00000000 00004400 00000000 00000001    .....D..........
24000020: 40000000 29b00000 00000000 00000000    ...@...)........
24000030: 00000000 00000000 00000000 00000000    ................
24000040: 00000000 00000000 00000000 00000000    ................
24000050: 00000000 00000000 00000000 00000000    ................
24000060: 00000000 00000000 00000000 00000000    ................
24000070: 00000000 00000000 00000000 00000000    ................
24000080: 00000000 00000000 00000000 00000000    ................
24000090: 00000000 00000000 00000000 00000000    ................
240000a0: 00000000 00000000 00000000 00000000    ................
240000b0: 00000000 00000000 00000000 00000000    ................
240000c0: 00000000 00000000 00000000 00000000    ................
240000d0: 00000000 00000000 00000000 00000000    ................
240000e0: 00000000 00000000 00000000 00000000    ................
240000f0: 00000000 00000000 00000000 00000000    ................

其他部分的参数查找方法类似,只是你需要从芯片厂商那里获得其他ROM的offset和大小。

如果芯片厂商给了你所有ROM的起始sector, offest和size,那么你就可以知道它们在emmc中的位置。

 

 

### UFS在主板中的作用及功能介绍 UFS(Universal Flash Storage)作为一种高性能、高可靠性的存储解决方案,在主板中承担着至关重要的角色。它不仅提供了高效的存储能力,还优化了系统的整体性能功耗表现。 #### 1. 高效的数据存取 UFS通过采用串行接口技术,支持全双工操作模式,允许同时读写数据[^1]。这种设计显著提升了数据传输速率,使得主板能够更快速地加载操作系统、应用程序以及处理多媒体文件。 #### 2. 支持多任务并发 相比传统的eMMC存储方案,UFS具备更高的带宽利用率支持多个命令队列的能力。这使其能够在多任务环境中表现出色,尤其是在需要频繁切换任务或大量数据交互的应用场景下。 #### 3. 提升系统启动速度与应用响应时间 由于UFS具有更快的随机读写能力更低的延迟特性,因此可以大幅缩短设备开机时间应用程序启动所需的时间。这对于追求用户体验的产品尤为重要。 #### 4. 节能降耗 尽管提供更高性能的同时,UFS也注重降低能耗水平,从而延长电池续航时间对于便携式电子产品而言尤为关键. 以下是基于Python模拟的一个简单例子展示如何初始化一个假想环境下的ufs模块: ```python class UFSModule: def __init__(self, capacity_gb=64): self.capacity_gb = capacity_gb def read_data(self, address): # Simulate reading data from a specific address. return f"Data at {address} has been successfully read." def write_data(self, address, data): # Simulate writing data to a specific address. return f"{data} written to {address}." # Example usage of the UFS module class ufs_storage = UFSModule(capacity_gb=128) print(ufs_storage.read_data('0x1A')) print(ufs_storage.write_data('0x1B', 'Sample Data')) ``` 此代码片段仅作为概念验证,并未涉及实际硬件层面的操作细节。 ### 新增分区的相关说明 当涉及到具体项目如mt6771平台上的ROM开发时,则可能还需要考虑新增加特定用途之分區來滿足不同需求的情況。例如可以通过修改配置文件来定义新的逻辑卷组及其属性设置等步骤完成相应调整工作流程[^2]。 此外值得注意的是,I/O设备在整个计算机体系结构里同样发挥不可替代的作用它们连接外部世界让机器得以感知并与人类或其他装置互动交流其中涵盖了众多类别像前面提到过的键盘鼠标显示屏等等都是典型代表案例之一[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值