Nand Flash Bootloader
因为Nor flash bootloader已经实现了对Nand Flash的烧写,因此在Nand Flash Bootloader中实现flash烧写并不是我的目的,况且,S3C2410运行在NAND BOOT模式下的时候,4K的SRAM位于0地址,上电时刻Nand Flash中block 0的前8个page的数据自动加载到SRAM后开始运行,Nor flash这个时候是不可见的。 因此,我做Nand Flash Bootloader的目的简单而又直接,就是把block1开始的若干个block数据加载到sdram首地址,然后PC跳到那里运行应用程序就可以了。比方说我把编译好的ucos-ii代码放在block1,那么ucos-ii就可以跑起来了。
因此制作Nand Flash一个最重要的问题就是真个程序必须小于4K。应用程序应该是一个完整的应用代码,只是在编译时RO的起始地址应该定位成0x30000000,如果直接用JTAG将其下载到对应地址,程序照样能够跑起来(当然零地址要有中断向量入口程序)。这里我偷懒了一下,将应用程序的中断向量表地址和Nand Flash Bootloader设得完全相同,那样应用程序就可以借用bootloader的中断跳转程序以实现中断的正确跳转,当然应用程序也有自己相应的跳转代码,但是这段代码位于SDRAM起始地址,是不会被执行的;至于堆栈,应用程序在自己得初始化代码中可以重新设置堆栈。
在Nand Flash的硬件方面,我开发板使用的是K9F5608(32M),相对于K9S208(64M),后者的地址需要写四次才能全部送出,而前者只要三次就够了,2410的引脚中专门有nCON控制地址送出的次数。因此当硬件在这两者之间变化时,既要注意外部电路图的接法,又要注意软件代码的正确性。