微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > OAD 后image_A,B不能正常启动和切换

OAD 后image_A,B不能正常启动和切换

时间:10-02 整理:3721RD 点击:

大家好,

          目前所做的项目中要实现OAD功能,配置好相关的宏并产生了image_A,B相关的 .hex文件和bin文件后,通过flash programmer将BIM,IMAGE_A,IMAGE_B烧写入设备后,总是在image_A当中运行;

          在image_A 运行的情况下通过相关软件进行OAD升级后能在image_B中运行,但是通过light blue连接来观察协议,A,B的协议同时存在;然后执行相关切换操作煤油切换到image_A中去,而是不知道运行在哪里了。以下是我执行切换操作的代码:

      uint16 crc[2] = { 0x0000, 0xFFFF };

      uint16 addr = OAD_IMG_R_PAGE * ((uint16)(HAL_FLASH_PAGE_SIZE / HAL_FLASH_WORD_SIZE)) + OAD_IMG_CRC_OSET / HAL_FLASH_WORD_SIZE;

      HalFlashWrite(addr, (uint8 *)crc, 1);

     HAL_SYSTEM_RESET();

     请教相关的大神,谢谢您的帮助。

winter,

看一下xcl文件里面的地址分配时候有问题?

如果有重叠之类的,就可能会有这样的问题。

hi,Yan,

        我分别设置了image_a,和image_b的地址如下:

 image_a :

//
// CODE
//
-D_CODE_BEG=0x0830             // First page is for the IBM which intercepts the H/W INTVECS.
-D_CODE_END=0x3FFF             // Next 5 pages of Bank 0.
//
-D_BANK5_BEG=0x5A800      // Last 11 pages of 5
-D_BANK5_END=0x5FFFF
//
-D_BANK6_BEG=0x68000
-D_BANK6_END=0x6FFFF
//
-D_BANK7_BEG=0x78000
// Cannot use the lock-bits page in a boot-loadable image; skip NV pages area.
-D_BANK7_END=0x7E7FF

 

image_b:

// CODE
//
-D_CODE_BEG=0x4030             // Last 10 pages of Bank 0.
-D_CODE_END=0x7FFF
//
-D_BANK1_BEG=0x18000
-D_BANK1_END=0x1FFFF
//
-D_BANK2_BEG=0x28000
-D_BANK2_END=0x2FFFF
//
-D_BANK3_BEG=0x38000
-D_BANK3_END=0x3FFFF
//
-D_BANK4_BEG=0x48000
-D_BANK4_END=0x4FFFF
//
-D_BANK5_BEG=0x58000   // First 5 pages of 5
-D_BANK5_END=0x5A7FF
//

    通过上面看,没有分配重叠。

    通过多次测试,现在初步假设是下载过程中由于image_b太大导致覆盖了image_a,b 的相应的校验位即CRC 和CRC SHADOW,同时还覆盖了代码当中设置在flash的一个控制变量导致一个功能无法实现,该变量的位置是xDATA的0x075b的位置处。

     image_b CRC 的设置如下:

    -J2,crc=8005,=4004-_BANK5_END

  thanks for your help , 

                    winter

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top