This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2541:OAD:链接器(IAR)和 BIM 之间的 CRC 不匹配

Guru**** 2553440 points
Other Parts Discussed in Thread: CC2541

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/576048/cc2541-oad-crc-mismatch-between-linker-iar-and-bim

器件型号:CC2541

您好!

我正在尝试使用"BLE-CC254x-1.4.2.2"堆栈中提供的默认图像大小和链接器文件来实现 OAD。  我在 IAR 中使用调试选项将 BIM 写入闪存、然后使用 IAR 中的调试选项将 ImageA 写入闪存。 cc2541进入睡眠模式、因为 BIM 计算的 CRC (CRC[1])与 IAR 计算的 CRC (CRC[0])不匹配。  

您能帮助调试这个吗?

设置的详细信息如下所示

BIM_MAIN.c 常量

/*------------------------------------------------
* 常数
*----------------------------------------------------------------
*/

#define BIM_IMG_A_PAGE 1
#define BIM_IMG_A_AREA 62

#define BIM_IMG_B_PAGE 8
#define BIM_IMG_B_AREA (124 - BIM_IMG_A_AREA)

#define BIM_CRC_OSET 0x00
#define BIM_HDR_OSET 0x00

oad_target.h 常量

/*********
*常量
*/

#if!定义 OAD_IMG_A_PAGE
#define OAD_IMG_A_PAGE 1
#define OAD_IMG_A_AREA 62
#endif

#if!定义的 OAD_IMG_B_PAGE
//实施 BIM vice OAD 引导加载程序时,Image-A/B 的大小可能非常不同。
#if defined feature_OAD_BIM
#define OAD_IMG_B_PAGE 8
#else
#define OAD_IMG_B_PAGE 63
#endif
#define OAD_IMG_B_AREA (124 - OAD_IMG_A_AREA)
#endif

如果需要任何其他信息、请告知我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Niraj、您好!

    您能否添加此帖子建议的更改: e2e.ti.com/.../1939005

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 JKS 的回应。

    我没有成功地尝试过这种方法。

    在进一步调试时、我发现闪存中不存在图像标头。 这似乎是链接器问题。  

    以下是从 oad_target.c 中提取的数据

    #pragma LOCATION ="image_header"
    const __code img_hdr_t _imgHdr ={
    #if defined feature_OAD_secure
    2012、 // CRC 不得为0x0000或0xFFFF。
    #endif
    #if defined (BOOTP_E_IMAGE_A)
    #warning "Enstring a crc- shadow match with the BOOTP_E_IMAGE_A flag - is this bootstrap code"(使用 BOOT_E_IMAGE_A 标志强制执行 CRC 影子匹配-是否是此引导代码?
    2012年、 //强制使用 crc-影子来匹配自举加密镜像的 CRC A
    #else
    0xFFFF、 //对于
    所有其它#endif
    OAD_IMG_VER (OAD_IMAGE_VERSION)、// 15位版本号、左移1;或者使用 Image-B/NOT-A 位,crc影子 必须为0xFFFF。
    OAD_IMG_R_Area * OAD_FLASH_PAGE_MULT、
    #if defined HAL_IMAGE_A
    OAD_IMAGE_A_USER_ID、 //用户 ID
    #else
    OAD_IMAGE_B_USER_ID, //用户 ID
    #endif
    {OAD_MAJOR _VER、OAD_MINOR _VER、OAD_REVISION、0xFF}//保留
    };
    #pragma REQUIRED =_imgHdr
    
    #pragma LOCATION="AES_HEADER "
    静态常量__code AES_HDR_t _aesHdr ={
    0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、 0xFF、0xFF、0xFF、0xFF、0xFF、 0xFF、0xFF、0xFF、0xFF、0xFF、 0xFF}、
    {0x00、0x01、0x02、0x03、 0x04、0x05、0x06、0x07、0x08、 0x09、0x0A、0x0B}、//虚拟一次性
    {0xFF、0xFF、0xFF、0xFF}//备用
    };
    #pragma REQUIRED =_aesHdr
    
    

    以下是计算 CRC 时的闪存读取。

    前两个字节是由 IAR 计算并放置在闪存第1页开头的 CRC。 但是应该存在 IMAGE_HEADER 和 AES_HEADER 的下一个字节全部为0xFF。  

    我可以观察到代码的其余部分在48字节的位置存在。 (0x0830)。 您能不能帮助我弄清为什么闪存中缺少图像标题。