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; 添加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文件 编译,烧录运行:明天继续 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |