关于ARM9片内SRAM的问题

关于ARM9片内SRAM的问题,第1张

我特意去翻了十多分钟的书来给你解答这个问题。

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所在的地址


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12548568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存