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裸机简单的NAND FLASH驱动

OK6410裸机简单的NAND FLASH驱动,只写了个简单的函数,读取一页 /**********************************************************...
  • cp1300
  • cp1300
  • 2012年07月20日 22:42
  • 5213

个人对nandflash驱动的总结(ok6410版)

个人对nandflash驱动程序的设计及编写的总结(针对ok6410板) 1,首先说明要用nandflash的原因,当你从nand启动时,6410中的硬件会自动将nand中的8k内容拷贝到开发板中内...
  • xiaoqiang137549
  • xiaoqiang137549
  • 2014年05月30日 10:39
  • 354

OK6410的nandflash裸机代码

  • 2014年04月25日 10:12
  • 10KB
  • 下载

OK6410(s3c6410)存储方式之NAND FLASH

回顾:内存访问通过地址线寻址CPU,数据线传输数据,比较直接的访问。   1.NAND flash充当硬盘角色。 2.SLC的物理结构,访问速度快 3.NAND flash不占地址空间,独立编...
  • u010853261
  • u010853261
  • 2014年08月29日 11:04
  • 474

OK6410裸机简单NANDFLASH初始化及读写擦除

OK6410裸机简单的NANDFLASH读写及擦 文章转载请注明出处:http://blog.csdn.net/wf395962475/article/details/8221250 今天...
  • u010346967
  • u010346967
  • 2015年01月21日 14:49
  • 1067

OK6410 uboot移植之sd启动

1  uboot移植 1.1  移植准备工作 1.1.1 安装交叉编译工具链 版本:arm-linux-gcc 4.4.1 环境:ubuntu14.04.01LTS   1.1.2建立OK6410配置...
  • u010346967
  • u010346967
  • 2015年07月07日 15:10
  • 1134

ok6410 nandflash 驱动

  • 2012年12月15日 13:39
  • 9KB
  • 下载

OK6410(256MRAM2Gnandflash) Linux3.0.1内核移植

这里我主要移植的是增加yaffs2文件系统支持,修改和移植nand驱动。   1.不知道为什么我这yaffs2的补丁打上了就没发现过编译错误,相当顺利啊 呵呵。 附上补丁地址----------...
  • jinatom
  • jinatom
  • 2012年08月17日 23:07
  • 1134

ok6410-uboot的配置和编译过程分析

一、uboot的的配置和编译 1、配置:make smdk6410_config SRCTREE             := $(CURDIR) MKCONFIG   := $(SRCTR...
  • lanyzh0909
  • lanyzh0909
  • 2013年05月12日 18:26
  • 1610

OK6410 uboot编译以及设置uboot开机自动启动内核

1. 编译U-Boot 在linux下解压缩uboot源码 第二步:配置相关选项,编译出能在目标板上运行的映像文件 打开顶层Makefile 可以看到这个选项 这里使用编译选项然后make编译 用上面...
  • coding__madman
  • coding__madman
  • 2016年04月30日 21:58
  • 3084
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ok6410 uboot nandflash移植
举报原因:
原因补充:

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