TI中文支持网
TI专业的中文技术问题搜集分享网站

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

大家好,

          目前所做的项目中要实现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();

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

Luffy liu:

回复 Yan:

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

赞(0)
未经允许不得转载:TI中文支持网 » OAD 后image_A,B不能正常启动和切换
分享到: 更多 (0)