u-boot-2014.10移植第19天----新增nand flash命令支援(一)
今天繼續移植nand flash,對於很多情況而言,u-boot從nand flash啟動是一個至關重要的功能,畢竟NOR flash成本太高,不是所有開發板都會新增NOR flash。
u-boot中的SMDK2410模板是沒有支援從nand flash啟動的功能的,但是卻有支援操作nand_flash的操作命令,2410和2440在nand flash支援上的區別有:
1、2410僅支援小塊nandflash,2440則同時支援大塊nandflash;
2、為支援大塊nandflash,2440增加了許多暫存器;
3、2440增加了一個控制暫存器NFCONT,原2410中config暫存器NFCONF中的部分功能被轉移到NFCONT;
新增2440的nand驅動檔案
由易到難的原則,我們先完成nand flash操作命令支援。首先在驅動目錄中加入基於2440的nand驅動檔案,同樣以2410的nand驅動檔案為模板,如下:
u-boot-2014.10]$ cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
修改s3c2440_nand.c檔案
並將s3c2440_nand.c檔案中所有的2410改為2440。ps:如果你是vim使用者可以用命令完成替換:%s/2410/2440/g
修改NFCONF暫存器的操作程式碼:
#define S3C2440_NFCONF_nFCE (1<<1)
#define S3C2440_NFCONF_TACLS(x) ((x)<<12)
#define S3C2440_NFCONF_TWRPH0(x) ((x)<<8)
#define S3C2440_NFCONF_TWRPH1(x) ((x)<<4)
#define S3C2440_ADDR_NALE 8
#define S3C2440_ADDR_NCLE 0x0c
#else
tacls = 0;
twrph0 = 1;
twrph1 = 0;
#endif
//cfg = S3C2440_NFCONF_EN;
cfg = S3C2440_NFCONF_TACLS(tacls);
cfg |= S3C2440_NFCONF_TWRPH0(twrph0);
cfg |= S3C2440_NFCONF_TWRPH1(twrph1);
writel(cfg, &nand_reg->nfconf);
/* 初始化ECC、禁止片選、使能NAND FLASH控制器 */
writel((1 << 4)|(1 << 1)|(1 << 0), &nand_reg->nfcont);
修改nand_base.c檔案
在drivers/mtd/nand/nand_base.c檔案中修改nand_select_chip函式:case 0: /* 選中 */
chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_CTRL_CLE|NAND_CTRL_CHANGE);
break;
在s3c2440_hwcontrol函式中:
if (!(ctrl & NAND_ALE))
IO_ADDR_W |= S3C2440_ADDR_NALE;
if(cmd == NAND_CMD_NONE)
IO_ADDR_W = (ulong)&nand->nfdata;
chip->IO_ADDR_W = (void *)IO_ADDR_W;
if (ctrl & NAND_NCE) /* 使能選中 */
writel(readl(&nand->nfconf) & ~S3C2440_NFCONF_nFCE,
&nand->nfconf);
else /* 取消選中 */
writel(readl(&nand->nfconf) | S3C2440_NFCONF_nFCE,
&nand->nfconf);
}
修改Makefile檔案
同時將該檔案加入驅動目錄中的Makefile檔案中:obj-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
+ obj-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
修改tq2440.h檔案
加入了驅動檔案後,在tq2440.h(include/configs)檔案中使能nandflash操作命令,首先在命令配置一欄中定義使能nand flash操作命令巨集:
#define CONFIG_CMD_PING
+ #define CONFIG_CMD_NAND
我們的u-boot除了前面使能了ping命令功能外暫時還沒有使能其他命令,在tq2440.h標頭檔案中使能的一些事擴充套件的命令,一些基本命令時預設使能的,如cp和md命令。再在nand flash配置一欄中做修改:
#ifdef CONFIG_CMD_NAND
+ #ifdef CONFIG_S3C2440
+ #define CONFIG_NAND_S3C2440
+ #define CONFIG_SYS_S3C2440_NAND_HWECC
+ #elif CONFIG_NAND_S3C2410
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
+ #endif
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0x4E000000
#endif
使能debug巨集:nand_base.c檔案
編譯,燒錄執行:
明天繼續
相關文章
- u-boot-2014.10移植第21天----新增nand flash命令支援(三)bootNaN
- u-boot-2014.10移植第22天----新增nand flash命令支援(四)bootNaN
- u-boot-2014.10移植第20天----新增nand flash命令支援(二)bootNaN
- u-boot-2014.10移植第23天----nand flash啟動(一)bootNaN
- u-boot-2014.10移植第29天----nand flash的SPL啟動(一)bootNaN
- u-boot-2014.10移植第28天----nand flash啟動(六)bootNaN
- u-boot-2014.10移植第27天----nand flash啟動(五)bootNaN
- u-boot-2014.10移植第25天----nand flash啟動(三)bootNaN
- u-boot-2014.10移植第26天----nand flash啟動(四)bootNaN
- u-boot-2014.10移植第24天----nand flash啟動(二)bootNaN
- u-boot-2014.10移植第30天----nand flash的SPL啟動(二)bootNaN
- u-boot-2014.10移植第17天----新增DM9000網路卡支援(一)boot
- u-boot-2014.10移植第15天----nor flash操作boot
- u-boot-2014.10移植第16天----Nor flash啟動boot
- u-boot-2014.10移植第18天----新增DM9000網路卡支援(二)boot
- u-boot-2014.10移植第31天----核心啟動(一)boot
- NAND FlashNaN
- NAND Flash和NOR Flash的區別NaN
- Mini2440 64M Nand Flash 更改為128M Nand FlashNaN
- nor flash 和nand flash 傻傻分不清楚NaN
- NAND FLASH的介面控制設計NaN
- NAND FLASH系統的權衡利弊NaN
- Nand Flash結構及錯誤機制NaN
- 關於NAND FLASH解釦的認識NaN
- NAND Flash是如何生產出來的?NaN
- ARM學習之Nand FLash控制器NaN
- 宏旺半導體科普SPI NAND Flash和SPI NOR Flash的區別NaN
- 給alias命令新增引數支援
- DRAMeXchange:2019年Q1 NAND Flash品牌商營收季減23.8%NaN營收
- DRAMeXchange:2019年第二季全球NAND Flash 品牌廠商營收排行NaN營收
- TrendForce:2019年第三季NAND Flash廠商營收達到約119億美元NaN營收
- S3C2440從NAND Flash啟動和NOR FLASH啟動的問題S3NaN
- Android新增OpenCV支援,一步一步新增。AndroidOpenCV
- TrendForce:2024年第一季全球NAND Flash產業營收季增28.1%NaN產業營收
- 怎麼看時序圖--nand flash的讀操作詳解時序圖NaN
- ZYNQ FLASH+EMMC手動移植LINUX啟動Linux
- TrendForce:2019年第四季NAND Flash營收達125億美元 季增8.5%NaN營收
- 前端面試每日 3+1 —— 第919天前端面試