nand flash驅動的編寫

2021-07-16 06:53:23 字數 1690 閱讀 5764

1、關鍵操作

(1)分配nand_chip結構體

(2)配置結構體的相關成員

(3)硬體相關的配置

2、最重要的函式(nand flash初始化函式)

int s3c_nand_init(void)

nand_ecc_modes

這是個列舉型別啊 ,如果不定義值,那麼預設從0開始順序定義,即nand_ecc_none=0,nand_ecc_soft=1,nand_ecc_hw=2,nand_ecc_hw_syndrome=3

/* 3. 硬體相關的設定: 根據nand flash的手冊設定時間引數 */

/* 使能nand flash控制器的時鐘 */

clk = clk_get(null, "nand");

clk_enable(clk);              /* clkcon'bit[4] */

/* hclk=100mhz

* tacls:  發出cle/ale之後多長時間才發出nwe訊號, 從nand手冊可知cle/ale與nwe可以同時發出,所以tacls=0

* twrph0: nwe的脈衝寬度, hclk x ( twrph0 + 1 ), 從nand手冊可知它要》=12ns, 所以twrph0>=1

* twrph1: nwe變為高電平後多長時間cle/ale才能變為低電平, 從nand手冊可知它要》=5ns, 所以twrph1>=0

*/#define tacls    0

#define twrph0   1

#define twrph1   0

//這裡nfconf是nand flash配置暫存器

s3c_nand_regs->nfconf = (tacls<<12) | (twrph0<<8) | (twrph1<<4);

/* nfcont: 是nand flash控制暫存器

* bit1-設為1, 取消片選 

* bit0-設為1, 使能nand flash控制器

*/s3c_nand_regs->nfcont = (1<<1) | (1<<0);

/* 4. 使用: nand_scan */(分配mtd_info結構體並對成員進行設定)

s3c_mtd = kzalloc(sizeof(struct mtd_info), gfp_kernel);

s3c_mtd->owner = this_module;

s3c_mtd->priv  = s3c_nand;(私有成員指向nand_chip結構體)

//左邊引數是mtd_info結構體,右邊引數是

nand_scan(s3c_mtd, 1);/* 識別nand flash, 構造mtd_info */

/* 5. add_mtd_partitions */

//左邊引數是mtd_info結構體,中間引數是mtd_partition 結構體,右邊引數是

add_mtd_partitions(s3c_mtd, s3c_nand_parts, 4);

//add_mtd_device(s3c_mtd);

return 0;

}3、mtd_partition結構體陣列

static struct mtd_partition s3c_nand_parts =

};

Nand Flash驅動程式編寫指南 3

下面開始分析 nand flash 時序圖,並以讀操作為例編寫 nand flash 驅動,先看下我們應該發什麼命令讀資料,下面是資料手冊的命令集合 由上可以看出,要讀取資料,只需要傳送乙個命令週期,發 00h或 01h。知道了發什麼命令,再來看如何傳送命令,下面是讀命令的時序圖 上面圖的紅線處,它...

NAND Flash的驅動程式設計

摘要 以三星公司k9f2808uob 為例,設計了nand flash與s3c2410 的介面電路,介紹了nand flash在arm嵌入式系統中的設計與實現方法,並在uboot上進行了驗證。所設計的驅動易於移植,可簡化嵌入式系統開發。引言當前各類嵌入式系統開發設計中,儲存模組設計是不可或缺的重要方...

NAND FLASH驅動注意事項

1.nand flash寫入只能由1寫為0,所以寫入前必須先擦除,擦除後所有資料為1.2.2k大頁面的64位元組冗餘資料按照飛凌的定義為 第0位為壞塊標記,第1 4位為2k頁面的ecc校驗,其他為0xff。3.k9f1g08u0b的位址線有28根,對應空間應該是256mb,而實際空間為128mb,我...