1. 让uboot 支持操作Nand Flash
1.1 uboot 的不足

在第三篇中,我们给uboot移植了Nand 启动的代码,并且成功启动了。不过uboot
程序仍然无法正常去操作Nand Flash,原因是我们并没有配置uboot 中关于Nand Flash操作的相关代码。
1.2 添加对Nand Flash 的操作
1.2.1 添加宏定义和s3c2440_nand.c 文件
-
要让uboot 支持Nand Flash 操作,我们首先需要给include/configs
/s3c2440.h,添加CONFIG_CMD_NAND的宏定义:

-
拷贝driver/mtd/nand/s3c2410_nand.c 为driver/mtd/nand/s3c2440_nand.
c,仿造s3c2410_nand 来写我们的s3c2440_nand 文件。并且在driver/
mtd/nand/Makefile 中添加s3c2440_nand.c,将其编译进内核:

从图中我们可知,我们还需要往s3c2440.h 中添加宏定义CONFIG_NAND_S3C2440。
完成上面两步操作后,我们就成功将Nand 的代码添加到我们的uboot 中了。
1.2.2 修改s3c2440_nand.c 使其适配我们的jz2440
我们使用的是s3c2410 的nand 代码,其并不适配我们的s3c2440 芯片。所以我们需要基于s3c2410 的代码上进行修改。
添加宏定义
为了方便进行操作,我们仿造s3c2410 定义一些s3c2440 芯片操作Nand Flash 控制器需要用到宏定义:
// 与时序设置有关,在设置时序时使用到了
#define S3C2440_NFCONF_TACLS(x) ((x)<<12)
#define S3C2440_NFCONF_TWRPH0(x) ((x)<<8)
#define S3C2440_NFCONF_TWRPH1(x) ((x)<<4)
// 控制有关
#define S3C2440_NFCONT_nFCE (1<<1)
#define S3C2440_NFCONT_ENABLE (1)
#define S3C2440_NFCONT_INITECC (1<<4)
#define S3C2440_NFCONT_MAINECCLock (1<<5)
#define S3C2440_NFCONT_SpareECCLock (1<<6)
// 寄存器地址
#

本文介绍如何为 U-Boot 添加 NAND Flash 支持,包括宏定义、时序设置及芯片初始化等内容。通过具体步骤说明如何实现必要的硬件控制函数。
最低0.47元/天 解锁文章
1250

被折叠的 条评论
为什么被折叠?



