工具与软件:
尊敬的所有人:
我想我快到了。 我使用外部存储器来接收 OAD 映像。
映像被接收、CRC 计算正常、一切似乎都正常。
但是、BIM 似乎无法启动此类正确下载的映像。 请参阅下面的屏幕截图、其中包含调试器观察的变量。
如您所见、它会检查所有条件是否正常。

您是否看到立即显示为错误的内容?
我检查了图像的长度,是 exaclty 293668所以它是正常的。
也许是 flashPageNum 或 imgFxdHdr->prgEntry?
请告诉我任何建议,祝您愉快。
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.
工具与软件:
尊敬的所有人:
我想我快到了。 我使用外部存储器来接收 OAD 映像。
映像被接收、CRC 计算正常、一切似乎都正常。
但是、BIM 似乎无法启动此类正确下载的映像。 请参阅下面的屏幕截图、其中包含调试器观察的变量。
如您所见、它会检查所有条件是否正常。

您是否看到立即显示为错误的内容?
我检查了图像的长度,是 exaclty 293668所以它是正常的。
也许是 flashPageNum 或 imgFxdHdr->prgEntry?
请告诉我任何建议,祝您愉快。
尊敬的 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 ()函数中实现某种日志记录,这可能有助于识别问题。 从长远来看、这将为您节省调试时间。
下面是一些我可以想到的调试引线:
如果以上内容不起作用、您能否指定您是否在 BIM 代码中进行了一些修改? 修改包括代码更改、更改优化级别等
我找不到调试 BIM 和 OAD 的特殊过程。 您能告诉我吗?
我不确定我是否知道这种程序。 请允许我向一些同事核实、如果我听到这种情况、请回来与您联系。
此致、