MTK中關(guān)于存儲(chǔ)系統(tǒng)應(yīng)用教程
MTK中關(guān)于存儲(chǔ)系統(tǒng)應(yīng)用教程是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)MTK中存儲(chǔ)系統(tǒng)中的操作,關(guān)于MTK中詳細(xì)的應(yīng)用來看本文將就。
NOR和NAND都是flash,掉電數(shù)據(jù)不丟失的,掉電數(shù)據(jù)丟失的叫RAM
flash上分兩塊,code區(qū)域和文件系統(tǒng)區(qū)域(又分系統(tǒng)盤和用戶盤)。
NVRAM是一套機(jī)制,它的數(shù)據(jù)部分:default存在flash的code區(qū),NARAM文件存在文件系統(tǒng)區(qū)域(系統(tǒng)盤)
phone的電話本數(shù)據(jù)是以NVRAM文件的形式保存在文件系統(tǒng)區(qū)域的(系統(tǒng)盤),SIM卡的電話本就在SIM卡上了
T卡是擴(kuò)展的flash,都是文件系統(tǒng)區(qū)
NANDflash、NORflash及普通flash有什么區(qū)別
NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開發(fā)出NORflash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。緊接著,1989年,東芝公司發(fā)表了NANDflash結(jié)構(gòu),強(qiáng)調(diào)降低每比特的成本,更高的性能,并且象磁盤一樣可以通過接口輕松升級(jí)。但是經(jīng)過了十多年之后,仍然有相當(dāng)多的硬件工程師分不清NOR和NAND閃存。
相“flash存儲(chǔ)器”經(jīng)??梢耘c相“NOR存儲(chǔ)器”互換使用。許多業(yè)內(nèi)人士也搞不清楚NAND閃存技術(shù)相對(duì)于NOR技術(shù)的優(yōu)越之處,因?yàn)榇蠖鄶?shù)情況下閃存只是用來存儲(chǔ)少量的代碼,這時(shí)NOR閃存更適合一些。而NAND則是高數(shù)據(jù)存儲(chǔ)密度的理想解決方案。
NOR的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP,eXecuteInPlace),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。
NOR的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。
NAND結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫入和擦除的速度也很快。應(yīng)用NAND的困難在于flash的管理和需要特殊的系統(tǒng)接口。
MTKFLASH對(duì)應(yīng)64+32是什么意思
手機(jī)MCP芯片的型號(hào),主要用于加速處理圖像的能力有
64+32、128+32、128+64、256+64、1G+256、1G+512系列FLASH,廣泛應(yīng)用于MTK6225、6235平臺(tái),主要產(chǎn)地是TOSHIBA日本
多數(shù)的手機(jī)的存儲(chǔ)器是二合一的,即FLASH和SRAM包在同一片芯片里。64+32是指8Mbyte(64Mbit)的NORFLASH+4Mbyte(32Mbit)的SRAM,128+32同理。
ROM是只讀存儲(chǔ)器,斷電后能保證數(shù)據(jù)不會(huì)丟失,一般保證比較重要的數(shù)據(jù).
RAM是隨機(jī)存儲(chǔ)器,斷電后數(shù)據(jù)會(huì)丟失.
ROM和RAM指的都是半導(dǎo)體存儲(chǔ)器。本來的含義是:ROM是ReadOnlyMemory的意思,也就是說這種存儲(chǔ)器只能讀,不能寫。而RAM是RandomAccessMemory的縮寫。這個(gè)詞的由來是因?yàn)樵缙诘挠?jì)算機(jī)曾經(jīng)使用磁鼓作為內(nèi)存,而磁鼓和磁帶都是典型的順序讀寫設(shè)備。RAM則可以隨機(jī)讀寫
現(xiàn)在ROM通常指非揮發(fā)的存儲(chǔ)器,或者說,不掉電。系統(tǒng)停止供電的時(shí)候它們?nèi)匀豢梢员3謹(jǐn)?shù)據(jù)。所以光盤也有CD-ROM或者DVD-ROM的說法。而RAM通常都是沒電之后就沒有數(shù)據(jù)的,典型的就象計(jì)算機(jī)的內(nèi)存,需要系統(tǒng)重新啟動(dòng)的時(shí)候從硬盤重新載入數(shù)據(jù)。有的時(shí)候,如果數(shù)據(jù)可以擦寫,也會(huì)借用RAM這個(gè)概念,譬如DVD-RAM,其實(shí)只是可以擦寫的DVD光盤而已,并非真正的半導(dǎo)體存儲(chǔ)器
關(guān)于智能手機(jī)ROM和RAM的區(qū)別
存儲(chǔ)器分為隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)兩種。其中ROM通常用來固化存儲(chǔ)一些生產(chǎn)廠家寫入的程序或數(shù)據(jù),用于啟動(dòng)電腦和控制電腦的工作方式。而RAM則用來存取各種動(dòng)態(tài)的輸入輸出數(shù)據(jù)、中間計(jì)算結(jié)果以及與外部存儲(chǔ)器交換的數(shù)據(jù)和暫存數(shù)據(jù)。設(shè)備斷電后,RAM中存儲(chǔ)的數(shù)據(jù)就會(huì)丟失。
對(duì)于手機(jī)而言
運(yùn)行游戲、程序速度快慢看的是RAM,也就是動(dòng)態(tài)內(nèi)存,不是看ROM。ROM是靜態(tài)空間,用來存儲(chǔ)東西的,相當(dāng)于手機(jī)的Z盤。RAM和ROM就好比是電腦的內(nèi)存和硬盤。C盤準(zhǔn)確的來講也不應(yīng)該叫ROM只讀存儲(chǔ)器。C盤應(yīng)該叫FLASH,因?yàn)镃盤是可擦寫的,而FLASH的大小并不影響運(yùn)行速度。
128bitM=16MB一般劃分14M的資源區(qū),包含了圖片,字符串,NVRAM等。
還有2M有用到ARM的啟動(dòng)和部分的內(nèi)存,運(yùn)行速度相當(dāng)快。相當(dāng)于PC的硬盤
32sdrambitM=4MB,一般用來存儲(chǔ)動(dòng)態(tài)內(nèi)存,全局變量什么的,相當(dāng)于PC的內(nèi)存。
mtk25平臺(tái)默認(rèn)的是128Mbitflashmemory和32MbitSRAM,因?yàn)?BYTE等于8BIT,所以就是我們通常所說的是16MROM和4MRAM,不過由于文件系統(tǒng)占用2M,這2M一般又被分為系統(tǒng)盤和用戶盤,系統(tǒng)盤存儲(chǔ)NV文件和MMS相關(guān)文件,對(duì)用戶不可見,用戶盤用戶連上電腦就可以看到,但由于一些原因,有不少手機(jī)是不設(shè)用戶盤的,用戶盤過大,會(huì)導(dǎo)致彩信等一些模塊不穩(wěn)定,所以很多使用NORFALSH時(shí)不設(shè)用戶盤,但NANDFALSH一般都會(huì)設(shè)置一定的用戶盤。如果需要設(shè)置,只要修改宏P(guān)ARTITION_SIZE值就可以控制。所以我們能夠使用的就只剩下14,這一點(diǎn)可以從BUILD目錄下的scatWINGTECH25_GEMINI.txt文件的聲明部分看到,在SCAT文件中,有一行是SCHEME:external14MBflashmemoryand4MBSRAM,就是說14MROM和4MRAM。
由于用戶需求不同,有些時(shí)候我們會(huì)修改RAM和ROM大小,一般就要相應(yīng)的修改SCAT文件。在SCAT文件中,我們可以看到行ROM0x000000000x00e00000,就是說可以使用的ROM從0x00000000開始,到0x00e00000結(jié)束,共計(jì)0x00e00000字節(jié),在下面又可以看到這些ROM被分成四個(gè)4M的段使用。在SCAT的行EXTSRAM_LARGEPOOL_NORMAL0x08000000處我們可以看到RAM的使用情況,地址從0x08000000開始,到0x08400000結(jié)束,共計(jì)0x00400000BYTE,即4MBYTE,如果你是32MROM,8MRAM,就要修改ROM0x000000000x00e00000為
- ROM0x000000000x01c00000,
- 修改
- DUMMY_END0x084000000x04
- 為
- DUMMY_END0x088000000x04,
這樣的修改,現(xiàn)在的ROM和RAM大小都為以前默認(rèn)的2倍。
其實(shí)有時(shí)RAM緊張時(shí)不一定非要采用增加RAM來實(shí)現(xiàn),這樣成本較大,可以采用復(fù)用內(nèi)存也可以節(jié)約大量內(nèi)存。在SCAT文件中,很多時(shí)候,我們可以看到關(guān)健字overlay,這是一些手機(jī)的應(yīng)用中為節(jié)省內(nèi)存使用的復(fù)合內(nèi)存,如INTSRAM_MULTIMEDIA0x400000000xC000,聲明了MED復(fù)用內(nèi)存的起始地址,只要不沖突,這幾乎是最好的解決內(nèi)存緊張的方法。如果ROM超過了,可能會(huì)比較麻煩一些,去掉不必要的圖片,音樂,減小圖片的質(zhì)量,去掉一些不必要的功能,把宏函數(shù)轉(zhuǎn)為普通函數(shù)都可以節(jié)約一部分ROM。
如果RAM或者ROM編繹到最后出錯(cuò),提示ROM超了或者RAM超過了,這時(shí)就要精確計(jì)算超出部分的大小,然后再根據(jù)計(jì)算的大小尋找解決辦法。計(jì)算的方法是打開LIS文件,把RAM或者ROM加起來,減去14或者4,超過的字節(jié)數(shù),就是需要調(diào)整的內(nèi)存大小
- ================================================================================
- CodeRODataRWDataZIDataDebug
- 659753674487325205642667053730676GrandTotals
- ================================================================================
- TotalROSize(Code+ROData)14046268(13717.06kB)
- TotalRWSize(RWData+ZIData)4318761(4217.54kB)
- TotalROMSize(Code+ROData+RWData)14098324(13767.89kB)
- ================================================================================
RAM大小看起來已經(jīng)超過4M(4318761)了,怎么編譯沒有報(bào)錯(cuò),并且使用正常?
內(nèi)存復(fù)用
要了解RO,RW和ZI需要首先了解以下知識(shí):
(1)ARM程序的組成
此處所說的“ARM程序”是指在ARM系統(tǒng)中正在執(zhí)行的程序,而非保存在ROM中的bin映像(image)文件,這一點(diǎn)清注意區(qū)別。
一個(gè)ARM程序包含3部分:RO,RW和ZI
RO是程序中的指令和常量
RW是程序中的已初始化變量
ZI是程序中的未初始化的變量
由以上3點(diǎn)說明可以理解為:
RO就是readonly,
RW就是read/write,
ZI就是zero
(2)ARM映像文件的組成
所謂ARM映像文件就是指燒錄到ROM中的bin文件,也成為image文件。以下用Image文件來稱呼它。
Image文件包含了RO和RW數(shù)據(jù)。
之所以Image文件不包含ZI數(shù)據(jù),是因?yàn)閆I數(shù)據(jù)都是0,沒必要包含,只要程序運(yùn)行之前將ZI數(shù)據(jù)所在的區(qū)域一律清零即可。包含進(jìn)去反而浪費(fèi)存儲(chǔ)空間。
Q:為什么Image中必須包含RO和RW?
A:因?yàn)镽O中的指令和常量以及RW中初始化過的變量是不能像ZI那樣“無中生有”的。
(3)ARM程序的執(zhí)行過程
從以上兩點(diǎn)可以知道,燒錄到ROM中的image文件與實(shí)際運(yùn)行時(shí)的ARM程序之間并不是完全一樣的。因此就有必要了解ARM程序是如何從ROM中的image到達(dá)實(shí)際運(yùn)行狀態(tài)的。
實(shí)際上,ROM中的指令至少應(yīng)該有這樣的功能:
1.將RW從ROM中搬到RAM中,因?yàn)镽W是變量,變量不能存在ROM中。
2.將ZI所在的RAM區(qū)域全部清零,因?yàn)閆I區(qū)域并不在Image中,所以需要程序根據(jù)編譯器給出的ZI地址及大小來將相應(yīng)得RAM區(qū)域清零。ZI中也是變量,同理:變量不能存在ROM中
在程序運(yùn)行的最初階段,RO中的指令完成了這兩項(xiàng)工作后C程序才能正常訪問變量。否則只能運(yùn)行不含變量的代碼。
小結(jié):MTK中關(guān)于存儲(chǔ)系統(tǒng)應(yīng)用教程的內(nèi)容介紹完了,希望通過MTK中存儲(chǔ)系統(tǒng)內(nèi)容的學(xué)習(xí)能對(duì)你有所幫助!