u-boot,
norflash,
nandflash,
启动,
跳线设置
Author: GuoWenxue QQ: 281143292 武汉大学生
嵌入式Linux
学习辅导
以前我的FL2440只有一片K9F2G08的Nand
flash,上次拿到一个网友的新的FL2440
开发板帮他调试这个板子,他的板子上有一片HY27UF082G2B
Nandflash和一片4MB 的js28f320j3d75 Norflash。前两天终于抽了点
时间改了一下u-boot,能够让同一个bin
文件同时支持这两片Nandflash或Norflash启动,只需要修改跳线设置。下面是烧录过程:
[ s3c2440@guowenxue ]# pri
bootargs=console=ttyS0,115200 mem=64M initrd=0x30800000,16M root=/dev/ram0 rw loglevel=7
bootcmd=run bootcmd_ramdisk
cpu=s3c2440
bbl=
nand erase 0 50000;tftp 30008000 u-boot-$cpu.bin;nand write 30008000 0
$filesize
nbbl=erase bank 1;tftp 30008000 u-boot-$cpu.bin;cp.b 30008000 0 $filesize
bkr=tftp 30008000 uImage-$cpu.gz;nand erase 100000 300000;nand write 30008000 100000 $filesize
bfs=tftp 30800000 ramdisk-$cpu.gz;nand erase 400000 600000;nand write 30800000 400000 600000
bootcmd_ramdisk=nand read 30008000 100000 300000;nand read 30800000 400000 600000;bootm 30008000
tb=tftp 30008000 uImage-$cpu.gz;tftp 30800000 ramdisk-$cpu.gz;bootm 30008000
bootdelay=2
baudrate=115200
ethaddr=08:00:3e:26:0a:6b
ipaddr=192.168.1.244
serverip=192.168.1.100
netmask=255.255.255.0
ethact=dm9000
stdin=serial
stdout=serial
stderr=serial
Environment size: 826/131068 bytes
将u-boot烧录到nandflash上去
[ s3c2440@guowenxue ]# run bbl
NAND erase: device 0 offset 0x0, size 0x50000
Erasing at 0x40000 -- 120% complete.
OK
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:6b
could not establish link
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP
address is 192.168.1.244
Filename 'u-boot-s3c2440.bin'.
Load address: 0x30008000
Loading: T ##########T ##
done
Bytes transferred = 164864 (28400 hex)
NAND write: device 0 offset 0x0, size 0x28800
165888 bytes written: OK
将u-boot烧录到norflash上去
[ s3c2440@guowenxue ]# run nbbl
Erase Flash Bank # 1
........Flash erase timeout at address 1a0000
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:6b
could not establish link
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.244
Filename 'u-boot-s3c2440.bin'.
Load address: 0x30008000
Loading: T ############
done
Bytes transferred = 164864 (28400 hex)
Copy to Flash... done
关于FL2440上的两个跳线帽子J2和J5:
首先来解释J5这个跳线帽子,它是为了设置究竟是从Nandflash启动,还是从Norflash启动,参考原理图如下:
如果接上J5的跳线帽子的话,那么OM0就被拉为低电平,另外参考原理图可以看到OM1这个管脚在CPU上是直接被接到地上的,这样OM1=0 OM0=0。
如果不短接的话,那么0M0就被拉为高电平,这样OM1=0, OM=1了。
为什么要说这两个管脚呢?大家请看s3c2440的datasheet的Memeory Controller中关于BANK0 BUS WIDTH的介绍:
从上面的描述可以得知,如果0M1=0,OM=0的话,那么BANK0就配置Nand Flash启动模式,这样S3C2440的Stepping Stone就会被映射到这个BANK上来,支持从Nandflash启动了。
如果我们不端接J5的跳线帽子的话,那么0M1=0,OM0=1,这样BANK0就配置为Norflash(16bit)启动了。
所以这里,如果我们要从Norflash启动的话,一定不要接上J5这个跳线帽子,如果从Nandflash启动的话,就要短接上。
关于J2这个跳线帽子请大家也看FL2440核心板的原理图:
从上面的原理图上看出,如果J2连接2,3的话那么就是把Norflash映射到NGCS0也就是BANK0上,这时他的地址
空间为0x0000 0000~0x0800
0000;
如果跳线连接J1,J2的话,那么Norflash将接到NGCS1上,这时他的地址空间为0x0800 0000~0x1000 0000。
所以,如果要从Norflash启动的话,就一定要把J2这个跳线帽子接到0(开发板上的丝印为0,我想意思就是NGCS0)上,如果想从Nandflash启动,但同时想用Norflash的话,这时应该把J2跳到1上,同时在u-boot里修改
include/configs/fl2440.h中的#define
PHYS_FLASH_1 0x00000000:
#define PHYS_FLASH_1 0x08000000
综上所述,如果我们要从Nandflash启动的话,J5跳线帽子要接上,J2无所谓(因为如果是从Nandflash启动的话,CPU会将Stepping Stone映射到地址0上这样,norflash就不能访问了,这也就是为什么下面u-boot启动时会打印## Unknown FLASH on Bank 0: ID 0xffff, Size = 0x00000000 = 0 MB。如果我们在u-boot中将PHYS_FLASH_1 改为 0x08000000,同时将跳线帽子跳到1上,就可以探测到Norflash了);
如果要从Norflash启动,J5跳线帽子拔掉,J2跳到0上(
不是论坛上其他人所说的跳到1上)。
关于S3C2440为什么能够从Nandflash上启动,大家可以参考我的blogger:
http://hi.baidu.com/kkernel/blog ... 08b1d180cb4a63.html
下面我
测试的结果:
将J2接到0上,J5也接上,从Nandflash启动:
U-Boot 2010.09-00000-gdfb808a (Nov 06 2011 - 09:40:47)
Modified by guowenxue for s3c2440/s3c2410 board.
DRAM: 64 MiB
## Unknown FLASH on Bank 0: ID 0xffff, Size = 0x00000000 = 0 MB
Flash: 0 Bytes
NAND: 256 MiB
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
将J2接到0上,J5拔掉,从Norflash启动:
U-Boot 2010.09-00000-gdfb808a (Nov 06 2011 - 09:40:47)
Modified by guowenxue for s3c2440/s3c2410 board.
DRAM: 64 MiB
Flash: 4 MiB
NAND: 256 MiB
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
[ s3c2440@guowenxue ]#