MTK中关于存储系统应用教程是本文要介绍的内容,主要是来了解并学习MTK中存储系统中的操作,关于MTK中详细的应用来看本文将就。
NOR和NAND都是flash,掉电数据不丢失的,掉电数据丢失的叫RAM
flash上分两块,code区域和文件系统区域(又分系统盘和用户盘)。
NVRAM是一套机制,它的数据部分:default存在flash的code区,NARAM文件存在文件系统区域(系统盘)
phone的电话本数据是以NVRAM文件的形式保存在文件系统区域的(系统盘),SIM卡的电话本就在SIM卡上了
T卡是扩展的flash,都是文件系统区
NANDflash、NORflash及普通flash有什么区别
NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NORflash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NANDflash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。
相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。
NOR的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
MTKFLASH对应64+32是什么意思
手机MCP芯片的型号,主要用于加速处理图像的能力有
64+32、128+32、128+64、256+64、1G+256、1G+512系列FLASH,广泛应用于MTK6225、6235平台,主要产地是TOSHIBA日本
多数的手机的存储器是二合一的,即FLASH和SRAM包在同一片芯片里。64+32是指8Mbyte(64Mbit)的NORFLASH+4Mbyte(32Mbit)的SRAM,128+32同理。
ROM是只读存储器,断电后能保证数据不会丢失,一般保证比较重要的数据.
RAM是随机存储器,断电后数据会丢失.
ROM和RAM指的都是半导体存储器。本来的含义是:ROM是ReadOnlyMemory的意思,也就是说这种存储器只能读,不能写。而RAM是RandomAccessMemory的缩写。这个词的由来是因为早期的计算机曾经使用磁鼓作为内存,而磁鼓和磁带都是典型的顺序读写设备。RAM则可以随机读写
现在ROM通常指非挥发的存储器,或者说,不掉电。系统停止供电的时候它们仍然可以保持数据。所以光盘也有CD-ROM或者DVD-ROM的说法。而RAM通常都是没电之后就没有数据的,典型的就象计算机的内存,需要系统重新启动的时候从硬盘重新载入数据。有的时候,如果数据可以擦写,也会借用RAM这个概念,譬如DVD-RAM,其实只是可以擦写的DVD光盘而已,并非真正的半导体存储器
关于智能手机ROM和RAM的区别
存储器分为随机存储器(RAM)和只读存储器(ROM)两种。其中ROM通常用来固化存储一些生产厂家写入的程序或数据,用于启动电脑和控制电脑的工作方式。而RAM则用来存取各种动态的输入输出数据、中间计算结果以及与外部存储器交换的数据和暂存数据。设备断电后,RAM中存储的数据就会丢失。
对于手机而言
运行游戏、程序速度快慢看的是RAM,也就是动态内存,不是看ROM。ROM是静态空间,用来存储东西的,相当于手机的Z盘。RAM和ROM就好比是电脑的内存和硬盘。C盘准确的来讲也不应该叫ROM只读存储器。C盘应该叫FLASH,因为C盘是可擦写的,而FLASH的大小并不影响运行速度。
128bitM=16MB一般划分14M的资源区,包含了图片,字符串,NVRAM等。
还有2M有用到ARM的启动和部分的内存,运行速度相当快。相当于PC的硬盘
32sdrambitM=4MB,一般用来存储动态内存,全局变量什么的,相当于PC的内存。
mtk25平台默认的是128Mbitflashmemory和32MbitSRAM,因为1BYTE等于8BIT,所以就是我们通常所说的是16MROM和4MRAM,不过由于文件系统占用2M,这2M一般又被分为系统盘和用户盘,系统盘存储NV文件和MMS相关文件,对用户不可见,用户盘用户连上电脑就可以看到,但由于一些原因,有不少手机是不设用户盘的,用户盘过大,会导致彩信等一些模块不稳定,所以很多使用NORFALSH时不设用户盘,但NANDFALSH一般都会设置一定的用户盘。如果需要设置,只要修改宏PARTITION_SIZE值就可以控制。所以我们能够使用的就只剩下14,这一点可以从BUILD目录下的scatWINGTECH25_GEMINI.txt文件的声明部分看到,在SCAT文件中,有一行是SCHEME:external14MBflashmemoryand4MBSRAM,就是说14MROM和4MRAM。
由于用户需求不同,有些时候我们会修改RAM和ROM大小,一般就要相应的修改SCAT文件。在SCAT文件中,我们可以看到行ROM0x000000000x00e00000,就是说可以使用的ROM从0x00000000开始,到0x00e00000结束,共计0x00e00000字节,在下面又可以看到这些ROM被分成四个4M的段使用。在SCAT的行EXTSRAM_LARGEPOOL_NORMAL0x08000000处我们可以看到RAM的使用情况,地址从0x08000000开始,到0x08400000结束,共计0x00400000BYTE,即4MBYTE,如果你是32MROM,8MRAM,就要修改ROM0x000000000x00e00000为
- ROM0x000000000x01c00000,
- 修改
- DUMMY_END0x084000000x04
- 为
- DUMMY_END0x088000000x04,
这样的修改,现在的ROM和RAM大小都为以前默认的2倍。
其实有时RAM紧张时不一定非要采用增加RAM来实现,这样成本较大,可以采用复用内存也可以节约大量内存。在SCAT文件中,很多时候,我们可以看到关健字overlay,这是一些手机的应用中为节省内存使用的复合内存,如INTSRAM_MULTIMEDIA0x400000000xC000,声明了MED复用内存的起始地址,只要不冲突,这几乎是最好的解决内存紧张的方法。如果ROM超过了,可能会比较麻烦一些,去掉不必要的图片,音乐,减小图片的质量,去掉一些不必要的功能,把宏函数转为普通函数都可以节约一部分ROM。
如果RAM或者ROM编绎到最后出错,提示ROM超了或者RAM超过了,这时就要精确计算超出部分的大小,然后再根据计算的大小寻找解决办法。计算的方法是打开LIS文件,把RAM或者ROM加起来,减去14或者4,超过的字节数,就是需要调整的内存大小
- ================================================================================
- CodeRODataRWDataZIDataDebug
- 659753674487325205642667053730676GrandTotals
- ================================================================================
- TotalROSize(Code+ROData)14046268(13717.06kB)
- TotalRWSize(RWData+ZIData)4318761(4217.54kB)
- TotalROMSize(Code+ROData+RWData)14098324(13767.89kB)
- ================================================================================
RAM大小看起来已经超过4M(4318761)了,怎么编译没有报错,并且使用正常?
内存复用
要了解RO,RW和ZI需要首先了解以下知识:
(1)ARM程序的组成
此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。
一个ARM程序包含3部分:RO,RW和ZI
RO是程序中的指令和常量
RW是程序中的已初始化变量
ZI是程序中的未初始化的变量
由以上3点说明可以理解为:
RO就是readonly,
RW就是read/write,
ZI就是zero
(2)ARM映像文件的组成
所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
Image文件包含了RO和RW数据。
之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
Q:为什么Image中必须包含RO和RW?
A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。
(3)ARM程序的执行过程
从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
实际上,ROM中的指令至少应该有这样的功能:
1.将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
2.将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中
在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。
小结:MTK中关于存储系统应用教程的内容介绍完了,希望通过MTK中存储系统内容的学习能对你有所帮助!