首页 资讯 应用 高压 设计 行业 低压 电路图 关于

嵌入式

旗下栏目: PLC 嵌入式 单片机 DCS

BLE空中升级—BIM链接文件bim_cc254x.xcl分析

嵌入式 | 发布时间:2017-11-26 | 人气: | #评论# |本文关键字:BLE,蓝牙,BIM链接
摘要:蓝牙低功耗空中升级第一步要做的事是下载Bootloader程序到CC254x中,用于引导下载升级文件。Bootloader工程在BLE-CC254x-1.3.2\Projects\ble\util\BIM目录下的BIM(ImageBootManager)工程,在编译之前需要选择对应

蓝牙低功耗空中升级第一步要做的事是下载Bootloader程序到CC254x中,用于引导下载升级文件。Bootloader工程在BLE-CC254x-1.3.2\Projects\ble\util\BIM目录下的BIM(Image Boot Manager)工程,在编译之前需要选择对应的链接文件bim_cc254x.xcl来规划bootloader在芯片中的布局。看懂bim_cc254x.xcl链接文件对空中升级的理解具有很大的帮助。

在分析这个链接文件之前,需要充分了解:(1)CC254x的存储布局;(2)51内核的内存布局;(3)IAR链接工具XLINK的命令行,可以分别参考我写的《CC2541存储空间》《51内核的内存空间》《IAR链接器选项说明》。下面就详细分析下bim_cc254x.xcl文件。

1、段的定义

(1) XDATA的空间范围定义

a.定义XDATA起始地址为0x0000

-D_XDATA_BEG=0x0000

b.定义XDATA结束地址为0x1EFF

-D_XDATA_END=0x1EFF

这里定义程序需要的XDATA空间地址范围为0x0000~0x1EFF,共7936字节。

(2) IDATA的空间范围定义

a.定义IDATA的起始地址为0x09

-D_IDATA_BEG=0x09

b.定义IDATA的起始地址为0xFF

-D_IDATA_END=0xFF

实际上IDATA的大小为256字节,地址范围从0x00到0xFF,这段地址映射到XDATA的0x1F00-0x1FFF地址。这里定义程序需要的IDATA空间地址范围为0x09-0xFF,其中0x0x-0x07默认保留给工作寄存器区0(保存R0-R7寄存器的值),而0x08则保留给中断向量的重映射(我不太确定)。

注意:IDATA映射到XDATA的空间0x1F00-0x1FFF与在(1)中XDATA有效的空间地址0x0000-0x1EFF,这两段空间合在一起后,即0x0000-0x1FFF,共8KB的空间,这正是CC2541的RAM空间,如下:

BLE空中升级—BIM链接文件bim_cc254x.xcl分析

(3)代码运行空间范围定义

a.定义代码的起始地址

-D_CODE_BEG=0x0000

b.定义代码的结束地址

-D_CODE_END=0x07FF

注意:BIM工程只占用Bank0的头2K空间,即page0。一定要保证bootloader工程不会占太多的空间。

(4)工作寄存器组的相关定义

a.定义默认的工作寄存器区为工作寄存器区0

-D?REGISTER_BANK=0

b.设置默认工作寄存器区的起始地址为0x00

-D_REGISTER_BANK_BEG=0

注意:51内核的具有4个工作寄存器区,每个工作寄存器区需要8个字节,分别占用DATA的0x00-0x07、0x08-0x0F、0x10-0x17、0x18-0x1F四个地址。

(5)PDATA页设置的定义

定义PDATA默认指向第一个256为单位的空间。

-D?PBANK_NUMBER=00

注意:PDATA以256字节为单位指向片外RAM空间。

(6)位寻址区的相关定义

a.定义位寻址区的位起始地址为0x00。

-D_BREG_BEG=0x00 

b.定义位寻址区的起始地址为0x20。

-D?VB=0x20 

注意:位寻址区位于DATA的0x20-0x2F处。这段地址都可以进行位寻址,也就说存在这16*8=128个位地址:20.0...20.7,21.0...21.7,....2F.0-2F.7。

 2、IDATA空间的布局

(1)位寻址区布局设置

a.设置为寻址区的位起始地址BREG为_BREG_BEG。

-Z(BIT)BREG=_BREG_BEG

b.位地址BIT_N的范围为0x00-0x7F,即0-128。

-Z(BIT)BIT_N=0-7F

(2)DATA区的空间布局

a.安排工作寄存器区REGISTERS的位置为0x00-0x07、0x08-0x0F、0x10-0x17、0x18-0x1F这四段地址。

-Z(DATA)REGISTERS+8=_REGISTER_BANK_BEG

注意:这里的+8表示8字节为单位地增加。

b.设置位寻址区BDATA_Z、BDATA_N、BDATA_I三个段的位置为0x00-0x2F地址范围。

-Z(DATA)BDATA_Z,BDATA_N,BDATA_I=20-2F

c.设置NR_OF_VIRTUAL_REGISTERS个数的虚拟寄存器(VREG,不知道说的是什么东东)分布在_IDATA_BEG-0x7F地址空间。

-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=_IDATA_BEG-7F

d.设置堆栈指针的地址范围:指向XDATA堆栈的堆栈指针XSP和指向IDATA堆栈的堆栈指针PSP布局在_IDATA_BEG-0x7F空间处。

-Z(DATA)PSP,XSP=_IDATA_BEG-7F

e.设置DATA的覆盖区(DOVERLAY,不知道什么意思)的地址范围也是_IDATA_BEG-0x7F空间。

-Z(DATA)DOVERLAY=_IDATA_BEG-7F

f.设置DATA的变量存储空间布局:DATA_I、DATA_Z、DATA_N都放在_IDATA_BEG-0x7F地址范围。

-Z(DATA)DATA_I,DATA_Z,DATA_N=_IDATA_BEG-7F

(3)IDATA区的空间布局

a.设置IDATA段的0x00-0x7F地址内容与DATA段的0x00--x7F地址内容相同。

-U(IDATA)0-7F=(DATA)0-7F

注意:-U标明等号左右两边的内容相同。

b.设置用于存储变量的IDATA_I、IDATA_Z、IDATA_N三个段的地址范围为_IDATA_BEG到_IDATA_END。

-Z(IDATA)IDATA_I,IDATA_Z,IDATA_N=_IDATA_BEG-_IDATA_END

c.设置大小为_IDATA_STACK_SIZE的堆栈ISTACK布局在_IDATA_BEG-_IDATA_END空间。

-Z(IDATA)ISTACK+_IDATA_STACK_SIZE#_IDATA_BEG-_IDATA_END

注意:这里的#号表明堆栈是以_IDATA_END为起始地址向下低地址方向增长的

d.设置IDATA的覆盖区(不知道是什么)布局在_IDATA_BEG--0xFF地址范围处。

-Z(IDATA)IOVERLAY=_IDATA_BEG-FF

3、ROM空间的布局

(1)设置中断向量的起始地址为0x0000。

-Z(CODE)INTVEC=_CODE_BEG

(2)设置BIT_ID、BDATA_ID .... XDATA_ID段布局在_CODE_BEG-_CODE_END地址范围处。

-Z(CODE)BIT_ID,BDATA_ID,DATA_ID,IDATA_ID,IXDATA_ID,PDATA_ID,XDATA_ID=_CODE_BEG-_CODE_END

(3)设置CODE段空间4字节对齐。

-Z(CODE)ALIGNED_CODE|2=_CODE_BEG-_CODE_END

(4)将CSTART,RCODE,DIFUNCT,NEAR_CODE这些段连接成新的段到_CODE_BEG-_CODE_END空间。

-P(CODE)CSTART,RCODE,DIFUNCT,NEAR_CODE=_CODE_BEG-_CODE_END

 4、XDATA空间的布局

(1)设置大小为_XDATA_STACK_SIZE的堆栈(XSTACK)布局在XDATA中的布局。

-Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA_BEG-_XDATA_END

(2)设置用于存储变量的XDATA_Z,XDATA_I,PDATA_Z、XDATA_N的地址范围从_XDATA_BEG到_XDATA_END。

-Z(XDATA)XDATA_Z,XDATA_I,PDATA_Z=_XDATA_BEG-_XDATA_END

-P(XDATA)XDATA_N=_XDATA_BEG-_XDATA_END

 5、杂项

(1)设置处理器类型为51核

-cx51

(2)没有规划的空间都已0xFFFF填充

-HFFFF

责任编辑:BLE工程
首页 | 资讯 | 应用 | 高压 | 设计 | 行业 | 低压 | 电路图 | 关于

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版

Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。