Flash 兼容(Combo)的实现及现状

内容

[KEYWORDS]

Flash Combo;eMMC Combo;Flash兼容

[DESCRIPTION]

    Flash combo可以简单分为两个部分,一个是DRAMcombo,同一份load中兼容若干颗ID/Type/Size不同的Flash,在开机过程preloader阶段,正确识别主板上使用的Flash,进行EMI时序的配置;另一种是ROMcombo,根据ROM类型,可以分为eMMCnand,对于eMMC,因为其自带controller,且具有相对固定的分区格式:Boot1Boot2RPMBUser regioncombo的目的是将同一份load正确下载到不同分区情况的eMMC上;nand flash上没有controller,需要正确的时序进行初始化,且不同page sizenand flash,其存储方式不同,combo的目的是同一份load可以实现不同page size上的正确存取。

 

[SOLUTION]

1)   DRAM Combo

        因为EMI controller设计的原因,不同平台上的处理方式不同,目前71/72平台上DRAM的兼容情况及实现请参考FAQ11403 如何在MT6571/MT6572平台上兼容MCP注意:FlashTool 版本需要更新至 SP_Flash_Tool_v5.1349.05

    其它平台(如82/89/92等)上的DRAM 兼容分为两种情况:MCPDiscrete Dram,有如下限制条件:

A.    MCP类型的Flash 兼容,Flash ID必须各不相同;

B.     Discrete FlashMCP Flash兼容,要求Vendor IDMemoryDeviceList_MTxxxx.xls中的MODE_REG5)各不相同,并且所有兼容的DRAM的类型(LPDDR2/LPDDR3)必须相同,如果有PCDDR3类型的DRAM,也不可以进行兼容;

C.     Discrete FlashMCP Flash兼容,Discrete eMMCFlash ID不能和MCP中的Flash ID相同。

        注意:Discrete Dram的配置方式是在custom_MemoryDevice.h中配置DRAMpart number,软件中没有配置Discrete eMMC,但是Discrete eMMC的选用还是要参考Memory_Validation_List_External_Wxxxx.xlsxDiscrete eMMC页中的Flash,因为eMMC中有controller,其中有Firmware,只有选用xlsx中验证过的Flash才能保证系统正常工作。 

2)   ROM Combo

         对于nand flash2KB/4KB page size的兼容,请参考FAQ07801 NAND Flash 2K4K兼容

         在解释eMMC flash上的combo之前,先简单介绍一下eMMC Flash的架构,eMMC flash上有如下几个分区:Boot1Boot2RPMBUser Region,前三个分区通常称为:Special Region

           Linux操作系统在启动过程,规定是从User Region中获取MBR image的内容,所以MBR及其它的image都必须存储在User Region中,preloader image存储在boot1中,如下图所示:

 

 

         因为不同的eMMC flashBoot1Boot2RPMB 分区的size可能会有所不同,为了满足MBR必须存储在User Region中的要求,MT6592之前的平台的做法是取所有兼容的eMMC上最大的Special region做为MBR分区的起始地址,比如兼容了三颗FlashMBR的存储位置如下图所示:

 

Boot1Boot2RPMB的值可以查看文件MemoryDeviceList_MTxxxx.xls中的emmc_region页,同一part numberFlash,其Boot1Boot2RPMB的值是固定的;但是对于Discrete eMMC的兼容,custom_MemoryDevice.h中配置的part number仅表示DRAM的型号,所以无法从emmc_region中获取对应的Boot1Boot2RPMB,为了处理这种情况,在文件mbr_addr.pl(KK和L版本)和cust_part_mbr.c(L版本)中设定了一个MBR的默认值:$MBR_Start_Adress_KB,这个值需要通过使用Flashtoolmemory test进行确认并修改,如下图:

 

最终在编译过程,Ptgen.pl中通过对比max(Boot1+Boot2+RPMB)  mbr_addr.pl的默认值,将较大的值做为MBR的起始地址,实现多个eMMC的兼容。但这种兼容方式有如下几点不足之处:

A.    因为选择最大的Boot1+Boot2+RPMB做为MBR的起始地址,对于部分Flash来说会造成空间浪费;

B.    MBR的地址可能不是User Region0x0地址,会出现地址不对齐的现象,影响Flash操作的performance

C.    对于已经出货的机器,如果后续采用的FlashBoot1+Boot2+RPMB值变大,会导致整个系统partition layout的变化,这样会影响OTA升级。

    为了解决以上的不足,在MT6592平台及后面的新平台上,使用了新的兼容方式:使用物理地址(region, offset),在下载的时候,DA读取Flash上Boot1User Region的位置,分别将preloader下载到boot10x0位置;将MBR等其它image下载到User Region0x0地址开始的位置,如下图所示:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值