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$\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升级,具体细节不讲了。
CC3200模块的内存地址划分和bootloader(一)的更多相关文章
- CC3200模块的内存地址划分和bootloader,启动流程(二)
1. 首先启动内部ROM固化的BOOT,然后这个ROM启动需要使用内存空间0X2000 0000 --- 0X2000 4000共16K的空间.一级BOOT的作用是串口升级和驱动库. 2. 然后是二级 ...
- Java 内存区域划分 备忘录
最近看了<深入理解虚拟机>的内存分配与管理这部分的内容,这里做一个的总结,以加深我对知识点的理解,如有错误的地方,还望大神们指出,我及时更正: 内存区域划分 首先是下面这幅图: 图 1. ...
- 利尔达CC3200模块第一篇之-wlan_ap例程测试
1. 本次采用利尔达的CC3200模块,CC3200主时钟80M,内部没有flash,必须外接SPI Flash.本次测试采用利尔达科技的CC3200的底板和模块(左边).烧写连接VCC, GND, ...
- 利尔达CC3200模块烧写程序笔记
1. 硬件使用利尔达的CC3200模块,仿真下载器使用利尔达的FTDI仿真器,硬件完全兼容官方的仿真器.仿真器支持IAR的调试,单步运行等操作. 2. 硬件连接接线说明: RXD, TXD, GNG, ...
- python基础——16(re模块,内存管理)
一.内存管理 1.垃圾回收机制 不能被程序访问到的数据,就称之为垃圾. 1.1.引用计数 引用计数是用来记录值的内存地址被记录的次数的. 每一次对值地址的引用都使该值的引用计数+1:每一次对值地址的释 ...
- JVM执行Java程序时内存的划分
Java虚拟机在执行Java程序过程中会把它所管理的内存区域划分为若干个不同的数据区域. Java虚拟机所管理的内存包括以下几个运行时区域: 1.程序计数器(Program Couter Regist ...
- Java 内存区域划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的 ...
- JVM的内存区域划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的 ...
- C/C++中内存区域划分大总结
C++作为一款C语言的升级版本,具有非常强大的功能.它不但能够支持各种程序设计风格,而且还具有C语言的所有功能.我们在这里为大家介绍的是其中一个比较重要的内容,C和C++内存区域的划分. 一. 在c中 ...
随机推荐
- 传统数据仓库项目的优化手段 (针对 Oracle+DataStage )
普通手段 分区,HASH-JOIN,数据仓库函数,物化视图,位图索引等等为大伙在数据仓库常用的技术, 而下面列举的tips为项目中常用的优化手段/技巧,绿色背景highlight的部分属于非常规手段, ...
- ACM-ICPC(10/21)
写一发后缀数组套路题,看起来简单,写起来要人命哦~~~ 总共13题. 分两天debug吧,有点累了~~~ suffix(后缀数组的应用) sa[i] :排名第 i 的后缀在哪(i 从 1 开始) ra ...
- Entity Framework 五
连接情景中的CRUD操作: 连接场景中的CRUD操作是一项相当简单的任务,因为默认情况下,上下文会自动跟踪实体在其生命周期中发生的更改,前提是AutoDetectChangesEnabled为true ...
- React Router 4 的使用(2)
Route Rendering Props 对于给定的路由如何渲染组件,有三种选项:component.render.children.你可以查看 <Route> 的文档来获取更多的信息, ...
- Oracle 数据导出注意事项
1.数据导出exp.expbd和imp.impbd 区别: exp,imp:既可以在客户端执行也可以在服务端执行,效率慢于expbd.impbd expbd.impbd:只能够在服务端执行,impbd ...
- c#数据库连接池Hikari重构升级
Hikari是我自定义的数据库连接池,前面已经提供了地址.因为c#的连接池按照规范的ADO.NET里面实现定义的.由数据库官方提供,但是实现方式就不知道了,反正没有看出来,估计一般是连接类实现的,但是 ...
- poj_2773_Happy 2006
Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD ...
- ABAP术语-Function Builder
Function Builder 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/03/1063196.html Tool for creat ...
- Struts2进阶学习3
Struts2进阶学习3 OGNL表达式与Struts2的整合 核心配置文件与页面 <?xml version="1.0" encoding="UTF-8" ...
- 快速玩转linux(1)
快速上手Linux玩转典型应用 mark 大牛都会使用Linux, Linux命令是行业要求. 商业服务器基本都是linux 开源软件都先支持Linux(只支持) 大数据分析.机器学习首选Linux ...