移植u-boot-2011.09-rc1到FL2440(2)

    这篇进行移植第二步,支持NAND FLASH的读写,我的板子的NAND FLASH是K9F1G08U0A,128M 8BIT。

    1.去掉对NOR FLASH的支持

UBOOT默认支持NOR FLASH,因为我的FL2440只有NAND FLASH,决定把这部分去掉。

vi include/configs/fl2440.h

将183行左右,下面这段代码去掉(这里要说明一点,在配置文件中注释,不能使用//,只能使用/* */):

#define CONFIG_SYS_FLASH_CFI
#define CONFIG_FLASH_CFI_DRIVER
#define CONFIG_FLASH_CFI_LEGACY
#define CONFIG_SYS_FLASH_LEGACY_512Kx16
#define CONFIG_FLASH_SHOW_PROGRESS      45

#define CONFIG_SYS_MAX_FLASH_BANKS      1
#define CONFIG_SYS_FLASH_BANKS_LIST     { CONFIG_SYS_FLASH_BASE }
#define CONFIG_SYS_MAX_FLASH_SECT       (19)

#define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + 0x070000)
#define CONFIG_ENV_IS_IN_FLASH

增加下面这段:

#define CONFIG_SYS_NO_FLASH 1
#define CONFIG_ENV_IS_NOWHERE   1

修改include/config_cmd_default.h,注释掉其中的CONFIG_CMD_IMI和CONFIG_CMD_IMLS

vi include/config_cmd_default.h

/*#define CONFIG_CMD_IMI*/
/*#define CONFIG_CMD_IMLS*/

修改 board/samsung/fl2440/fl2440.c

vi board/samsung/fl2440/fl2440.c
#if !defined(CONFIG_SYS_NO_FLASH)
ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
{
        info->portwidth = FLASH_CFI_16BIT;
        info->chipwidth = FLASH_CFI_BY16;
        info->interface = FLASH_CFI_X16;
        return 1;
}
#endif

    2.增加NAND FLASH支持

在include/configs/fl2440.h中将原来注释掉的CONFIG_CMD_NAND添加回来

增加NAND驱动文件:

cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c

在drivers/mtd/nand/Makefile 49行处增加一行:

COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

将include/configs/fl2440.h 201行左右:

- #define CONFIG_NAND_S3C2410
- #define CONFIG_SYS_S3C2410_NAND_HWECC

+ #define CONFIG_NAND_S3C2440

修改drivers/mtd/nand/s3c2440_nand.c文件:

去掉:

#define S3C2410_NFCONF_EN          (1<<15)
#define S3C2410_NFCONF_512BYTE     (1<<14)
#define S3C2410_NFCONF_4STEP       (1<<13)
#define S3C2410_NFCONF_INITECC     (1<<12)
#define S3C2410_NFCONF_nFCE        (1<<11)
#define S3C2410_NFCONF_TACLS(x)    ((x)<<8)
#define S3C2410_NFCONF_TWRPH0(x)   ((x)<<4)
#define S3C2410_NFCONF_TWRPH1(x)   ((x)<<0)

#define S3C2410_ADDR_NALE 4
#define S3C2410_ADDR_NCLE 8

增加:

#define S3C2440_ADDR_NALE 0xc
#define S3C2440_ADDR_NCLE 0x8

将文件中所有的2410替换成2440:

:g/2410/s//2440/g (VI命令,全部替换)

修改boart_init函数,这个函数主要初始化一些数据,要修改的地方是配置NFCONT和NFCONF

去掉:

#else
        tacls = 4;
        twrph0 = 8;
        twrph1 = 8;
#endif

 cfg = S3C2440_NFCONF_EN;
 cfg |= S3C2440_NFCONF_TACLS(tacls - 1);
 cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);
 cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);
writel(cfg, &nand_reg->nfconf);

增加:

#else
/*
HCLK is 100MHZ
FL2440'NAND FLASH IS K9F1G08U0A
time_acls=tacls*HCLK=10ns
time_we=HCLK*(twrph0+1)=15ns
time_wh=HCLK*(twrph1+1)=10ns
*/
        tacls = 1;//10ns
        twrph0 = 1;//20ns
        twrph1 = 0;
#endif
        u_int32_t cnt;
        cfg =tacls<<12 | twrph0<<8 | twrph1<<4;//for nfconf
        cfg &= ~(1<<0);//bus width:8bit
        writel(cfg, &nand_reg->nfconf);
        cnt = 1<<6|1<<5|1<<0;//for nfcont
        writel(cnt,&nand_reg->nfcont);

修改s3c2440_hwcontrol函数为:

struct nand_chip *chip = mtd->priv;
        struct s3c2440_nand *nand = s3c2440_get_base_nand();

        debugX(1, "hwcontrol(): 0x%02x 0x%02x\n", cmd, ctrl);

        ulong IO_ADDR_W = (ulong)nand;
        //if (ctrl & NAND_CTRL_CHANGE) {
                if (ctrl & NAND_CLE)
                        IO_ADDR_W |= S3C2440_ADDR_NCLE;
                if (ctrl & NAND_ALE)
                        IO_ADDR_W |= S3C2440_ADDR_NALE;
                //chip->IO_ADDR_W=(void*)IO_ADDR_W;
                if(ctrl & NAND_NCE){
                        writel(readl(&nand->nfcont) & ~(1<<1),&nand->nfcont);
                 }else{
                        writel(readl(&nand->nfcont) | (1<<1),&nand->nfcont);
                 }

        //}
        if (cmd != NAND_CMD_NONE)
                writeb(cmd,(void*)IO_ADDR_W);


这个时候已经可以支持NAND FLASH了,但是还会有Signal # 8 caught错误,据说这是新版uboot的问题,修改arch/arm/cpu/arm920t/s3c24x0/timer.c,修改方法我不清楚,参考别人的博客:u-boot-2011.06在基于s3c2440开发板的移植之解决raise: Signal # 8 caught

重新make,将生成的uboot.bin下载到开发板运行,就可以进入uboot了,运行命令nand info,可以查看nand flash信息,打印信息如下:

U-Boot 2011.09-rc1 (Oct 04 2011 - 12:56:05)


DRAM:  64 MiB

WARNING: Caches not enabled

NAND:  128 MiB

Using default environment


In:    serial

Out:   serial

Err:   serial

Net:   CS8900-0Warning: failed to set MAC address


SMDK2410 # nand info


Device 0: nand0, sector size 128 KiB

关于NAND ECC方面,暂时还不清楚,等有空再说,先把国庆过完:-)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值