分类: LINUX
2008-11-27 20:55:00
不管是nand启动还是nor启动都需要把 代码全部搬到 sdram 里面
只是nand要复杂点需要对nand 进行配置 reset等 然后才能读取
这个过程可以用c代码来实现 也可以用汇编直接在start下完成
然后通过跳转来实现
nand 启动的时候就是自动复制nand 前4K的到内部4K的SRAM上,并且SRAM的地址为0x00开始,nor flash启动的时候,就是片选nor flash到0x00,直接从0x00开始运行即可。现在有个问题,我nand 启动的时候,能不能访问nor flash,这个nor flash此时的地址是什么。
NAND 启动
#define ROM_BASE 0x4000000 //地址重定向到0x04000000
#define CMD_ADDR0 *((volatile U16 *)(0x555*2+ROM_BASE))
#define _WR(addr,data) *((volatile U16 *)((addr < <1)+ROM_BASE))=(U16)data
#define _RD(addr) ( *((volatile U16 *)((addr < <1)+ROM_BASE)) )#define CMD_ADDR1 *((volatile U16 *)(0x2aa*2+ROM_BASE))
从代码看出,芯片从NandFlash启动时,nGS0的其实地址实际上映射到了0x0400_0000
所以在NandFlash启动的过程中,访问NorFlash要从0x0400_0000地址开始访问。
Nor启动
#define _WR(addr,data) *((U16 *)(addr < <1))=(U16)data
#define _RD(addr) ( *((U16 *)(addr < <1)) )
#define _RESET() _WR(0x0,0xf
作为对照,这个是Samsung测试代码中,从NorFlash启动的代码。
从Nand启动时,nGS0的片选地址就自动切换到0x0400_0000,这个是硬件操作的,不需要软件处理。
Samsung的数据手册没有详细的说明。我也是看代码才发现的。
只能对Samsung发出鄙视了。