MTK中關于存儲系統應用教程
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中存儲系統內容的學習能對你有所幫助!