0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将原有的OAD示例代码所包含的BIM起始地址从0x1F000改到0x1000

电子设计 来源:电子设计 作者:电子设计 2022-01-11 14:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通常在实现OAD(on-air-download)功能的过程中,TI会提供标准的示例BIM(Boot Image Manager)代码来进行镜像校验和下载。在TI所提供的示例代码中,BIM代码一般位于内部flash page31,和CCFG相邻。若用户根据自身功能定义不同,需要在BIM代码区域增加更多功能(例如自定义UART / SPI boot, 自定义安全校验功能等等)而导致自定义功能后的BIM代码超出4k byte,又由于BIM区域与CCFG及NV Storage Area相邻,在原有位置不能扩大,只能考虑重新为BIM划定地址空间来满足需求。

本文基于LAUNCHXL-CC2650评估板(http://www.ti.com.cn/tool/cn/launchxl-cc2650) 和BLE-STACK-2-2-1 SDK,详细描述如何将原有的OAD示例代码所包含的BIM起始地址从0x1F000改到0x1000,并且将BIM的地址区间从4k扩到8k。

注:所有不同版本的BLE SDK可以在以下网址找到:http://www.ti.com/tool/BLE-STACK-ARCHIVE

此外本文还会谈到在进行BIM重定位过程中会遇到的以下问题及其解决方案:

TI RTOS相关Flash区域冲突的规避

新的目标Image有效header的产生

如何修改python工具的脚本生成新的Image

*****************************************************************************************************************

首先关于BIM起始地址的修改,分以下几步:

Step1: 修改simple_peripheral project -> cc2650lp_app project的 flash起始地址

Step2: 重新给bim_extflash project 的BIM代码分配地址空间

Step3: 使用新的BIM分配方式来实现OAD功能

Step1:修改simple_peripheral project -> cc2650lp_app project的 flash起始地址

在IAR7.70/IAR7.8中导入C:\ti\simplelink\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral 文件夹下的项目如下

1) 修改APP_IMAGE_START

打开cc2650lp_app-FlashOnly_OAD_ExtFlash 工程的option--linker—config,将APP_IMAGE_START从0x1000修改成0x3000

2) 修改RTOS运行方式

从项目中打开打开CC2640.cfg,或者直接在以下地址内找到这个文件: ble_sdk_2_02_01_18\src\common\cc26xx\kernel\cc2640\config)

注释掉下图所示的代码:

原因:当选择“use BIOS in ROM”方式时,RTOS 的ROM指针会被固定的放在0x1500区域。这样就与我们所想要自定义的BIM代码空间冲突了。而选择“use BIOS in Flash”的方式可以让TI-RTOS从FLASH启动,以避免这个问题。当然”use BIOS in Flash”的方式会稍微多占用一些用户的flash区域。

3) 修改reset vector的地址

接上一步,在CC2640.cfg中,将m3Hwi.resetVectorAddress 从0x1010修改为0x3010。

原因:这是reset vector的地址,应该跟在header后面。

step2:重新给bim_extflash project的BIM代码分配地址空间

在IAR7.70/IAR7.8中导入C:\ti\simplelink\ble_sdk_2_02_01_18\examples\util\bim_extflash\cc2640文件夹下的项目如下

打开上图所示的cc26xx_bim_extflash.icf文件,重新定义一个FLASHPAGE1,定义其范围为8k,把region BIM定义为PAGE1的区域,并将BIM_START从0x1F000修改到0x1000.

      

编译通过后,检查生成的bim_extflash.map, 确认之前的改成是否有效。

Step3:使用新的BIM分配方式来实现OAD功能

基于step2中的操作,打开同一个项目中如下图所示的bim_main.c

做如下修改:

重新打开STEP1中修改过的C:\ti\simplelink\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral下的project, 找到

找到图中所示的oad_target_external_flash.c,做如下修改

以上三步完成后,各自重新编译成功,即完成了项目需要的所有改动。

*************************************************************************************

其次,为了配合新的地址分配来实现OAD,我们需要生成新的目标Hex待烧录文件。仍然采用相关的Python工具(这里使用了Python 2.7.10)来生成需要的新的hex文件(新的文件包含正确的metadata Header)。

注:这里重点说明BIM地址修改后,如何对python脚本进行修改。关于提到的Python工具的下载和使用说明可以参见BLE SDK中包含的CC2640 BLE OAD User’s Guide.pdf说明文档中的如下章节,这里不另加赘述。

10.1 Installing Python

10.2 TI OAD Image Tool (Python)

根据我们之前的修改,已经把simple_peripheral project -> cc2650lp_app project的代码起始地址改成了0x3000,而原来采用的python工具脚本所生成的hex文件,是配置成将header的imgAddr改成0x1000的,与我们需要把起始代码改成0x3000的需求不符。所以,我们需要对原有python 工具的脚本和相关操作进行修改,分成以下两步:

1) 修改oad image的脚本文件( oad_image_tool.py)

该脚本文件位于:C:\ti\simplelink\ble_examples-ble_examples-2.2\tools\scripts\oad文件夹

用PythonGUI打开该文件,将startAddr赋值为0x3000,如下:

2) 修改python 工具的脚本的相关操作

这里我们会用到两个Python的argument: -m –r, 来完成修改目标Image的metadata header地址 的目的。

     

在命令行界面输入如下命令:

> set PATH=%PATH%;C:\python27\

> Python C:\ti\simplelink\ble_examples-ble_examples-2.2\tools\scripts\oad\oad_image_tool.py C:\Users\x0269290\Downloads\Desktop\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral\iar\app\FlashOnly_OAD_ExtFlash\Exe\simple_peripheral_cc2650lp_app.hex -o C:\Users\x0269290\Downloads\Desktop\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral\iar\app\FlashOnly_OAD_ExtFlash\Exe\Simple_peripheral_cc2650lp_app.hex -m 0x3000 -r :0xD000

(注:根据python脚本、目标hex、输出hex所在位置及名称的不同需要对命令做出对应的更改。)

如图所示:

得到结果如下:

注:以上例子中的“-m”是用命令给metaAddr赋值。但因为metaAddr(0x3000)大于imgStartAddr(0x1000)导致错误,所以在1)中修改python脚本中的对应代码。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式处理
    +关注

    关注

    0

    文章

    341

    浏览量

    10449
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    N9H30如何SPI闪存应用程序加载到RAM地址0x0

    无法利用 uboot SPI 闪存0x0应用程序加载到 RAM 地址。SF 读取0x0 0x
    发表于 09-01 06:06

    请问如何使用 NUC220 应用程序 APROM 0x0000切换到 APROM 0x4000?

    我在 APROM 0x0000 中保存了 1 个应用程序,在 APROM 0x4000 中保存了 1 个应用程序,如何使用 NUC220
    发表于 08-27 06:20

    Texas Instruments LMR664x0/LMR664x0-Q1降压转换器数据手册

    Texas Instruments LMR664x0/LMR664x0-Q1降压转换器有2A和1A型号可供选择,采用增强型HotRod QFN封装。小型LMR664x0/-Q
    的头像 发表于 07-31 15:08 851次阅读
    Texas Instruments LMR664<b class='flag-5'>x0</b>/LMR664<b class='flag-5'>x0-Q1</b>降压转换器数据手册

    如何将地址 FCANFDx FiF 0 加载到 DMA 线的 SRC 寄存器中?

    您能否提供一个示例,说明如何将地址 FCANFDx FiF 0 加载到 DMA 线的 SRC 寄存器中? 我不想使用固定地址加载,例如:
    发表于 07-18 08:06

    Texas Instruments LM706x0/LM706x0-Q1降压转换器数据手册

    Texas Instruments LM706x0/LM706x0-Q1降压转换器具有4.5V至65V的输入电压范围和在固定输出电压(3.3V、5V、12V)下高达10A的输出电流或可调的输出电压
    的头像 发表于 07-17 14:28 573次阅读
    Texas Instruments LM706<b class='flag-5'>x0</b>/LM706<b class='flag-5'>x0-Q1</b>降压转换器数据手册

    S32K14X_MCAL4_0_RTM_1_0_0示例项目加载到EB Tresos Studio V21.0.0时出现报错,为什么?

    我下载并安装了 S32K1xx 的 RTM:S32K14X_MCAL4_0_RTM_1_0_0。当我尝试示例项目加载到我的 EB Tresos Studio V21.0.0 中时,我
    发表于 03-20 07:33

    STM32F407嵌入式SRAM映射为0x20020000,为什么?

    20020000,与0x20000000不匹配,所以进不去。然后我通过Prg查看寄存器值,如下所示: 发现0x08008000地址的值确实为0x20020000。所以我
    发表于 03-10 08:24

    在starvision2上移植FreeRTOS,objdump后发现static变量的地址0,怎么解决?

    = .; *(.srodata .srodata.* .rodata .rodata.* .gnu.linkonce.r.*) rodataend = .;} . = ALIGN(0x1000);/*
    发表于 03-10 07:21

    GD32F1x0硬件开发指南

    电子发烧友网站提供《GD32F1x0硬件开发指南.pdf》资料免费下载
    发表于 02-09 15:39 0次下载
    GD32<b class='flag-5'>F1x0</b>硬件开发指南

    GD32F3x0硬件开发指南

    电子发烧友网站提供《GD32F3x0硬件开发指南.pdf》资料免费下载
    发表于 02-07 17:19 1次下载
    GD32<b class='flag-5'>F3x0</b>硬件开发指南

    GD32F3x0的设备限制

    电子发烧友网站提供《GD32F3x0的设备限制.pdf》资料免费下载
    发表于 01-21 17:47 0次下载
    GD32<b class='flag-5'>F3x0</b>的设备限制

    GD32F3x0用户手册

    电子发烧友网站提供《GD32F3x0用户手册.pdf》资料免费下载
    发表于 01-16 14:42 0次下载
    GD32<b class='flag-5'>F3x0</b>用户手册

    STM32模拟eeprom只有起始地址0x8001000正常其他地址都会造成单片机运行不正常怎么回事

    STM32F103C8T6模拟eeprom只有起始地址0x8001000正常其他地址都会造成单片机运行不正常怎么回事
    发表于 12-29 23:05

    LDC1000地址0x03、0x0A,0X0B分别代表什么意思,具体该怎么设置?

    地址0x03、0x0A,0X0B分别代表什么意思,具体该怎么设置
    发表于 12-27 06:46

    DAC38J82循环输出0x1000~0xF000累加的锯齿波形,波形上叠加有高频杂波的原因?怎么解决?

    问题1: 配置:LMFK=1:1:2:321DAC,不插值(250Mfs linerate=5G); 问题现象:循环输出0x1000~
    发表于 12-06 06:05