u-boot-2014.10移植第19天----添加nand flash命令支援(一),u-boot-2014.10nand

來源:互聯網
上載者:User

u-boot-2014.10移植第19天----添加nand flash命令支援(一),u-boot-2014.10nand

今天繼續移植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


在board_nand_init函數中:

#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檔案

編譯,燒錄運行:



明天繼續

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.