nand flash k9f5608 驅動程式設計

2021-04-19 09:08:23 字數 1667 閱讀 3237

nand flash (k9f5608)驅動程式設計

1.nand flash的引腳

nand flash比較重要的幾個引腳如下

i/o引腳:對於該款flash晶元i/o引腳有8個0-7,有的晶元有16個0-15

cle:指令傳輸使能(指令可以鎖存在nand flash的指令暫存器中)

ale:位址傳輸使能(位址可以鎖存在nand flash的位址暫存器中)

ce:片選,低有效

2.nand flash的控制

nand flash是通過向i/o傳輸資料進行控制的。傳輸的資料有兩種,一種是先傳輸的命令,另一種是後傳

輸的位址。

3.k9f5608的位址傳輸

k9f5608是三星公司的一款32兆8位的nand flash晶元。需要三個週期將位址通過i/o傳輸到nand flash芯

片。首先了解一下儲存布局,最下面的一層是--頁,一頁由512位元組的資料塊和16位元組的oob塊組成。其中,數

據塊用來存放資料,oob塊用來存放該flash頁的資訊。中間的一層是塊,一塊由32個頁組成。最上面的一

層是裝置,乙個裝置由2048個塊組成。

接下來說明它的位址傳輸,前面說過要分多個週期傳送。

首先傳送頁內的偏址:最底層的頁內偏址,一頁是512位元組,所以最大是511。

下面傳送頁位址,分3個週期傳送

第1個週期傳輸頁位址的0-7位。

第2個週期傳輸頁位址的9-16位。

第3個週期傳輸頁位址的17-24位。

這裡要說明的是,第8位是由指令決定的,不需要傳輸。具體的看下面指令的傳輸說明。

4.k9f5608的指令傳輸

k9f5608的指令集有12條指令,具體可以看晶元說明。這裡只是總的說一下。

指令分1個週期和2個週期指令兩種。1個週期的只需要傳送一次,2個週期的要傳送2次。

比如:page program指令,是2個週期的,要實現這個指令的功能,首先傳送80h,再傳送10h,由於i/o是

8位的,正好。

再比如:reset指令,是1個週期的,只需要傳輸ffh即可。

這裡重點說的一下的是read1和read2指令。read1是1週期指令,但是有兩個指令00h和01和。對於頁大小

是512位元組的k9f5608來說,8位的定址空間是256,所以用00h來定址前256位元組空間,01h來定址後256位元組

。這樣就對應了前面的頁位址傳輸的第8位,如果是前256位元組空間,就自動置0,如果是後256位元組空間就

自動置1,所以,頁位址的第8位由指令決定,不需要傳輸。read2是1週期指令,是用來讀oob的。其他的

指令都比較簡單,對應著手冊看就行了。

5.驅動程式設計思路

基於以上的分析,驅動程式設計分如下幾個要點:

(1)read和write函式的實現要記得先傳輸指令再傳輸位址,將buf中的資料寫入flash或者將flash中的

資料讀入buf即可。這裡如果定義了ecc就要用到read2來讀oob,oob中記載著ecc的資訊,具體看手冊。

(2)由於有的nand flash晶元頁大小是256,有的是512所以命令執行前要進行判斷。

(3)read1和read2的作用不止是讀取資料而已,在讀完後它將指標指到區域的第乙個位元組,所以在進行

page program等命令的時候先要執行read命令,讓指標指到該區域的第乙個位元組。

暫時就這麼多,多了看得別人也煩。:)

9 F(插入排序)

題目描述 void insertsort int a,int n 使用插入排序演算法,將陣列a的前n個元素按照公升序的方式排序。插入排序演算法描述如下 初始序列 49 38 65 97 76 13 27 49 將元素 38 插入合適位置 38 49 65 97 76 13 27 49 將元素 65 ...

完全配置F9,蘋果效果 AWN

本文參考網路資料寫成。感謝google.感謝在linux及相關開發者,感謝linux愛好者為解決各種問而付出的努力.站在巨人的肩膀上,才能看的更遠.prife 首發於csdn.08年 9月.乙個不錯的配置f9的指南.堪稱經典.最早使用ubuntu的時候.就想嘗試下蘋果的dock效果.那個時候相當菜....

VC6斷點F9失效

乙個demo,在其它計算機是可以f9下斷點的,執行起來後,是能在斷點處斷住的.對方壓縮後,在我的計算機上解壓後,下斷點可以看到,但是跑起來,ide提示,斷點無效.然後直接在main函式入口處停下,倒是可以單步。如果我不想一步一步的走到我想看的地方 e.g.執行緒 只能斷住才能過去 我現在沒辦法f9下...