本篇博文最后修改时间:2016年11月11日,09:11。
一、简介
本文以SimpleBLEPeripheral工程为例,介绍如何将SBL的bootloader的默认大小从2K修改为8K。
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF(主芯片CC2541)
下载软件:SerialBootTool-v1.3.2
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
Java零基础入门交流群:541462902
四、实验前提
在进行本文步骤前,请先阅读以下博文:
1、《CC2541之SBL》:http://blog.csdn.net/feilusia/article/details/52016766
五、实验步骤
1、修改SBL的xcl文件(……\BLE-CC254x-1.4.0\Projects\ble\util\SBL\app\cc254x\sbl_cc254x.xcl)
将
// CODE Root - Taking the first 2K of flash (the 1st page contains the INTVEC's).
//
-D_IVEC_BEG=0x0000
-D_IVEC_END=0x07FF
修改为
//8K
-D_IVEC_BEG=0x0000
-D_IVEC_END=0x1FFF
注意这里必须要修改,不能用//注释,否则后面工程编译会报错。
2、修改SBL工程中的文件(……BLE-CC254x-1.4.0\Projects\ble\util\SBL\iar\cc254x\sbl.eww)
1)修改跳转地址(sbl_main.c)
asm("LJMP 0x2000"); //8K asm("LJMP 0x800");
2)修改跳转地址(sbl_ivec.s51)
OFFSET EQU 0x2000//8K 0x800
3)修改CRC地址(sbl_app.h)
/*
#define HAL_SBL_IMG_BEG (uint16)(0x800 / HAL_FLASH_WORD_SIZE)
#define HAL_SBL_IMG_CRC (uint16)(0x890 / HAL_FLASH_WORD_SIZE)
*/
//8K
#define HAL_SBL_IMG_BEG (uint16)(0x2000 / HAL_FLASH_WORD_SIZE)
#define HAL_SBL_IMG_CRC (uint16)(0x2090 / HAL_FLASH_WORD_SIZE)
3、修改应用工程的xcl文件(……\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\cc254x_f256_sbl.xcl)
1)修改应用代码首地址
将
// CODE
//
-D_CODE_BEG=0x0800
-D_CODE_END=0x7FFF
修改为
// CODE
//
-D_CODE_BEG=0x2000
-D_CODE_END=0x7FFF
2)修改CRC地址
将
-Z(CODE)CHECKSUM=0x890-0x891
-Z(CODE)CRC_SHDW=0x892-0x893
修改为
-Z(CODE)CHECKSUM=0x2090-0x2091
-Z(CODE)CRC_SHDW=0x2092-0x2093
3)修改CRC算法中使用到的CRC地址
将
-J2,crc16,=_CODE_BEG-890,894-_BANK7_END
修改为
-J2,crc16,=_CODE_BEG-2090,2094-_BANK7_END
4、实验结果
1)按照《CC2541之SBL》中的步骤重做,会发现应用工程中的simpleBLEPeripheral.map中的应用代码位置由2K(0x800)位置变为8K(0x2000)位置,对比如下图
2)用手机app搜索,依然能正常搜到设备的广播。因此,实验成功。