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.

[参考译文] LAUNCHXL-CC26X2R1:外部存储器 OAD 无法引导至下载的映像

Guru**** 2589280 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1381123/launchxl-cc26x2r1-external-memory-oad-not-booting-into-downloaded-image

器件型号:LAUNCHXL-CC26X2R1

工具与软件:

尊敬的所有人:

我想我快到了。 我使用外部存储器来接收 OAD 映像。

映像被接收、CRC 计算正常、一切似乎都正常。

但是、BIM 似乎无法启动此类正确下载的映像。 请参阅下面的屏幕截图、其中包含调试器观察的变量。

如您所见、它会检查所有条件是否正常。

您是否看到立即显示为错误的内容?

我检查了图像的长度,是 exaclty 293668所以它是正常的。

也许是 flashPageNum 或 imgFxdHdr->prgEntry?

请告诉我任何建议,祝您愉快。

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

    尊敬的卡佐拉:

    如果您使用的是定制板、则 BIM 和 App SPI 引脚需要相同。

    -kel

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

    尊敬的 Markel:

    应用程序接收文件"确定"。 BIM 读取正常。 否则它不会达到屏幕截图中的那个点。

    我不认为是 SPI 引脚、我更改了它们并且看起来是正确的、但谢谢。

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

    尊敬的卡佐拉:

    为定制电路板修改的简单外设片外 OAD 示例应该可以使用。 也就是说、您正确地修改了它。 您是否已尝试过、或者您目前正在进行此操作?

    此外、如果我没记错、在调试 BIM 和 OAD 应用中有一个特殊过程 我已经忘记了。

    -kel

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

    我就是这么做的。

    一切似乎都在工作、但代码不会跳转。

    谢谢。

    等待其他输入。

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

    尊敬的 Kazola:

    感谢您联系我们。

    如果我有几个想法:

    -您能否检查应用程序矢量表的地址是否为0x00000090 (即144 )? 我想这可以在映射文件中检查、然后再次检查该地址的闪存内容。

    -您可以在调试模式之外运行一次- Markel 有一个点,程序行为可能会被调试器稍微改变

    -您是否可以使用调试器执行与 jumpToPrgEntry ()相同的操作? (为了方便起见、我在此处复制了代码)

    ¨/*******************************************************************************
     * @fn          jumpToPrgEntry
     *
     * @brief       This function jumps the execution to program entry to execute
     *              application
     *
     * @param       vectorTable - address of application vector table.
     *
     * @return      None.
     */
    
    void jumpToPrgEntry(uint32_t *vectorTable)
    {
        /* The following code resets the SP to the value specified in the
         * provided vector table, and then the Reset Handler is invoked.
         *
         * Per ARM Cortex specification:
         *
         *           ARM Cortex VTOR
         *
         *
         *   Offset             Vector
         *
         * 0x00000000  ++++++++++++++++++++++++++
         *             |    Initial SP value    |
         * 0x00000004  ++++++++++++++++++++++++++
         *             |         Reset          |
         * 0x00000008  ++++++++++++++++++++++++++
         *             |          NMI           |
         *             ++++++++++++++++++++++++++
         *             |           .            |
         *             |           .            |
         *             |           .            |
         *
         * */
    
        /* Reset the SP with the value stored at vector_table[0] */
        __asm volatile ("MSR msp, %0" : : "r" (vectorTable[0]) : );
    
        /* Jump to the Reset Handler address at vector_table[1] */
    
        ( (void (*)(void)) (*(vectorTable + 1)) )();
    }
    

    我希望这将有所帮助、

    此致、

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

    您好、Clement、

    提前感谢您的参与

    这是映射文件的内容、它的开头。

    名称源长度已使用未使用属性填充
    --------------- --- --- --- --- ---
    FLASH_IMG_HDR 00000000 00000090 0000008d 00000003 R X
    条目           00000090 00000040 0000003c 00000004 R X
    闪存           000000d0 00055f30 0004ba3d 0000a4f3 R X
    RTOS_SRAM      20000000 0000012c 00000000 0000012c RW X
    SRAM            20000fdf 00013021 0000b378 00007ca9 RW X

    下面的屏幕截图显示它似乎匹配。 请注意 BIM 如何成功完成大部分工作。

    即使高配线的 retval 也返回0、因此成功。

     即使不受控制、对 extFlashWrite 的下一个调用也会返回 True、因此成功。

    请看下面的一个、它甚至可以下而下。

    我还使用了调试器来执行您的要求。

    例如、请参阅 vectorTable[8]似乎是典型的0001 OAD 版本。

    现在我将按照您的要求尝试不使用调试器、但我想与此同时、您拥有足够的信息来进行猜测。

    祝您度过美好的一天、感谢您的帮助、希望我们能够解决这个问题。

    PS:作为附加检查、我通过 Simplelink Connect 应用程序发送了我正在发送的图像的修改版本、softVer 设置为0、0、0、9、而不是默认值0、0、0、1。 这是为了让我们能够查看 BIM 是否看到发送的映像。 请检查下面的屏幕截图、就是这个情况。

    我的下一步是在没有调试器的情况下运行它、但我不希望发生太多更改、因为它无法在这个新的"9"文件中引导。

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

    您好、Clement、

    我设法使这项工作,并能够至少运行一个映像下载 OAD。

    所以,其他人可以知道,问题是有时 BIM 不能 extFlashOpen()运行时没有连接到调试器。

    有人知道问题可能出在哪里吗? 在擦除它的波特率时可能很有用? 现在是4000000这似乎不是很高,但我不介意减少它。

    此外、我找不到调试 BIM 和 OAD 的特殊过程。 你能告诉我吗?

    谢谢。

    我会相应地更新此主题、如果在接下来的几天内发现更多问题、我将打开新主题。

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

    尊敬的 Kazola:

    感谢您提供的其他详细信息。
    总之、OAD 在没有调试器的情况下似乎可以工作、但在调试器断开后无法工作。 对吗? 当调试器断开连接时、问题来自 extFlashOpen()、我是否正确?

    在4 MHz 上运行 SPI 时、您几乎可以达到其限值(请参阅 https://www.ti.com/lit/swrs207的§9.8)、但仍应位于右侧。 因此、我建议运行一个测试、以查看此领域是否可能发生了什么情况。

    此外,假设问题仅限于 extFlashOpen(),我认为尝试在没有 OAD 部分的情况下重现问题是有道理的-即只有 SPI 部分。 您还应该考虑在 extFlashOpen ()函数中实现某种日志记录,这可能有助于识别问题。 从长远来看、这将为您节省调试时间。

    下面是一些我可以想到的调试引线:

    • 如果您不使用 LaunchPad、则可以进行硬件审查。 通常、调试器允许以稍微不同的方式为电路板供电。 如果您最终得到的闪存未正确通电、SPI 操作将失败。
    • 我之前已经看到 SPI 信号(SCK、PICO、POCI、CS)与调试信号发生冲突-特别是在重新分配多个引脚的复杂系统中。 此类引脚冲突可能会导致 SPI 初始化失败、或在连接闪存时失败。
    • 为了确保完整性、我建议在尝试 OAD 操作之前验证擦除闪存是否会产生影响。

    如果以上内容不起作用、您能否指定您是否在 BIM 代码中进行了一些修改? 修改包括代码更改、更改优化级别等

    我找不到调试 BIM 和 OAD 的特殊过程。 您能告诉我吗?

    我不确定我是否知道这种程序。 请允许我向一些同事核实、如果我听到这种情况、请回来与您联系。

    此致、

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

    抱歉、我的评论存在某种程度的混淆。 特殊过程是调试双映像 BIM 和 APP OAD。 此外、在未写入闪存的情况下调试。  

    但是、如果您将 BIM 片外和简单外设片外 OAD 正确移植到定制板上、然后您对 OAD 进行了多次测试、这意味着它是可靠的。 如果您根据自己的要求修改简单外设片外 OAD、则 OAD 应该可以工作、而无需对其进行调试。

    -kel