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.

[参考译文] CC2640:在映像中找不到有效的 OAD 报头

Guru**** 2582405 points
Other Parts Discussed in Thread: CC2640, CC2640R2F, CC2540, CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/568661/cc2640-a-valid-oad-header-was-not-found-in-the-image

器件型号:CC2640
Thread 中讨论的其他部件:CC2540CC2650

我正在尝试使用 CC2640实现片上 OAD。 我遵循了 cc2640 BLE OAD 用户指南、当我将 SimpleBLEPeripheral 图像添加到 BLE Device Monitor 时、我收到一条消息"在图像中找不到有效的 OAD 标头。 使用生成的标头"。

当我 对项目不做任何更改时、为什么会获得此结果?

谢谢

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

    您使用的是 IAR 还是 CCS? 这将解释十六进制差异。

    我相信我确实使用了 IAR -我需要测试它在 CCS 中的工作原理。

    您是对的、它肯定与项目相关-让我知道您使用的 IDE、我将尝试重现此问题。

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

    我使用的是 IAR。
    因此它应该是相同的。
    如果你可以再重建它的话,那就很好了。 我想确保我不会遗漏任何东西。

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

    您好、Mario、

    这是我对项目应用的差异。 (它们与我之前列出的相同)

    我使用的是较新的 IAR 版本、但这不应该是一个大问题。

    e2e.ti.com/.../deltas_5F00_iar.zip

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

    因此、您只更改了 OAD_INTERNAL_FLASH.c 文件。
    我在我的项目中使用了您的文件、但它仍然没有广播。 让我从头开始的是、我们的十六进制文件是不同的。

    这是您的 IMG B hex 文件的前几行:

    0400000500011329BA
    020000040000FA
    :10900000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
    :109010004044002029130100A90B0100A90B010005
    :10902000A90B0100A90B0100A90B0100A90B0100A90B90B01006C
    :10903000A90B0100A90B0100A90B0100A90B0100A90B90B01005C



    这是我的:

    :109010005844002025130100A50B0100A50B0100F9
    :10902000A50B0100A50B0100A50B0100A50B0100A50B01007C
    :10903000A50B0100A50B0100A50B0100A50B0100A50B01006C
    :0C904000A50B0100A50B0100710B010045
    :10905000FEE7DFF87408007D7047DFF86C28117DAB


    我的复位矢量是不同的。 有什么想法为什么?

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

    反叛分子,
    我忘记了问您是否能够让我的 IMG B 在您的 LaunchPad 上工作?

    此致、
    Mario

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

    您好、Mario、

    很抱歉 Mario、这是办公室的繁忙时间。 我不确定能否在本周结束或下周初重新开始调查。

    复位矢量的相关信息。 这些被预编译工具、配置移动、也许没有使用正确的预编译步骤?

    我将尽快尝试将其压缩、

    此致、

    反叛分子

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

    我也面临同样的问题。 调试后、我知道 image_B 大小不正确。
    1).您如何解决这个问题?

    2)。 您是否评论了检查 img_size 和版本的部分代码?

    请帮帮我。

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

    尊敬的 

    我也按照您的方法操作、并且能够在 cc2640上运行 OAD 目标(img_a)时执行 OAD。 我使用失效服务使 img_B 和 img_A 开始运行。

    当 img_B 通过 OAD 下载并在 cc2640上运行时。 我尝试通过 OAD 下载 IMG_B 的新版本。 通过 OAD 未成功完成。

    在 cc2640上运行 img_B 时、您是否尝试使用 BTool 通过 OAD 下载 IMG_B 的新版本?

    或者、当 IMAGE_B 在 cc2640上运行时、是否无法执行更新?

    正在等待您的回复。

    此致

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

    Mabbas、

    您无法运行 IMG_B 并执行 OAD 更新。 您必须运行 IMG_A 才能下载 IMG_B

    Mario

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

    非常感谢您的回复。

    我有另一个问题。 我能否通过 img_B 执行 image_a 的 OAD 这意味着通过 img_B 更新 image_A

    正在等待您的回复。

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

    您无法通过映像 B 更新映像 A。无法更新 Image_A。 您只能更新 Image_B

    此致、
    Mario
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么会这样呢? 如果我们在 IMAGE_A 中实现了一个 OAD 服务、该服务会像 IMAGE_B 一样写入闪存、我不知道差异在哪里、也不知道为什么需要存在这种限制。

    IMAGE_A 无法更新 IMAGE_B 的原因是什么? 因此、IMAGE_B 是否无法写入 IMAGE_A 所在的闪存页?

    顺便说一下:

    oad_image_tool.py 用于为图像 A 和 b 编写元数据

    #请注意、只有6到30 (包括在内)之间的内部闪存页才能更新 OTA 以用于内部闪存 OAD
    INT_FL_OAD_IMG_B_meta_begin = 0x9000 #片上 OAD img B 的第一个 addr
    INT_FL_OAD_IMG_B_END = 0x12FFF
    INT_FL_OAD_IMG_A_meta_begin = 0x600
    INT_FL_OAD_IMG_A_begin = 0x100
    INT_FL_OAD_IMG_A_END = 0x8FFF

    (笑声)

    如果 vargs.oadtype =='onchip'和 vargs.imgtype =='productive':
    residentHdr = OadHdr._make (struct.unpacked (OAD_HDR_FMT、mergedHex.tobinstr (INT_FL_OAD_IMG_A_meta_begin、INT_FL_OAD_IMG_A_meta_begin+15)))))
    否则:
    residentHdr = OadHdr._make (struct.unpacked (OAD_HDR_FMT、mergedHex.tobinstr (startAddr、startAddr+15))))


    如果不可能的话,为什么会这样呢?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sebastian、

    正确、可以通过 OAD 将 IMG_B 写入闪存、只需在其中实现 OAD 配置文件即可。

    Mario 也是正确的、我们设计 IMG_A 和 IMG_B 系统的方式使 IMG_A 设计为永不更改、IMG_B 设计为不执行 OAD。 这样做是出于几个关键原因。 闪存有限是主要问题;在 IMG_B 已经有限的闪存中实现 OAD 配置文件无效。 这是 CC2650的固有限制、而中的关注度要低得多

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

    今天我将介绍一下这个-希望您能找到一些可以正常工作的东西。 (并测试您的 IMG_B)

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

    您好、Mario、

    我无法使您的 image_b 正常工作、正如您所怀疑的、我相信这是由复位矢量造成的。 这可能是由于预编译(配置)配置不正确所致

    为了确保至少有一个正常工作的构建、下面是一个您可以应用于全新2.2.1 SDK 的补丁、该补丁应用所有修复+更改 OAD 指南中引用的批处理文件、以使用 OAD 映像工具而不是 intelhex 工具。 我还将在这里提供快速说明

    补丁: e2e.ti.com/.../onchip_2D00_OAD_2D00_2.2.1_2D00_patch.zip

    在现有的2.2.1 SDK 安装上应用补丁。

    如何使用:

    1.构建$BLE_INSTALL$\examples\cc2650lp\oad_target\IAR 中的 OAD 目标应用、从 Stack Project 开始

    2.通过运行$BLE_INSTALL$\examples\cc2650lp\oad_target\IAR\app 中的 merge.bat 来创建统一的十六进制文件

    3.使用 闪存编程器2在$BLE_INSTALL$\examples\cc2650lp\oad_target\IAR\app 中刷新 oad_target_cc2650lp_unified.hex

    4.通过打开 simple_peripheral 示例项目并选择 FlashOnly" OAD_ImgB 来构建映像 B,仅用于应用项目

    5.通过运行 $BLE_INSTALL$\examples\cc2650lp\simple_peripheral_IAR\app 中的 onchip_img_b.bat 来创建 OAD 二进制文件

    6.使用 BTool 到 OAD simple_peripheral_cc2650lp_img_b.bin 到 OAD 目标(使用 OAD_TARGET_cc2650lp_unified.hex 刷写的 LP)

    此致、

    反叛分子

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

    我会尝试一下、并告诉您。

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

    你好,Rebel,

    运行 merge.bat 会导致我出错。
    它说:

    无法加载模块'crcmod'。 请安装软件包。 PIP [-proxy ]安装 crcmod
    已创建 app\oad_target_cc2650lp_unified.hex
    按任意键继续。 。 。

    为什么我错过了该模块?

    我打开了我的旧"merge.bat"、并注意到 Python 路径部分不同:

    这是我的旧 merge.bat:

    "C:\Python27\python ""C:\Python27\Scripts\hexmerge.py"-o "%dest_path%\%full_IMG%"-r "%BIM_start%:%BIM_end%""-overlifer=error""%app_path%\%app_IMG%%:%BIM_start%":%BIM_stack_start%":%BIM_stack_start%_stackn%":%&IM_stack:%_stack_start%&m%&m%&m%&m%&m%&m%&m%&m%&m%&m%&m%&m%&m%&m%&m
    回波已创建%dest_path%\%full_IMG%

    以下是您的 merge.bat:

    "C:\Python27\python ""%dest_path%\oad_image_tool.py"-o "%dest_path%\%full_IMG%""%app_path%\%app_IMG%""%stack_path%\%stack_IMG%""%BIM_path%\bim.hex"-t aaa -0rm -r600 -raaa 芯片-raA -r0rm
    回波已创建%dest_path%\%full_IMG%


    因此、我将调用 hexmerge.py、您将调用 oad_image_tool.py。 但您的失败是因为我缺少一个模块。 我不知道如何获取此模块。 我尝试了几种不同的东西、但都不起作用。

    以前见过这种情况吗?  


    谢谢、
    Mario

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

    您好、Mario、

    您需要安装 pip (python 软件包管理器)缺少的 python 模块以消除错误(在本例中为 crcmod mod)。

    也许、不要通过 python 运行 python 脚本、而是使用可执行文件(已经集成了所有必要的库)。 您必须修改批处理脚本才能调用可执行文件。

    我将在下面附加可执行文件、并重命名。 (您也可以从最新的 SDK 中获取)

    我还将很快更新补丁、以使用可执行文件而不是 python 脚本(因此其他人不会遇到相同的问题)

    此致、

    反叛分子

    e2e.ti.com/.../oad_5F00_image_5F00_tool.exe.txt

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

    我用可执行文件替换了 python 脚本、现在它看起来像这样:

    "C:\Python27\python ""%dest_path%\oad_image_tool.exe"-o "%dest_path%\%full_IMG%""%app_path%\%app_IMG%""%stack_path%\%stack_IMG%""%BIM_path%\bim.hex"-t aaa -0rm -r600 -raaa 芯片-raA -r0rm
    回波已创建%dest_path%\%full_IMG%


    再次运行 merge.bat 后、出现以下错误:

    文件"app\oad_image_tool.exe"、第1行
    SyntaxError:文件 APP\oad_image_tool.exe 中第1行的非 ASCII 字符'\x90'、但未声明编码;请参阅 http://python.org/dev/pe
    PS/PEP-0263/以了解详细信息
    已创建 app\oad_target_cc2650lp_unified.hex
    按任意键继续。 。 。

    你怎么想?

    谢谢、
    Mario
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您正在执行 OAD 映像可执行文件(原始脚本中的 python 是可执行文件)、则不再需要执行"C:\Python27\python "。

    尝试如下操作:
    将所有十六进制文件移动到与工具和批处理文件相同的文件夹中
    将批处理文件更改为执行以下操作:
    oad_image_tool.exe -o output.hex app_image.hex stack_image.hex bim.hex -t onchip -i product--usrId AAAA -v 0 -m 0x0600
    echo 创建了 output.hex

    我会在有时间时相应地更新脚本。 您实际上不必为此使用批处理文件-只需像过去使用过的那样使用 OAD 映像工具;只需使用最新 SDK 中的新二进制文件即可

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦,这更有意义:)

    我会尝试一下。

    谢谢、
    Mario
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来它现在正常工作。 我将继续使用它并继续测试它。 但到目前为止看起来很好!
    谢谢 Rebel!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题,马里奥!

    很高兴您能正常工作、如果您遇到其他问题、请随时发布!

    此致、
    反叛分子