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.

[参考译文] CC2651R3SIPA:OAD 片外 BIM 无法从内部闪存引导(但片上 BIM CAN)

Guru**** 2587365 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1270516/cc2651r3sipa-oad-off-chip-bim-is-not-able-to-boot-from-internal-flash-but-on-chip-bim-can

器件型号:CC2651R3SIPA
主题中讨论的其他器件:SysConfig

您好、我正在尝试让片外 OAD BIM 正常工作、但我遇到了异常行为。 我的代码库基于片外简单外设示例。

现在、当使用片上 BIM 时、它可以检测闪存中的映像并正确运行应用程序。

使用片外 BIM 时、首先不运行内部闪存映像、因为映像标头长度设置为0xFFFFFF (下图中的第571行)。 片上 BIM 正常工作的部分原因是它没有执行这项检查。

此检查失败的原因是、在 OAD 示例代码中、OAD/OAD_IMAGE_HEADER_APP.c 将映像长度设置为该值(下图)。 是否可以将其设置为正确的长度值?

这是一种奇怪的行为、我为这项检查添加了注释、以便获取片外 BIM 来运行映像。 片外 BIM 到达 jumpToPrgEntry 函数(如下所示)并且它跳转到应用程序、但是崩溃进入一个无效的 ISR。 片上 BIM 使用相同的输入达到相同的功能、但能够运行图像。

我猜到的一个问题可能是片外 SPI 闪存配置导致的? 非常感谢任何帮助。

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

    您好、Brian、

    感谢您与我们联系。

    我想请您指定您正在使用的 SDK 版本吗? 您是否还可以指定是否对 simple_peripheral_oad_offchip 示例应用了一些代码修改?

    为了健全,我建议您确保图像的标题在初始时设置正确。 为此、在编译 simple_peripheral_oad_offchip 示例时、请查看所获得日志的最后一行。 我得到了什么:

    ____________________________
           OAD IMG HDR
    ____________________________
    Field       |    Value
    imgID       |    b'CC26x2R1'
    CRC         |    0x1C65E3B3
    bimVer      |    3
    metaVer     |    1
    techType    |    0xFFFE
    imgCpStat   |    0xFF
    crcStat     |    0xFF
    imgType     |    0x7
    imgNo       |    0x0
    imgVld      |    0xFFFFFFFF
    len         |    0x2CDBC
    prgEntry    |    0x90
    softVer     |    0x31303030
    imgEndAddr  |    0x2CDBB
    hdrLen      |    0x2C
     
     
    ____________________________
           Segment HDR
    ____________________________
    Field            |      Value
    Segment Type     |      Security Segment
    Wireless Tech    |      [BLE]
    Segment Length   |      0x55
    Security Version |      0x1
    Timestamp        |      0x6502B6FF
    Signer Info      |      0x8B10EC1D517D17B0
    Signature        |      0x5E6DC8AA52600FA3A80E1573CC3F209DEDF0D6C700147E92FC18B8110CEFD9589FB68A0296A76DD5AEF7068683FE5C17717F5CE8E02002F3A03242408465917A
     
     
    ____________________________
            Segment HDR
    ____________________________
    Field            |      Value
    Segment Type     |      Contiguous Image Segment
    Wireless Tech    |      [BLE]
    Segment Length   |      0x2CD3B
    Start Address    |      0x0
     

    然后、在执行 MCUBoot 时、请仔细检查标头的所有字段是否与脚本的输出相同。 如果不正确、则表示您的直觉是正确的、并且在写入/读取闪存的过程中会发生一些事情。

    请告诉我您的搜索结果!

    此致、

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

    感谢您提供调试方面的帮助! 我将使用最新的 SDK (simplelink_cc13xx_cc26xx_sdk_7_10_01_24)和最新的 SysConfig (1.17.0)。

    我们必须对 BIM 和示例代码进行小幅修改:

    1) 1)我们在不同的 SPI 引脚上使用不同的 Winbond 闪存

    我们还在 SPI 上有另外两个我们必须禁用的器件。

    对于完整性检查、这里是结果。 我不使用 MCUBoot、我使用的是 TI OAD、因此我不知道如何进行您所讨论的检查。

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

    我找到了这个问题。 我关闭了片上和片外 BiM 的编译器优化、以便我能够单步执行代码。 如果未经优化、片载 BIM 仍然工作、但是片外 BIM 变得太大。 我重新对片外 BIM 进行了优化、它能够按预期工作。

    我仍然需要取消图像标头长度检查。 我认为这仍然是 OAD_image_header_app.c 文件中示例代码中的一个错误(或者我误解了一个工厂映像必须存在于外部闪存上)。