zoukankan      html  css  js  c++  java
  • CC3200模块的内存地址划分和bootloader(一)

    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$ootgen.exe $PROJ_DIR$..
    elocatorewarmReleaseExe
    elocator.bin $EXE_DIR$ootmgr.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升级,具体细节不讲了。

  • 相关阅读:
    验证手机和电话号码
    oracle取字符串长度的函数length()和hengthb()
    AngularJs教程
    nop commerce文档
    根据子查询批量删除的sql语句
    AngularJs赋值问题
    PetaPoco模糊查询
    js转换 /Date(1464671903000)/ 格式的日期的方法
    jquery-cookie插件怎么读写json数据
    executssql 函数的每一句代码的意思
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/8535860.html
Copyright © 2011-2022 走看看