1. 程式人生 > >為什麼NORflash可以作為啟動裝置直接執行程式

為什麼NORflash可以作為啟動裝置直接執行程式

NOR Flash 和 NAND Flash

是現在市場上兩種主要的非易失快閃記憶體技術。Intel1988年首先開發出NOR Flash 技術,徹底改變了原先由EPROM(Electrically Programmable Read-Only-Memory電可程式設計序只讀儲存器)EEPROM(電可擦只讀儲存器Electrically Erasable Programmable Read - Only Memory)一統天下的局面。緊接著,1989年,東芝公司發表了NAND Flash 結構,強調降低每位元的成本,有更高的效能,並且像磁碟一樣可以通過介面輕鬆升級。NOR Flash 

的特點是晶片內執行(XIP eXecute In Place),這樣應用程式可以直接在Flash快閃記憶體內執行,不必再把程式碼讀到系統RAM

這樣我們知道程式能直接在norlash執行的原因在XIP

那:什麼是XIP?工作原理又是怎麼樣的?

XIP eXecute In Place

  eXecute In Place,即晶片內執行,指應用程式可以直接在flash快閃記憶體內執行,不必再把程式碼讀到系統RAM中。flash內執行是指nor flash 不需要初始化,可以直接在flash內執行程式碼。但往往只執行部分程式碼,比如初始化RAM.

:片內執行不是說程式在儲存器內執行哦,CPU的基本功能就是取指、譯碼和執行。norflash能在晶片內執行,就是指CPU的取指模組能夠直接從norflash中把指令取出來,供後面的譯碼和執行模組使用)

NandFlash器件使用複雜的I/O口來序列地存取資料,8個引腳用來傳送控制、地址和資料資訊。由於時序較為複雜,所以一般CPU最好整合NAND控制器。另外由於NandFlash沒有掛接在地址總線上,所以如果想用NandFlash作為系統的啟動盤,就需要CPU具備特殊的功能,如s3c2440在被選擇為NandFlash啟動方式時會在上電時自動讀取NandFlash4k資料到地址0SRAM中。如果CPU不具備這種特殊功能,使用者不能直接執行NandFlash上的程式碼,那可以採取其他方式,比如好多使用NandFlash的開發板除了使用NandFlash以外,還用上了一塊小的NorFlash來執行啟動程式碼。


那麼為什麼norflash可以實現XIP,而nandflash就不可以呢?

晶片內執行主要是是看晶片可不可以線性儲存程式碼(假如硬體支援晶片介面),只要能保證晶片的儲存空間是線性的(也就是無壞塊),都可以片上執行
在讀取Flash時候,容易出現“位翻轉(bitconvert)                                   
在Flash的位翻轉(一個bit位發生翻轉)現象上,NAND的出現機率要比NorFlash大得多。這個問題在Flash儲存關鍵檔案時是致命的,所以在使用NandFlash時建議同時使用EDC/ECC等校驗演算法。 ”


但是,如果能保證不出錯,也還是可以進行XIP,可以在其上執行程式碼的:
“所謂XIP,就是CODE是在FLASH上直接執行. NANDFLASH只是不適合做XIP,但並不是不能做XIP“

要一段CODE能夠正確的執行,要保證它的CODE是連續的,正確的.
由於一些電氣特性的原因,NOR FLASH能夠做到這一點,不存在壞道或壞塊,所以能夠做XIP.
而對於NAND FLASH, 它只保證它的BLOCK 0是好的,其他的塊並不保證,雖然出錯的機率比較低,但還是有出錯的可能,所以CODE可能無法連續正確地執行.
但只要你有額外的保障措施,比如說在執行CODE之前去做一次ECC校驗,來確保CODE是連續正確的.那你也可以做XIP. 有人這麼做了,而且也證明是成功的.