一、NAND启动
此处NAND大小为256M,当从NAND启动时,0地址为片内SRAM,NOR不可见。由于NAND不支持XIP,所以在启动时,硬件自动复制NAND的前4K内容到片内4K的SRAM,若bin文件小于4K,则可以直接在SRAM上运行,若bin文件大于4K,片内SRAM已经满足不了需求,我们需要做的是利用这前4K的代码,完成将所有代码重定位至SDRAM(位于BANK6地址0X30000000,大小64M),然后CPU在SDRAM上运行代码。
二、NOR启动
此处的NOR大小为2M,当从NOR启动时,0地址为NOR,片内SRAM的地址为0X40000000,由于NOR支持XIP,所以低于2M的bin文件可以直接在NOR上运行,当bin文件超过2M时,需要将代码重定位至SDRAM中运行,通常所做的是不论bin文件多大,都将所有代码重定位至SDRAM 。
注意点:由于NAND和NOR重定位时拷贝代码至SDRAM中的方法不同,所以要判断当前是NOR还是NAND启动。因为NOR不能直接写,所以可以先向将0地址数据读出,再向0地址写一个数据再读出与之前的数据比较,相同则为NOR启动,否则为NAND启动。