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.

[参考译文] CC1310:CC1310 片上 OAD 支持

Guru**** 2560390 points
Other Parts Discussed in Thread: CC1310, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1570383/cc1310-cc1310-on-chip-oad-support

器件型号:CC1310
Thread 中讨论的其他器件: UNIFLASH

工具/软件:

我有几个关于 CC1310 上的片上 OAD 支持的问题:

1) CC1310 的片上 OAD 支持

CC1310 是否正式支持片上 OAD?

在一些 TI 论坛帖子中、我了解到 CC1310 将不支持片上 OAD。 以下是此类讨论的链接、供参考:
e2e.ti.com/.../cc1310-oad-with-on-chip-flash-only

您能否说明 CC1310 的片上 OAD 支持的当前状态?

2) 程序执行问题 (Uniflash 与 CCS)

当我使用 Uniflash 刷写 rfWsnNodeIntFlashOadClient 程序时、它会存储在闪存中、但不会执行。

但是、如果我使用 Code Composer Studio (CCS) 加载同一程序、它将按预期执行。

为什么使用 Uniflash 和 CCS 进行刷写之间的行为有区别? 是否需要在 Uniflash 中配置其他内容才能正确执行?

3) OAD 行为差异(片上与片外)

我已经使用 rfWsnConcentratorOadServer 成功测试了片外 OAD 示例 (rfWsnNodeExtFlashOadClient)。 固件更新正确完成。

但是、当我尝试片上 OAD 示例 (rfWsnNodeIntFlashOadClient) 时、Concentrator 显示它是重复“发送 1700 的块 0 “、但在客户端没有可见的操作或任务被触发。

在片上 OAD 情况中、出现该问题的原因可能是什么?

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

    尊敬的 Vinod:

    1) 发布 SDK 1.5 之后提供了片上支持(SimpleLinkTm CC13x0 SDK 1.00.00.08 版本说明) 、因此您将找到示例项目 rfWsnNodeIntFlashOadClient、但请记住闪存限制。 我建议您使用最新版本  4.20.02.07.

    2) 您是否尝试过 按照自述文件中的说明刷写生成的 BIM 十六进制文件+ rfWsnNodeIntFlashOadClient 二进制文件?

    3) 您使用的 BIM 文件是否正确? 这是 用于片上解决方案的 bim_onchip 项目?

    此致、

    Daniel

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

    是的、我遵循了 CC1310 上片上 OAD 自述文件中提到的步骤、并使用了 workspace_v12\bim_intflash_cc13x0lp.hex 中的 bim_intflash_cc13x0lp\FlashOnly 中的 bim_intflash_cc13x0lp.hex、但我遇到了刷写后程序无法执行的问题。 以下是我尝试过的步骤:

    *我拿走了 bim_intflash_cc13x0lp.hex
    *我拿走了 rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex
    *我使用 Python intelhex 命令合并了两个文件:

    C:\Python27\python.exe -c “from intelhex import IntelHex;
    A=IntelHex ('C:\\Users\AMPSW2\\Desktop\\cs\\rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex');
    b=IntelHex ('C:\\Users\AMPSW2\\Desktop\\cs\\bim_intflash_cc13x0lp.hex');
    a.合并(b、重叠=错误);
    a. write_hex_file ('C:\\users\\AMPSW2\\Desktop\\cs\\rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_ALL_v1.hex')“

    我使用 UniFlash 刷写了合并的 rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_ALL_v1.hex。我验证了合并的十六进制文件内容、数据看起来正确、但刷写后、代码不会执行。

    我还尝试使用 UniFlash 同时单独刷写 bim_intflash_cc13x0lp.hex 和 rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex。
    闪存内容显示两个映像存在(通过 UniFlash memory 视图验证),但代码仍然不运行,但这种方法适用于片外 OAD。

    ->另一个尝试:

    *使用 UniFlash 刷写了 bim_intflash_cc13x0lp.hex
    *使用 CCS 刷写了 rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex

    在这种情况下、当我从服务器启动 OAD 时、它会反复显示:

    “INFO:OAD Block 0 of 1750“

    但在客户端,没有任何操作发生。我附上了截图:

    PIC 1:服务器端日志
    PIC-2:片上客户端

    我的疑问:
    片上 OAD 过程是否取决于 BIM 和应用程序十六进制文件的刷写方式?
    这可能是为什么即使服务器开始发送 OAD 数据包、客户端也不处理这些数据包吗?

    你能帮助我快速克服这一问题、以便我能够向前迈进一步吗?

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

    尊敬的 Vinod:

    感谢您提供详细的反馈。 刷写这两个十六进制文件都不起作用、因为应用程序缺少 OAD 标头。 这对我很有用、请按照以下步骤操作:

    1.导入并构建 BIM_intflash_cc13x0lp  (EasyLink\bim_onchip\tirtos\ccs)

    2.导入并构建 rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs (EasyLink\rfWsnNodeIntFlashOadClient\tirtos\ccs)

    3.现在我们需要生成一个具有正确标头的.bin。 从应用程序.hex 文件所在的目录中、运行以下命令。 仔细检查您的名称和 SDK 路径。

    python C:\ti\simplelink_cc13x0_sdk_4_20_02_07\tools\common\oad\oad_image_tool.py -v 0x100 -m 0x10000 -t onchip -i app rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex -ob rfWsnNodeIntFlashOadClient_B.bin

    4.使用 UniFlash 刷新 Bim 十六进制 以及生成的应用程序。 bin 文件、位于地址 0x10000

    5.节点现在应该正确引导。

    默认情况下生成了映像 B、如果要为映像 A 构建应用程序、请执行以下操作。

    1.右键单击项目名称>属性:

    • Arm Compiler > Predefined Symbols:将 HAL_image_B 替换为 HAL_image_A
    • Arm Linker > Advanced Options > Command File Preprocessing:将  HAL_image_B 替换为 HAL_image_A

    2.重建项目

    3. Re 运行 python 脚本,但使用 -m 0x1000 作为基地址

    4.使用 UniFlash 将地址设置为 0x1000

    以下是一些更有用的信息: 片上 OAD—SimpleLinkTm CC13x0 SDK 专有射频用户指南 2.60.00 文档

    我尚未使用集中器测试 OAD、但我认为这应该可行。 请先测试一下、让我知道它是如何运行的。

    此致、

    Daniel

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

    尊敬的 Vinod:

    现在、我在集中器工程的自述文件之后尝试了整个 OAD 过程。
    1.使用版本 1 创建映像一个 bin 并使用 UniFlash 和 BIM.hex 刷写节点(查看我的上一篇文章)

    2.使用版本 2 创建映像 B、并按照 README 文件将其存储在 Concentrator 的闪存中。

    请记住、我们正在使用包含 OAD 标头的.bin。

    3.通过无线更新节点。

    此致、

    Daniel

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

    您好 Daniel  

    我使用的是 rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs 示例。

    我首先从工程编译输出生成了一个.hex 文件:
    rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex

    然后、使用以下命令将.hex 文件转换为.bin:

    C:\Python27\python.exe oad_image_tool.py -t onchip -i app -v 0x0200 -m 0x1000 -ob C:\Users\AMPSW2\Desktop\rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_app_v2.bin C:\Users\AMPSW2\Desktop\cs\rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_tirtos_ccs.hex


    接下来、我尝试使用以下命令来编写.bin 文件:

    C:\Python27\python.exe oad_write_bin.py COM60 C:\Users\AMPSW2\Desktop\rfWsnNodeIntFlashOadClient_CC1310_LAUNCHXL_app_v2.bin

    在此阶段、它显示:

    “发送的块总数:1769 并写入 16 个虚拟字节“(请参阅图像 1)。

    但是、当我在客户端启动 OAD 过程时、由于以下原因会拒绝 OAD:

    “blkTot:1770、OAD_BLOCK_MAX:960“(参见图像 2)。

    如何解决该不匹配问题以成功执行片上 OAD?

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

    尊敬的 Vinod:

    您的映像太大、无法装入片上、因此 OAD 失败。 这是使用默认工程时得到的结果。 我生成的.bin 约为 50KB。

    您的.bin 大小是多少? 您是否对默认的  rfWsnNodeIntFlashOadClient 进行了任何更改? 您是否在使用 HAL_image_A 或 HAL_image_B、是否在上述两个位置都更改了它?
    您能否检查编译器使用的优化级别?

    是否更改了默认的 OAD_BLOCK_SIZE=64、如果更改了、是否同时在集中器和节点上进行了更改?

    此致、

    Daniel