LM4F232的boot loader过程

看了LM4F232的bootloader过程,没有看懂,麻烦专家介绍下LM4F232从上电到加载应用程序到SRAM中的过程!!

最好说明清楚CPU运行的是哪里的程序,程序从哪里拷贝到哪里,什么情况下需要更新程序等?

  • 程序不用拷贝,你想一想,ROM256,RAM32,拷贝到SRAM,貌似不行啊,不知道你说的更新程序是什么,可以说详细点吗

  • 上电后程序当然是从FLASH的0x00000000地址开始运行。BOOTLOADER程序代码就是放在0x0地址。应用程序由BOOTLOADER加载运行,故其起始地址由BOOTLOADER决定。当需要更新应用程序时,BOOTLOADER应当通过USB接口从外部U盘中读取更新程序,然后烧录至应用程序区完成更新

  • 晕 打字打了半天居然没有了。再发一次:

    楼上的解释不对的。Cortex M3/M4内核在0x0000.0000存了主堆栈地址,上电后会内核自动加载这里的堆栈地址。在0x0000.0004位置存了一个启动程序入口地址,内核在加载堆栈后会自动跳转到该地址执行程序。所以更改0x0000.0004地址上的地址可以决定上电后从哪里执行程序。

    一般来说Stellaris程序运行在Flash中的,不会拷去RAM。当然用户也可以自己拷进RAM然后在RAM中执行。

    Bootloader因为会擦除Flash所以比较特殊,需要把自身复制到RAM中去。

  • 程序运行不是在SRAM中的吗?

    怎么会到Flash中运行?

    Flash地址和SRAM的地址映射应该是不重合的吧?

    boot loader文档中介绍的startup程序又是放在哪里的?应该是上电后就运行startup程序吧?

    我的理解bootload过程是:

    上电后,启动内核中的startup程序配置程序运行的一些数据段、中断向量以及堆栈等信息,配置完后,将Flash中的bootloader程序加载到SRAM中,程序指针跳转到SRAM中的bootloader程序,运行bootloader程序;bootloader程序先检查是否需要更新应用程序(用户自己编写的实际应用的程序),即检测GPIO的引脚和应用程序的入口地址(此地址是固定的),如果不需要更新,就从应用程序的入口地址处执行程序,如果需要更新,则检测更新程序的方式(GPIO、I2C、USB、ETH等),然后更新应用程序到Flash中,更新完后,执行更新的应用程序(应用程序入口地址固定)。

    我不知道我的理解对不对?麻烦请进行更正和指示!谢谢

  • 再问下,LM4F232的ROM作用只是存放Peripheral Driver Library和Boot Loader的吗?

    应该也和boot 有关吧?求解释!

  • 1. 程序如果没有被复制到RAM里的话就是在Flash中运行

    2. Flash和SRAM在同一个地址空间,但地址不重合

    3. startup定义的是一个放在0x0000.0000的数组,这就是为什么那个数组第一项是指向堆栈的地址

    4. Cortex-M3/M4的内核机制不同,bootloader不是必须的。

    5. ROM中的Bootloader程序启动时不一定运行,但可以在运行应用程序时跳转过去

  • ROM中还会有些数据,如AES加密表和CRC相关的功能