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