MTK平台NVRAM的使用

MTK平台NVRAM的使用
MTK平台NVRAM的使用

MTK平台NVRAM的使用

首先明确几个概念:

1.ROM(Read Only Memory\只读存储器):通常用来存储操作系统和内置程序,相当于MTK的Code Region,这部分的内容是写入后不允许修改的;

2.RAM(Random Access Memory\随机访问存储器):相当于电脑内存了,特点是访问速度快,断电后数据会自动丢失,不会保存;

3.NVRAM(NonV olatileRandomAccessMemory\非易失性随机访问存储器):指断电后仍能保持数据的一种RAM,用来存储一些需要在断电后能够保存的数据,比如我们手机的一些相关设置就需要保存在NVRAM中;

下面以给出我们ds635项目的flash memory划分,ds635使用了一片128M的flash memory和一片64M的RAM,在custom_memorydevice.h这个文件中如下几行决定了我们flash memory的分区配置:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define NAND_BOOTING_NAND_FS_BASE_ADDRESS 0x02000000 这一行确定文件系统的起始地址,这里是0x02000000,说明我们分配的Code Region是32M,剩余的96M就是文件系统区域了;

#define NAND_BOOTING_NAND_FS_SIZE 0x06000000 这一行确定文件系统的大小,0x06000000也就是96M了;

#define NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS 180000 这一行确定文件系统的第一个分区的大小,如果没有额外的分区,可以将这一行设为0,这里我们的设置是180000,则文件系统的第一个分区大小是90000K,这样留给用户使用的话机空间大概是87M。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 这样,文件系统还剩一个9M左右的分区,这个分区保存了下面这些内容:

1.NVRAM的数据;

2.wap,eMail,Java等相应的设置;

3.上网记录,播放器播放记录等一些日志文件;

4.其他一些我们使用过程中产生的文件;

上面这些数据都是以文件的形式保存在文件系统的这个分区中的,参考下图应该可以有一个直观的了解。

DS635的flash memory划分

在MTK的平台上配置一个NVRAM项目分3个区域:

1.MT region:这个区域是系统相关NVRAM使用的,不向所有的用户开放,所以通常我们不要向这个区域添加内容;

2.MP region:这个区域是应用相关NVRAM使用的,作为用户我们通常也不要向这个区域添加内容;

3.CT region:这个区域是MTK专门给用户添加NVRAM使用的,我们添加新的NVRAM项目应尽量在这个区域;

在MTK的平台上添加一个NVRAM项目有3部分的工作要做:

1.在下面的文件中定义新的NVRAM项目的LID(Logical Data Item ID),size 和total number:

nvram_data_items.h for MT region

nvram_common_defs.h for MP region

nvram_user_defs.h for CT region

2.在下面的文件中设置新定义NVRAM项目的数据项和默认值:

nvram_data_items.c for MT region

nvram_common_config.h for MP region

nvram_user_config.h for CT region

3.在下面的文件中提供新定义NVRAM项目的版本和结构:

nvram_editor_data_item.h for MT region

common_nvram_editor_data_item.h for MP region

custom_nvram_editor_data_item.h for CT region

具体的添加过程分如下几步(以在CT region添加super key为例):

Step1.在nvram_user_defs.h中定义新的LID:

typedef enum

{

NVRAM_EF_PHONY_LID = NVRAM_LID_CUST_BEGIN,

NVRAM_EF_NEW_VOIP_PROF_LID,

/* Don't remove this line: insert LID definition above */

…………

NVRAM_EF_SUPER_KEY_LID,

/* Add new entry in the tail without its compile option*/

NVRAM_EF_LAST_LID_CUST

} nvram_lid_cust_enum;

Step2.在nvram_user_defs.h中定义新NVRAM项的size和total:

#define NVRAM_EF_SUPER_KEY_SIZE 4

#define NVRAM_EF_SUPER_KEY_TOTAL 1

Step3.在custom_nvram_editor_data_item.h中定义新NVRAM项的V ersion:#define NVRAM_EF_SUPER_KEY_LID_VERNO "000"

Step4.在nvram_user_config.h中设置新定义NVRAM项目的默认值:

kal_uint8 const NVRAM_EF_ SUPER_KEY _DEFAULT[NVRAM_EF_SUPER_KEY_SIZE]={0x00}; Step5在nvram_user_config.h中设置新定义NVRAM项目的数据项:

{

NVRAM_EF_SUPER_KEY_LID, /* LID */

NVRAM_EF_SUPER_KEY_SIZE, /** Size **/

NVRAM_EF_SUPER_KEY_TOTAL, /** Total **/

NVRAM_NORMAL((kal_uint8*)NVRAM_EF_ZERO_DEFAULT), /** Default value **/ NVRAM_A TTR_A VERAGE, /* Attributes */

NVRAM_CA TEGORY_USER, /* Category */

"CT12", /* Prefix */

VER(NVRAM_EF_SUPER_KEY_LID), /* V erno */

"SUPER KEY\0", /* Description*/

(kal_uint8)NVRAM_INV ALID_V ALUE, /* Reserved. record ID is calculated by NVRAM */ }

做完这几步,添加新NVRAM项的工作就基本完成了,需要说明的是,上面这些NVRAM相关的信息及默认值都是随code一起保存在Code Region里的,之后机器会在之前提到的File System Region中用来保存系统数据的空间那个分区内建立NVRAM的文件,我们对NVRAM的写入、读取和修改是在这里保存记录的。个人对文档的理解有限,有不对或需要补充的地方请大家指点吧^^

-------高允沛

备注:

NVRAM,简称非易失性随机访问存储器(Non –V olatile Random Access Memory),是指断电后仍能保持数据的一种RAM。

断电后数据仍然能保留的半导体存储器,业界统称为非易失性访问存储器,举个例子来说,身边到处可见的U盘、数码相机、可拍照手机、PDA(Personal Digital Assistant,掌上电脑)、以及其中的存储卡(如CF、SD等等),无一例外地仰仗着NVRAM技术的支持。

随着移动设备、便携式设备和无线设备的迅猛发展,NVRAM也遇到了前所未有的好时机,并迅速走俏市场。日前,在多种NVRAM中,以闪存(Flash Memory)技术最为引人注目,并占据着NVRAM市场的霸主地位。尽快现在不同于闪存技术的其他NVRAM技术已经出现,并逐渐被一些厂商重视并看好,但是近几年内,闪存仍将以其强大的优势称霸NVRAM应用市场。

移动市场和无线市场的强大需求为NVRAM带来了市场机会,同时也对NVRAM提出了更高的要求,更快的速度、更大的容量、更高的整合度以及更低的能耗始终是NVRAM 的奋斗目标。

参考文档:05_NVRAM_Customization.pdf

相关主题
相关文档
最新文档