前言
最近公司的MTK项目需求,需要学习下NVRAM节点的知识,在此总结下学习的内容,防止日后遗忘
NVRAM分区
Nvdata: 手机运行过程中读写的NVRAM都来自于该分区和Peotect_1/Peotect_2。该分区存储着普通的NV数据,包括IMEI,校准数据等等。
Peotect_1/Peotect_2: 也叫protect_f和protect_s分区,protect_s是对protect_f中部分数据的备份。主要存储SIMLOCK相关数据。具有NVRAM_CATEGORY_IMPORTANT_L4属性的NVRAM LID会存在protect_f分区(这个叫A file),如果还具有NVRAM_ATTR_MULTIPLE属性(锁卡LID都有MULTIPLE属性),会存一个B文件到protect_s中。正常情况下protect_f中的A文件和protect_s中的B文件是相同的,因为写的时候这两个NVRAM文件都会去写。且A B两个文件互为备份,当其中一个文件损坏,可以通过另一个文件修复还原,当时两个文件同时损坏时,由modem来进行决策。
Nvram: 是一个备份分区,备份具有NVRAM_CATEGORY_IMPORTANT和NVRAM_CATEGORY_CALIBRAT属性的NVRAM LID,备份的也就是CALIBRAT和NVD_IMEI两个目录,具体有IMEI、 barcode、Calibration数据和4G RF driver参数这些NVRAM。备份可以由META Tool触发 ,ATE校准完会自动触发备份,SN Writer tool写完号后也会自动触发备份。
软件升级包中的MT6765_Android_scatter.txt会记录各个分区的相关信息,SP Flash Tool升级时就要加载该文件。
NVRAM LID数据结构
NVRAM LID table就是由一个个NVRAM LID枚举组成的。
上图为例,每个NVRAM LID有九个参数LID,total,size,default_value,category,attr,fileprefix,fileverno,description(此处没有)。 NVRAM_EF_SYS_CACHE_OCTET_LID :LID,NVRAM LID枚举名 NVRAM_EF_SYS_CACHE_OCTET_TOTAL :total_records,当前NVRAM LID的record总个数 NVRAM_EF_SYS_CACHE_OCTET_SIZE :size,每个records的size NVRAM_NORMAL_NOT_GEN(NVRAM_EF_SYS_CACHE_OCTET_DEFAULT):default_value默认值 NVRAM_CATEGORY_USER:category属性 NVRAM_ATTR_MULTI_DEFAULT:attribute属性 "MT6K":文件名前缀,构成文件名前缀,必须四位,且是0000~ZZZZ,且必须整个工程唯一 VER(NVRAM_EF_SYS_CACHE_OCTET_LID):文件版本号,文件名后缀,必须三位,且是000~999,实际对应的是NVRAM_EF_EL1_BAND_INDICATOR_LID_VERNO Description:目前为空
不同升级方式对于各分区的影响
我们在使用SP Flash Tool升级的时候,需要选择升级方式Download Only / Firmware Upgrade / Format All+Download,如下图</>
Download Only: 该升级方式不会更改各个分区的数据,如果修改了NVRAM,需要将相应NVRAM LID的VERNO加1,重新生成新的对应文件才会生效。
Firmware Upgrade:该升级方式只擦除nvdata分区,在开机时AP会将nvram分区中备份的CALIBRAT和NVD_IMEI两个目录还原到nvdata分区。具体包括IMEI,barcode,calibration数据和4G RF driver参数。由于没有擦除protect_s和protect_f,所以不影响SIM LOCK相关参数。其他NVRAM LID恢复为code中的默认值。 如果nvdata为空,IMEI,barcode,calibration数据和4G RF driver参数会按照代码中的默认值生成新文件。
Format All+Download: 擦除所有分区,所有NVRAM LID都会按照代码中的默认值重新生成文件。