代码上传到github上:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440

前几篇博文: 《mini2440移植uboot 2014.04(一)

mini2440移植uboot 2014.04(二)

mini2440移植uboot 2014.04(三)

mini2440移植uboot 2014.04(四)

(九)修改nand flash代码错误(代码中一些错误修正):

用tftp将uboot加载到mini2440,然后nand erase擦除nand flash,然后再用nand write写入到nand flash后,重新加载uboot,结果又出现了下面的错误(前面已经出现过一次):

Flash: fwc addr  cmd f0 00f0 16bit x  bit
fwc addr 0000aaaa cmd aa 00aa 16bit x bit
fwc addr cmd 16bit x bit
fwc addr 0000aaaa cmd 16bit x bit
fwc addr cmd f0 00f0 16bit x bit
JEDEC PROBE: ID f0 ffff
fwc addr cmd ff 00ff 16bit x bit
fwc addr cmd 16bit x bit
fwc addr cmd ff 00ff 16bit x bit
JEDEC PROBE: ID ffff
*** failed ***
### ERROR ### Please RESET the board ###

如果将include/configs/mini2440.h中的#define DEBUG注释掉,显示信息如下:

U-Boot 2014.04-gb749c10-dirty (Jun   - ::)

CPUID:
FCLK: MHz
HCLK: 101.250 MHz
PCLK: 50.625 MHz
DRAM: MiB
WARNING: Caches not enabled
Flash: *** failed ***
### ERROR ### Please RESET the board ###

再次出现了无法检测nor flash的情况.

暂时先将官方uboot烧写到开发板(先擦除整个nand flash,然后烧写官方uboot)。

然后打开三个控制台,一个执行"sudo minicom",另一个执行"openocd -f interface/jlink.cfg -f board/mini2440.cfg",最后一个控制台执行下面内容:

telnet localhost 4444
reset
init_2440
nand probe 0
nand erase 0
nand write 0  /home/host/soft/mini2440/u-boot/u-boot.bin 0  
reset

在minicom所在控制台上可以正常显示和进入uboot。

执行nand write命令需要很长时间,下面是执行该命令的输出信息:

wrote file /home/host/soft/mini2440/u-boot/u-boot.bin to NAND flash  up to offset 0x00038800 in .817383s (0.320 Ki/s)

231KB的文件足足花了十多分钟,我差点以为telnet命令挂掉了。

修改下面代码(drivers/mtd/nand/s3c2410_nand.c):

#if defined(CONFIG_S3C2440)
if (ctrl & NAND_NCE)
- writel(readl(&nand->nfconf) & ~S3C2410_NFCONT_nFCE,
- &nand->nfconf);
+
+ &nand->nfcont);
else
- writel(readl(&nand->nfconf) | S3C2410_NFCONT_nFCE,
- &nand->nfconf);
+ writel(readl(&nand->nfcont) | S3C2410_NFCONT_nFCE,
+ &nand->nfcont);
}  #if defined(CONFIG_S3C2440)
-       writel(readl(&nand->nfconf) | S3C2410_NFCONT_INITECC, &nand->nfconf);
+       writel(readl(&nand->nfcont) | S3C2410_NFCONT_INITECC, &nand->nfcont);
 #endif

'-'号表示需要删除的代码行,'+'号表示需要添加的代码行。

修改代码后重新编译:

make CROSS_COMPILE=arm-linux-

执行下面命令加载uboot文件:

reset
init_2440
load_image /home/host/soft/mini2440/u-boot-2014.04/u-boot.bin 0x33e80000 bin
resume 0x33e80000

在minicom中得到下面输出信息后就重启系统了:

U-Boot 2014.04-gb749c10-dirty (Jun   - ::)

U-Boot code: 33E80000 -> 33EFA3D8  BSS: -> 33F48ED0
CPUID:
FCLK: MHz
HCLK: 101.250 MHz
PCLK: 50.625 MHz
monitor len: 000C8ED0
ramsize:
TLB table from 33ff0000 to 33ff4000
Top of RAM usable for U-Boot at: 33ff0000
Reserving 803k for U-Boot at: 33f27000
Reserving 4160k for malloc() at: 33b17000
Reserving Bytes for Board Info at: 33b16fe0
Reserving Bytes for Global Data at: 33b16f40
New Stack Pointer is: 33b16f30
RAM Configuration:
Bank #: MiB
addr=33f27000,_start=33e80000
relocation Offset is: 000a7000
WARNING: Caches not enabled
monitor flash len: 00084CF8
dram_bank_mmu_setup: bank:
Now running in RAM - U-Boot at: 33f27000

将include/configs/mini2440.h中CONFIG_SYS_TEXT_BASE修改为0x33E00000:

#define CONFIG_SYS_TEXT_BASE   0x33E00000

重新编译后,加载到系统中:

reset
init_2440
load_image /home/host/soft/mini2440/u-boot-2014.04/u-boot.bin 0x33e00000 bin
resume 0x33e00000

可以正常进入uboot(输出信息太长了,不再列出)。

在uboot下执行下面命令(需要查看md和nand dump输出内容是否一致):

nand read   0x100
nand dump 0x100
md

查看二者输出可以看到,二者输出信息是一致的(只是md的输出信息使用小端法表示,会有点难以比对)

再执行下面命令:

nand erase 0x100000 0x100000
nand dump 0x100000 0x100
nand write 0 0x100000 0x100
nand dump 0x100000 0x100

两次dump的信息一致,但是都是ff,这说明nand write并没有真正把数据写入到nand flash中。

参考《u-boot移植到mini2440,u-boot版本2008.10 》默认不会对写入进行校验,需要添加CONFIG_MTD_NAND_VERIFY_WRITE才能进行校验

在include/configs/mini2440中添加一行代码:

#define CONFIG_MTD_NAND_VERIFY_WRITE

重新编译uboot,并按照上面步骤载入并进入uboot.

然后执行nand write命令:

MINI2440 # nand write  0x100000 0x100

NAND write: device  offset 0x100000, size 0x100
hwcontrol(): 0x70 0x83
hwcontrol(): 0xffffffff 0x81
hwcontrol(): 0x80 0x83
hwcontrol(): 0x00 0x85
hwcontrol(): 0x00 0x05
hwcontrol(): 0x200 0x05
hwcontrol(): 0x02 0x05
hwcontrol(): 0xffffffff 0x81
hwcontrol(): 0x10 0x83
hwcontrol(): 0xffffffff 0x81
hwcontrol(): 0x70 0x83
hwcontrol(): 0xffffffff 0x81
dev_ready
hwcontrol(): 0x00 0x83
hwcontrol(): 0x00 0x85
hwcontrol(): 0x00 0x05
hwcontrol(): 0x200 0x05
hwcontrol(): 0x02 0x05
hwcontrol(): 0xffffffff 0x81
hwcontrol(): 0x30 0x83
hwcontrol(): 0xffffffff 0x81
dev_ready
hwcontrol(): 0xffffffff 0x80
NAND write to offset failed -
bytes written: ERROR

nand write执行失败。

修改drivers/mtd/nand/s3c2410_nand.c:

添加一行代码:
ulong IO_ADDR_W = CONFIG_SYS_NAND_BASE;
删除两行代码:
// struct nand_chip *chip = mtd->priv;
// chip->IO_ADDR_W = (void *)IO_ADDR_W; 修改下面一行代码(chip->替换成(void *):
writeb(cmd, chip->IO_ADDR_W);
还有一行代码中ulong需要删除掉:
ulong IO_ADDR_W = (ulong)nand;

然后再次编译、加载、运行uboot,

在uboot下执行下面命令:

md
nand erase 0x100000 0x100
nand write 0x100000 0x100
nand dump 0x100000 0x100

最后一条命令显示信息如下:

hwcontrol(): 0x00 0x83
hwcontrol(): 0x00 0x85
hwcontrol(): 0x00 0x05
hwcontrol(): 0x200 0x05
hwcontrol(): 0x02 0x05
hwcontrol(): 0xffffffff 0x81
hwcontrol(): 0x30 0x83
hwcontrol(): 0xffffffff 0x81
dev_ready
hwcontrol(): 0xffffffff 0x80
Page dump:
f0 ea f0 9f e5 f0 9f e5 f0 9f e5
f0 9f e5 f0 9f e5 f0 9f e5 f0 9f e5
f8 c0 f8 f8 f8
e0 f8 f8 f8 ef be ad de
f8 f8 cc fb 9c b5 ff
de c0 ad 0b de c0 ad 0b 0f e1 1f c0 e3
d3 e3 f0 e1 a0 e3 a0 e3
e5 e0 e3 9f e5 e5
1c 9f e5 1c 9f e5 e5 9f e5
a0 e3 e5 1f ee e3
1f ee a0 e3 7f 2a a0 e3 e2
e5 5b eb c0 4f e2 1f e5
e1 0a f1 a0 e3 a0 e3
e5 3c a0 e3 e5 e3
2c 1a c4 9f e5 f1 a0 e3 e5
4e a0 e3 b8 9f e5 e5 e5
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
.......................

后面还有一些输出信息,都是ff,此处我都将其省略了。

mini2440移植uboot 2014.04(五)的更多相关文章

  1. mini2440移植uboot 2014.04(六)

    上一篇博文:<mini2440移植uboot 2014.04(五)> 代码已经上传到github上:https://github.com/qiaoyuguo/u-boot-2014.04- ...

  2. mini2440移植uboot 2014.04(四)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <mini2440移植u ...

  3. mini2440移植uboot 2014.04(三)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...

  4. mini2440移植uboot 2014.04(七)

    上一篇博文:<mini2440移植uboot 2014.04(六)> 代码已经上传到github上: https://github.com/qiaoyuguo/u-boot-2014.04 ...

  5. mini2440移植uboot 2014.04(二)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...

  6. mini2440移植uboot 2014.04(一)

    最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...

  7. mini2440移植uboot 2011.03(下)

    参考博文: <u-boot-2011.03在mini2440/micro2440上的移植> 移植(五)添加nand支持: host@debian:~/soft/mini2440/u-boo ...

  8. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  9. mini2440移植uboot 2011.03(上)

    参考博文: <u-boot-2011.03在mini2440/micro2440上的移植> 本来我想移植最新版的uboot,但是移植却不太成功,所以先模仿他人的例子重新执行一遍,对uboo ...

随机推荐

  1. Struts2 结果和结果类型

    正如前面提到的,<results>标签在Struts2的MVC框架的视图中所扮演的角色.动作是负责执行业务逻辑.执行业务逻辑后,接下来的步骤是使用<results>标签显示的视 ...

  2. VC++通过API连接MySQL

    1.  首先安装MySQL数据库server,本文安装的是mysql-installer-community-5.6.10.1.msi这个版本号.至于各个版本号有什么不同,不在这里说明. 例如以下的默 ...

  3. python 自动化之路 day 20 Django进阶/BBS项目【一】

    一.django进阶 1.django orm 增删改查 1.1.创建表: 1 2 3 >>> from blog.models import Blog >>> b ...

  4. Android Otto框架浅析

    今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto. Otto 官网:http://square.github.io/otto/ 一.An ...

  5. Java快车读书笔记

    办公自动化:OA 客户关系管理:CRM人力资源:HR 企业资源计划:ERP知识管理:KM 供应链管理:SCM企业设备管理系统:EAM 产品生命周期管理:PLM面向服务体系架构:SOA 商业智能:BI项 ...

  6. OpenCV学习笔记十六:opencv_calib3d模块

    一,简介: 该库用于3D信息重建,姿态估计,摄像机标定等.

  7. 使用bbed编辑研究oracle数据块结构

    bbed是随oracle软件公布的一款数据块查看和编辑工具,作为一款内部工具.bbed的功能很强大,可是假设使用不当可能给数据库造成无法挽回的损失.因此.我们建议在使用bbed改动数据块前备份被改动的 ...

  8. 如何在shell中处理异常(转)

    似乎好像大概有句话是这么说得,好程序与坏程序之间的区别就在于它的鲁棒性,也就是在异常情况下该程序是否还是在可hold住状态,能否不死,不崩溃,或者不做出一些超出预期的事情.那要做好这些,自然而然就要学 ...

  9. Cocos2d-x Lua中实例:帧动画使用

    下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. 帧动画实例 下面我们再看看具体的程序代码,首 ...

  10. python3使用SMTP发送邮件

    环境:python3 ,IDE : pycharm 非常奇怪的是,用163发送邮件,如果电脑连校园网发送,会被当成垃圾邮件拒绝 如果用手机开热点就可以正常发送 代码如下 #!/usr/bin/pyth ...