CC3200模块的内存地址划分和bootloader(一)

您所在的位置:网站首页 cc3200模块 CC3200模块的内存地址划分和bootloader(一)

CC3200模块的内存地址划分和bootloader(一)

2023-03-15 03:19| 来源: 网络整理| 查看: 265

1. CC3200的内存地址划分非常特殊,如果没测试的话,很容易懵逼。我们先看芯片手册里面的内存地址。芯片的RAM是256KB,下图的0x2000 0000-0x2003 FFFF,正好是256KB。

2. 首先明确一个概念,CC3200是没有内部FLASH的,所以在运行的时候需要把程序全部拷贝到RAM里面。也就是IAR编译的.bin文件不能超过RAM的空间。启动地址是0x2000 0000,当然第一个启动的程序是芯片内部固化在ROM的bootloader(我们称之为一级BOOT),这个主要作用就是用于串口升级,驱动库之类的。然后要注意这个一级BOOT也需要使用内存16KB,它使用的内存地址是0x2000 0000---0x2000 4000

然后看下以getweather(用户例程)为例子,看下icf文件,这个用户例程使用的是0x2000 4000---0x2003 FFFF

define region SRAM = mem:[from 0x20004000 to 0x2003FFFF];

使用UNIFLASH时,烧写界面如下(不需要OTA升级功能(远程无线升级))。

3. 假如我们需要OTA(远程无线升级)升级功能的话,我们需要二级BOOT(用户bootloader),这个用户bootloader和上图的On chip ROM(bootloader)是两个完全不同的,前者是我们自己改写的,用于OTA升级用途的,后者是TI固化的串口升级。先启动后者On chip ROM(bootloader)这个用户完全不用关心,再启动用户的bootloader。

4. 在二级BOOT使用中,需要用到工程有3个,application_bootloader,relocator(在application_bootloader工程的里面),以及应用代码比如get_weather。relocator这个工程的作用就是先把用户的重定向功能。看一下3个工程的地址空间,查看工程里面的icf文件。

application_bootloader工程 0x20000000 to 0x20004000 relocator工程 0x20004000 to 0x20004100 get_weather工程 0x20004000 to 0x2003FFFF

看下图在工程目录下有一个程序,bootgen.exe的用途是把两个工程的bin(application_bootloader.bin和relocator.bin)文件合并成一个bootmgr.bin。程序首先启动On chip ROM(bootloader),从外部SPI FLASH读取这个合并的bootmgr.bin文件到内部RAM里面,然后执行relocator工程,任务是重定向到application_bootloader,application_bootloader工程从外部SPI FLASH读取get_weather.bin到内部RAM,并执行get_weather。以上步骤需要UNIFLASH烧写工具的配合。CC3200在外部的SPI FLASH上面有一个文件系统,application_bootloader通过文件名找到get_weather.bin。

$PROJ_DIR$\bootgen.exe $PROJ_DIR$\..\relocator\ewarm\Release\Exe\relocator.bin $EXE_DIR$\bootmgr.bin $EXE_DIR$\application_bootloader.bin

IAR的配置选项。我们需要明确程序是从0x20004000开始启动的(因为一级BOOT占用了前16KB空间)。

5. 关于以上还有一个问题,需要澄清,既然后面2个工程都是0x20004000起始地址,凭什么说先启动relocator的

application_bootloader工程 0x20000000 to 0x20004000 relocator工程 0x20004000 to 0x20004100 get_weather工程 0x20004000 to 0x2003FFFF

这个要从UNIFLASH的烧写说起,UNIFLASH把bootmgr.bin烧写到/sys/目录下,并且重命名为mcuimg.bin,所以On chip ROM(bootloader)启动寻找/sys/目录下的mcuimg.bin。然后mcuimg.bin根据/sys/mcubootinfo.bin的信息启动/sys/mcuimg1.bin(也就是get_weather.bin)。注意注意,IAR工程里面的icf文件的RAM地址一定要写对。如上。

同理看下/sys/mcuimg1.bin,也是重命名。总结起来,不管用不用

6. 总结一下。

(a)烧写分为两种,支持OTA升级(一级BOOT+二级BOOT+应用)。不需要OTA(一级BOOT+应用)

(b)两种烧写方法,应用的icf写法一样的。

(c)0x20004000是写死的,有人说我的用户bootloader想多写点东西,0x20000000到0x20004000的空间不够了怎么办,也是有办法的,以后讲。

(d)由于第一次/sys/mcubootinfo.bin这个文件是空的,所以bootloader选择启动/sys/mcuimg1.bin,这个牵扯到OTA升级,具体细节不讲了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3