NOR Flash 是一種常見的存儲設備。它可以向內存一樣的讀,但是不可以像內存一樣寫。 因爲它的這一特性很多的嵌入式linux 設備都會有一塊NOR flash 作爲啓動的芯片。在系統一上電之後就可以直接開始運行程序,執行初始化操作。但是由於價格的原因,NOR flash 一般都不會很大大多都是用作啓動的芯片的(我覺得用來放boot loader 也是非常棒的 用來實現ISP 會簡單很多)
我們先來分析開發板的主控芯片 S3C2440 ,很老很老的一款芯片了,也就比我小几歲。
這是S3C2440 不同的啓動模式對應的內存圖。 主要是兩大類,一類是 NAND啓動,一類是非NAND。
當進行nand啓動的時候 CPU 會自動雲心內部的程序把 NANDFlash 上面的前 4K的數據拷貝到片內僅有的 4K內存上
這時候這一段內存對應的地址就是0~ 4095 (程序上電是從 0地址開始運行的 )
當啓動模式是非 NAND 啓動的時候(NOR啓動) 程序是直接從0地址開始運行的 片內的4K ram 的地址變成 0x4000 0000以及之後的4K 空間
接下來我們分析一下時序部分
根據時序圖 我們可以知道
讀取的 時序的邏輯是 先發送地址線(A24:A0) 然後發送指定的片選線 nGCSx 和nOE(輸出使能)
這是 JZ2440 開發板的 NOR flash 芯片我的 讀取時序
NOR flash 的 AC特性表
這裏最大70ns 就可以讀取到數據 這是一個極限值 ,在芯片接收到地址之後的70ns 之後肯定有數據
OE 之後 30ns 數據就是有效的
Toh 數據保持時間是0
Tdf 數據輸出浮動(這段時間內數據不穩定 不能去操作其他的)
爲了簡化操作 讓 CE OE ADDR 信號同時發出 都大於70ns 就可以滿足這款芯片的需要
在 前面的時序圖中我們知道 S3C2440側的 時間 是以時鐘週期爲單位的, 這裏我們的HCLK 設置成100MHz 所以也就是 說我們需要讓 Tacc 大於等於 7個時鐘週期
反應到寄存器的取值上面就是 BANKCON0 的 [10:8] 要大於5
NOR flash 的參數很少需要設置的。作爲入門總線接口芯片的 第一個是非常合適的。