主题 : nand flash启动时saveenv出错 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3333
精华: 0
发帖: 26
金钱: 170 两
威望: 78 点
综合积分: 52 分
注册时间: 2009-01-05
最后登录: 2010-10-27
楼主  发表于: 2010-09-22 18:26

 nand flash启动时saveenv出错

小弟在移植uboot2010.06时,遇到了一些问题。在nand flash启动的时候,saveenv失败,如下:
U-Boot 2010.06 (Sep 22 2010 - 17:07:07)

DRAM: 64 MiB
Flash : 2 MiB
***warning - bad CRC or NAND, using default environment

In:   serial
Out : serial
Err : serial
Net: CS8900-0
[QQ2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x3c000 -- 100% complete.
writing to Nand... FAILED!
[QQ2440]#


使用的开发板是QQ2440V3
望各位大侠赐教!
级别: 新手上路
UID: 3333
精华: 0
发帖: 26
金钱: 170 两
威望: 78 点
综合积分: 52 分
注册时间: 2009-01-05
最后登录: 2010-10-27
1楼  发表于: 2010-09-25 14:48
参考了uboot2010.03的移植,然后自己对其中的问题进行了跟踪,最后问题解决了.
在移植uboot2010.06时,直接copy了drivers/mtd/nand/s3c2410.c文件,而文件中
s3c2410_hwcontrol函数对chip->IO_ADDR_W进行了修改,所以造成了写出错.
然后自己再跟踪了一下chip->IO_ADDR_W的值
在drivers/mtd/nand/Nand.c中
nand_init_chip函数对chip->IO_ADDR_W进行了初始化,如下:
nand->IO_ADDR_R = nand->IO_ADDR_W = (void  __iomem *)base_addr;
再来看看base_addr的定义:
static ulong base_address[CONFIG_SYS_MAX_NAND_DEVICE] = CONFIG_SYS_NAND_BASE_LIST;
#define CONFIG_SYS_NAND_BASE_LIST { CONFIG_SYS_NAND_BASE }
其中CONFIG_SYS_NAND_BASE是我们移植的时候定义的宏
#define CONFIG_SYS_NAND_BASE  0x4E000000

而在s3c2410_hwcontrol函数中
if (!(ctrl & NAND_CLE))
     IO_ADDR_W |= S3C2410_ADDR_NCLE;
if (!(ctrl & NAND_ALE))
    IO_ADDR_W |= S3C2410_ADDR_NALE;

chip->IO_ADDR_W = (void *)IO_ADDR_W;
修改了chip->IO_ADDR_W的值,所以造成saveenv时写入出错
级别: 新手上路
UID: 2366
精华: 0
发帖: 20
金钱: 110 两
威望: 30 点
综合积分: 40 分
注册时间: 2008-11-13
最后登录: 2012-07-08
2楼  发表于: 2010-09-28 08:45
mark
老板娘在线,欢迎您的光临!!
http://shop61566970.taobao.com/