2006-08-15 12:37:07Cyanite

如何在ARM上透過一個簡單的方法清除Flash

 所謂Flash就是指Flash memory,也是Nor Flash,非常廣泛被用來存放像BIOS還是Bootloader之類的一種唯讀的記憶體.讀取時只需透過Address Bus定址即可讀出Data,而要寫入時就得透過一些標準化的 Command來做寫入動作.舉凡微處理機幾乎都需要這種記憶體來存放最基本的程式,來做一開機時對硬體的初始化跟對系統做設定.不過也有少數的微處理機可以直接支援另一種更常見的Memory,叫做 Nand Flash,這種記憶體被用來設計大容量的,因此他的存取方式就如同硬碟一樣,必須在微處理機上本身就有控制Nand Flash的controller,透過一點轉向的技巧,一發生Reset時,通知Nand Flash的controller到Nand Flash momroy中去讀取特定的磁軌(為相容硬碟的存取模式故設定同樣的定義)去搬出連續資料到特定的Memory中,然後微處理機才開始到這個特定的Memory中提取第一個指令開始執行.不過今天的重點是Nor Flash memory,對於Nand Flash Memory就不多提了,不過最後在補充一點,Nand Flash Memory可是目前MP3 player或是隨身碟的必備元件之一.
 回到Nor Flash memory,我們要如何去控制他呢?其實這是一件蠻簡單的事(以下建議需具電子資訊相關背景).Nor Flash memory上面種會有型號吧!其實大部分的IC應該都有,要拿著型號上google應該都能查到詳細的Datasheet,然後打開Datasheet詳讀一下,應該就會找到一個類似Command的表:
 以上僅擷取片段,以今天要講的主題為主.當看到這個表時,我們就應該要很清楚怎麼去控制Nor Flash了,現在就開始介紹清除 Nor Flash 的動作吧!

注意其中在 Chip Erase 那行有6個command就是我們要用的一個功能,然而要怎麼用,這邊僅以ARM上的開發為例.在ARM的開發上最容易能夠透過除錯的環境直接控制ARM來對他的Memory bus發出這些 command 給上面的Nor Flash執行,但是要注意一點,就是Nor Flash不能在保護的狀態之下,不然也是無法寫入 command 的.我直接轉換成給ARM的一套開發環境叫ADS,現在叫做RealView,裡面的除錯環境AXD,在裡面可以直接下指令對Memory bus直接控制,轉換好的指令如下:

fillmem 0xAAA 0xAAA 0xAA 8
fillmem 0x554 0x554 0x55 8
fillmem 0xAAA 0xAAA 0x80 8
fillmem 0xAAA 0xAAA 0xAA 8
fillmem 0x554 0x554 0x55 8
fillmem 0xAAA 0xAAA 0x10 8

 以上指令可別亂下,如果你的環境跟我類似,而且ARM板上對於Nor Flash的接法跟我採用相同的16 Bits 接法,那下完以上指令 Nor Flash 很有可能就清掉了.下面開始解釋其意義吧!

其中有關 “fillmem” 指令乃AXD指令輸入介面下的命令,用法如下:
fillmem [起始位址] [結束位址] [寫入資料] [資料寬度]

解釋Chip Erase 的第1 個command:Addr 555,Data AA

如Datasheet 所示,其位址及資料均為16進位,但是一般ARM板的設計通常 Flash 都是 16 Bit 的操作模式,所以要特別注意其 Address bus 的連接方式,這是微處理機最基礎的定址系統,所以在16 Bit 的操作模式下,使用者只要注意其線路連接便不難看出 ARM 的 A1 是連接 Flash 的 A0。所以第1個 command 在寫成 fillmem 指令後就要將位址做移位的動作,寫出來的指令就變成 fillmem 0xAAA 0xAAA 0xAA 8,那在 32位元的連接方式就可依此類推,若是由兩顆 Flash 來構成,更要注意其 Address bus 的連接方式。了解此原理,燒錄任何架構設計下的Flash均不成問題。

其第2個指令 Addr 是 AAA 通常可由 2AA 來取代,經過1 Bit的移位便成了 0x554,實際狀況還是得參考 ARM 板上 FLASH 的線路與詳細Datasheet 才是準確無誤。
將上面的指令成一支檔案叫做flasherase.ini後,以下簡單介紹一個清除Nor Flash 輯要燒錄新的Bootloader的幾個步驟:

1.請先 obey flasherase.ini

2.然後關掉 AXD,平台則關電後再打開,然後再進入AXD

3.接著 obey [ARM板的基本Hardware initial檔]

4.就可以載Flash燒錄程式燒入正確的 Bootloader

5.例外狀況:發現一樣不穩時請在重複1~4步驟,有可能在第1步驟沒有正確執行

 至於板子的Hardware initial檔則須向購買板子之廠商索取,作者也建議,當使用者對燒錄 Bootloader 沒有徹底了解切勿嘗試來做燒錄Bootloader 動作,以免造成燒錯而無法救回之情況,除非使用者確實了解以上介紹,並確實從底層硬體了解ARM的基本原理,才能將ARM板完全掌控於手中,也才能體會 ARM 的 System on chip 的迷人之處。