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