2440超详细uboot移植笔记(十一)------支持NAND FLASH

你好!这里是风筝的博客,

欢迎和我一起交流。


a.在s3c2440_nand.c(路径:drivers\mtd\nand\s3c2440_nand.c)文件中把board_nand_init函数里的:

cfg = S3C2440_NFCONF_EN;
cfg |= S3C2440_NFCONF_TACLS(tacls - 1);
cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);
cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);

这四句去掉,替换为:

cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);
/* 使能NAND Flash控制器, 初始化ECC, 禁止片选 */

 

 

b.在

 

writel(cfg, &nand_reg->nfconf);

这句的下面添加一句:

writel ((1<<4)|(1<<1)|(1<<0),&nand_reg->nfcont);

 

c. 将

nand->select_chip = null;

这句话修改为:

nand->select_chip = s3c2440_nand_select;

 

d.将s3c2440_nand.c(路径:drivers\mtd\nand\s3c2440_nand.c)中的:

#define S3C2440_NFCONF_nFCE (1<<11)

改成:

#define S3C2440_NFCONF_nFCE (1<<1)

 

f. 在board_nand_init函数前面添加s3c2440_nand_select函数:

static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr)
{
struct s3c24x0_nand *nand = s3c24x0_get_base_nand();

switch(chipnr)
{
case -1:/*取消选中*/
nand->nfcont |= (1<<1);
break;
case 0:
nand->nfcont &= ~(1<<1);
break;
default:
BUG();
}
}

 

g.将s3c2440_nand.c(路径:drivers\mtd\nand\s3c2440_nand.c)中的s3c24x0_hwcontrol函数修改为:

static void s3c24x0_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl)
{
struct s3c24x0_nand *nand = s3c24x0_get_base_nand();
if(ctrl & NAND_CLE)
{
/*发命令*/
writeb(dat, &nand->nfcmd);
}
else if(ctrl & NAND_ALE)
{
/*发地址*/
writeb(dat, &nand->nfaddr);
}
}

 

h.至此,uboot以支持NAND FLASH:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值