同时支持HY27UF082G2B,js28f320j3,K9F2G08启动的u-boot,分析J2,

2019-07-12 23:47发布


u-bootnorflashnandflash启动跳线设置


Author:  GuoWenxue QQ: 281143292    武汉大学生嵌入式Linux学习辅导

   以前我的FL2440只有一片K9F2G08的Nandflash,上次拿到一个网友的新的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 ]#