ARM有两种启动方式:NORFLASH启动方式和NANDFLASH启动方式。
NORFLASH启动方式:因为NORFLASH跟SRAM一样可以运行程序,所以这种启动方式下直接在NORFLASH里启动。
NANDFLASH启动方式消汪:因为NANDFLASH它是一块一块地读取,没办法线性读取,所以没办法在其内运行程序。在上电或复位时,NANDFLASH通过硬件将NANDFLASH里的前4K程序移到SRAM,这4K程序最开始必须是启动代码。如果NANDFLASH里的程序大于4K,那还要将剩余的那部分程序移到SDRAM去,因为NANDFLASH自身不能运行程序,并且你还要事先在启动代码里自己加一句要把剩余程序加到SDRAM的程序。
至于SRAM是不是仅仅作为启动用,我觉得如果是NORFLASH启动模式,埋局SRAM可以用作缓存。如果是NANDFLASH启动模式,那它的4K已经被占用了,那就没办法做缓存了。(这个LZ再去拿液仔看看书,我不确定)
JTAG是几个公司联合制定的PCB 和IC 测试标准,一般的arm有JTAG口,通过JTAG线将电脑和开发板的jtag口连接,这样就可以少些程序。如果是全新的ARM,而且用的是NAND FLASH,那你就需要用JTAG线,PC端使用你自己写的SJF工具(SJF源码锋猛网上有,但你要根据自己的硬件配置做些修改,如RAM芯片,FLASH芯片等)将bootloader下载到FLASH的前4K,上电后,ARM会自动将FLASH的4K读到RAM中,然后从RAM中开始引导。这时候,你就可以银液桥通过bootloader,将你的应用程序下载到FLASH的应用程序区,埋轿或从应用程序区将你的应用程序读到RAM中并运行,然后,你的程序就开始跑了
这样讲你能明白吗
要想代码在SRAM中运行。有几个步骤需要做。1、中断向量表需要修改,这样才能把中断向量表重新映射一遍。
#ifdef VECT_TAB_SRAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0)
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0)
#endif
2、分散加载要设置,就是设置你的代码段和数据段在ram的运行地址,就是arm手册中的运行域。碧瞎
3、你的代码相当于boot 和app模式,boot在flash中执行,然后把app从nor flash搬肆慧镇到sram所在地址。
你的运行域地址就是代裂粗码搬移到sram所在的地址
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)