ok6410 uboot nandflash移植

原创 2015年07月07日 15:22:51

1.4  Nandflash移植

先解决上面的错误,修改arch/arm/cpu/arm1176/s3c64xx/timer.c

static ulong timer_load_val;修改为 DECLARE_GLOBAL_DATA_PTR;

删除下面的两个定义:

/* Internal tick units */

/* Last decremneter snapshot */

static unsigned long lastdec;

/* Monotonic incrementing timer */

static unsigned long long timestamp;

接着把:

        timers->TCFG0 =PRESCALER << 8;

        if (timer_load_val == 0) {

                timer_load_val =get_PCLK() / PRESCALER * (100 / 4); /* 100s */

                timers->TCFG1 =(timers->TCFG1 & ~0xf0000) | 0x20000;

        }

修改为:

        timers->TCFG0 =PRESCALER << 8;

 

        gd->timer_rate_hz =get_PCLK() / PRESCALER * (100 / 4); /* 100s */

        timers->TCFG1 = (timers->TCFG1& ~0xf0000) | 0x20000;

将lastdec = timers->TCNTB4 = timer_load_val;修改为:

gd->lastinc = timers->TCNTB4 = gd->timer_rate_hz;

将timestamp = 0;修改为gd->timer_reset_value = 0;

将unsigned long long get_ticks(void)

{

        ulong now = read_timer();

 

        if (lastdec >= now) {

                /* normal mode */

                timestamp +=lastdec - now;

        } else {

                /* we have anoverflow ... */

                timestamp +=lastdec + timer_load_val - now;

        }

        lastdec = now;

 

        return timestamp;

}

修改为:

unsigned long long get_ticks(void)

{

        ulong now = read_timer();

 

        if (gd->lastinc >=now) {

                /* normal mode */

               gd->timer_reset_value += gd->lastinc - now;

        } else {

                /* we have anoverflow ... */

               gd->timer_reset_value += gd->lastinc + gd->timer_rate_hz - now;

        }

        gd->lastinc = now;

 

        returngd->timer_reset_value;

}

将ulong get_tbclk(void)

{

        /* We overrun in 100s */

        return(ulong)(timer_load_val / 100);

}

 

ulong get_timer_masked(void)

{

        unsigned long long res =get_ticks();

        do_div (res,(timer_load_val / (100 * CONFIG_SYS_HZ)));

        return res;

}

修改为:

ulong get_tbclk(void)

{

        /* We overrun in 100s */

        return(ulong)(gd->timer_rate_hz / 100);

}

 

ulong get_timer_masked(void)

{

        unsigned long long res =get_ticks();

        //do_div (res,(timer_load_val / (100 * CONFIG_SYS_HZ)));

        return res;

}

修改nand_spl/board/samsung/ok6410/ok6410_nand_spl.c将

void board_init_f(unsigned long bootflag)

{

       relocate_code(CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL,

                       CONFIG_SYS_TEXT_BASE);

}

改为:

void board_init_f(unsigned long bootflag)

{

        relocate_code(8*1024,NULL,

                       CONFIG_SYS_TEXT_BASE);

}

修改bl1的配置大小:nand_spl/board/samsung/ok6410/config.mk

# PAD_TO used to generate a 4kByte binary needed for the combined image

# -> PAD_TO = CONFIG_SYS_TEXT_BASE + 4096

PAD_TO  := $(shell expr$$[$(CONFIG_SYS_TEXT_BASE) + 4096])

修改为

# PAD_TO used to generate a 8kByte binary needed for the combined image

# -> PAD_TO = CONFIG_SYS_TEXT_BASE + 8192

PAD_TO  := $(shell expr$(CONFIG_SYS_TEXT_BASE) + 8192)

重新编译烧写:


Nandflash的初始化过程如下:

board_init_rànand_initànand_init_chipàboard_nand_initànand_scanà

nand_scan_identànand_scan_tailànand_register

在drivers/mtd/nand/nand_ids.c文件中定义了连个数组:nand_flash_ids[]和nand_manuf_ids[]。

添加ok6410 nandflash型号:

        /* 16 Gigabit */

        {"NAND 2GiB 1,8V8-bit",        0xA5, 0, 2048, 0,LP_OPTIONS},

        {"NAND 2GiB 3,3V8-bit",        0xD5, 0, 2048, 0,LP_OPTIONS},

        {"NAND 2GiB 3,3V8-bit",        0x38, 4096, 2048,4096*128, LP_OPTIONS},

        {"NAND 2GiB 1,8V16-bit",       0xB5, 0, 2048, 0,LP_OPTIONS16},

        {"NAND 2GiB 3,3V16-bit",       0xC5, 0, 2048, 0,LP_OPTIONS16},

每个字段的含义如下:注意  IDcode需要自己测。

Name. ID code, pagesize, chipsize in MegaByte, eraseblock size, options

重新编译烧写:


这里nandflash是使用的4位ecc校验,有兴趣的可以自己实现8位ecc校验,6410是支持8位ecc的。

相关文章推荐

ok6410-uboot2012.10移植--环境搭建

一、下载uboot源码 下载地址:ftp://ftp.denx.de/pub/u-boot/,下载uboot2012.10源码 二、解压源码 tar -xvf u-boot-2012.10....

OK6410 USB DNW移植支持uboot2013.04

  • 2013年12月03日 15:18
  • 16KB
  • 下载

OK6410 uboot2013.04-rc1 DM9000移植及tftp配置使用

uboot2013.04-rc1 DM9000移植及tftp配置。

OK6410(256MRAM2Gnandflash) uboot2010.03移植笔记之error小结

1. root@ubuntu:/file/uboot201003# make Generating include/autoconf.mk Generating include/autoconf...
  • jinatom
  • jinatom
  • 2012年08月18日 11:00
  • 1533

OK6410-A开发板学习-④uboot移植(2)

根据上一篇的移植,我们可以尝试load进ram试试能不能起来 将生成的u-boot.bin放到tftpserver,在小板串口上配置好ip然后下载文件,但go之后并没有起来 SMDK6410 # tf...
  • fzs333
  • fzs333
  • 2016年02月02日 18:58
  • 770

OK6410-A开发板学习-③uboot移植(1)

uboot用的是u-boot-2010.03.tar.bz2 原因和下载地址见 http://blog.csdn.net/davion_zhang/article/details/50617778 ...
  • fzs333
  • fzs333
  • 2016年02月02日 17:07
  • 559

OK6410之uboot移植(2)——U-Boot启动过程完全分析

1.1      U-Boot工作过程   U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:       (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boo...

OK6410 uboot移植之sd启动

1  uboot移植 1.1  移植准备工作 1.1.1 安装交叉编译工具链 版本:arm-linux-gcc 4.4.1 环境:ubuntu14.04.01LTS   1.1.2建立OK6410配置...

OK6410上uboot1.1.6的dm9000AE移植(续)

此贴属《OK6410上uboot1.1.6的dm9000AE移植》的续贴,前者移植dm9000ae的目的就是为了挂载NFS! 前面遗留的第一次Ping不通的问题,没有影响到我的NFS的挂载,所以暂且...

OK6410(256M RAM ,2G SLC NAND)Uboot-2013-04移植

u-boot2013.04 ok6410移植 先从SD卡启动加载uboot到Nandflash,然后断电选择Nandflash启动模式,从Nandflash启动。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ok6410 uboot nandflash移植
举报原因:
原因补充:

(最多只允许输入30个字)