这是我参考手册和书之后的体会,可能理解有错,欢迎大家拍砖!
Nor和Nand方式启动切换的方式是用跳线开关实现,这里跳线的实质就是用开关来片选你nGCS0这一段存储器,也就是地址为0x0000 0000到0下0800 0000这一段。
在开机复位之后CPU会首先读这一段。这里我把他理解成磁盘的MBR。把这一段读出来放到内存SDRAM(编址0x3000 0000到0x4000_0fff),然后开始执行。
当Nor方式启动时,nGCS0片选的是NorFlash存储器作为这一段地址的存储器,当Nand方式启动时,片选的是内存SDRAM中的引导块(Boot Internal,4K)作为这一段地址的存储器。关于这个Boot Internal后文会再说。
由此我们可以看出:
无论哪一种引导方式,NandFlash都会被映射到0x0800_0000开始的地址段。
只有当Nor方式时,NorFlash才会被片选,安排到0x0000 0000到0x0800 0000这一段;从Nand引导时没有被编址,无法使用;
所以无论怎么启动,都可以操作NandFlash;
同时,如果从Nand方式启动,我们可以看出NorFlash没有被片选进来,因此无法操作其数据。
再来看看SDRAM的Boot Internal区块,按照地址的编排:
在Nor引导时,这一块分配在SDRAM的最后,也就是0x4000 0000到0x4000 0fff,相当于普通的存储器。
在Nand引导时,这块被映射到0x0000 0000到0x0000 0fff,作为CPU开机复位首先要读取的部分(传说中的4K?)
因此,我猜测Boot Internal中的代码要么是告诉CPU如何找到NandFlash的bootloader的地址并载入,要么干脆就是NandFlash的bootloader的实际存储区域。
以上分析完全可能全错!希望大家指点~