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.

[参考译文] CC2640R2F:片外 OAD 无法在 IAR 优化设置为高电平的情况下工作?

Guru**** 2595805 points
Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/610348/cc2640r2f-off-chip-oad-does-not-work-with-iar-optimization-set-to-high

器件型号:CC2640R2F

您好!

  下面是当 IAR 优化设置为高电平时我观察到的片外 OAD 故障。

方案 A:

  1. 将应用程序优化设置为无。 重新编译所有 BIM、应用和堆栈并将全部3个块闪存到 CC2640R2 Launchpad。
  2. 创建 OAD 映像。 更改广播名称。 将应用程序优化设置为高。 重建所有应用程序以生成 OAD 映像 bin 文件。
  3. 使用 BTool 执行 OAD。 BTool OAD 将成功启动和完成。
  4. 检查 CC2640R2 Launchpad 的广播名称(如果有更改)。 结果是广播名称仍然相同且不更改。 这意味着 OAD 未成功。

方案 B:

  1. 将应用程序优化设置为高。 重新编译所有 BIM、应用和堆栈并将全部3个块闪存到 CC2640R2 Launchpad
  2. 创建 OAD 映像。 更改广播名称。 将应用程序优化设置为高。 重建所有应用程序以生成 OAD 映像 bin 文件。
  3. 使用 BTool 执行 OAD。 返回 OAD_FLASH_ERROR。 OAD 未启动且未成功。

   这对我们来说是个问题、因为如果我们不将 IAR 优化设置为高电平、应用程序将超过设置的闪存空间限制。 是否有任何方法可以使 OAD 在 IAR 优化设置为高电平时工作?

-克尔

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

    您超出闪存的金额有多大、您的应用项目有多大? 您可以看到我们的指南、其中介绍了优化闪存的技巧:
    software-dl.ti.com/.../creating-a-custom-bluetooth-low-energy-application.html

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

    您好、Zahid、

      下面是我得到的尺寸。

    应用程序优化高

    52 755字节的只读 代码存储器

     4 294字节的只读 数据存储器

     12 497字节的读写数据存储器(+ 64绝对值)

    应用程序优化无

    估计的最小总大小为0x1122b 字节或70187字节

    -克尔

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

    我之前已经应用了优化闪存的技巧。 问题是当优化设置为高电平时、片外 OAD 失败。

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

    对此有任何帮助吗? 我想将每个与 OAD 相关的函数和变量设置为易失性、因此它们不会受到优化的影响。

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

    尊敬的 Markel:

    您是否根据速度或尺寸将其设置为高电平? 您使用的是哪个 IAR 版本? 您是否能够实现开箱即用的功能?

    您似乎接近最大尺寸。 BLE5堆栈大小为63KB。 因此剩余的应用程序大小为:

    128 (总闪存)- 63 (堆栈)- 4 (BIM)= 61KB

    祝你一切顺利

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

    您好、Zahid、

       我根据尺寸将优化设置为高电平。 无论如何,我会调试我们的 CC2640R2F 固件,该固件已移植到 BLE5简单外设片外 OAD 示例程序,并将优化设置为高电平,我发现我无法调试 extFlashVerifyPart()。 因此我将#pragma optimize=none 设置为 extFlashVerifyPart()以禁用此函数的优化。 当我能够调试 extFlashVerifyPart()步骤时,我得到设备 ID = 0x00,所以这就是我从 SPI 外部闪存中读取的内容。

    制造商 ID = 0xC2

    器件 ID = 0x00

    原始 BLE5简单外设片外 OAD 示例程序、优化设置为无。 这是我在下面读出的内容、这是针对外部闪存的正确值。

    制造商 ID = 0xC2

    器件 ID = 0x14

    -克尔

    帖子已编辑。 。 。

    其他问题的答案。

     您使用的是哪个 IAR 版本?

    IAR 版本8.11.1。 我们已经使用此 IAR 版本数月了、使用 SDK v1.35 BLE 5时没有问题。

    您是否能够实现开箱即用的功能?

    是的、我能够使 BLE 5简单外设片外 OAD 示例程序开箱即用。 正如我在第一篇帖子中提到 的、BLE 5 Simple Peripheral Off-Chip OAD 示例程序将失败的片外 OAD 场景。

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

    你(们)好

      下面这是错误的 SPI 外部闪存器件 ID 读取的屏幕截图。 这是一个 BLE5简单外设片外 OAD 示例程序、优化设置为高(大小)。 如您所见、infobuf 阵列的第二个字节设备 ID 为0x00。 如果 Optimization (优化)设置为 None (无)。 读取的 infobuf 第二字节器件 ID 将为0x14、这是我正在使用的 SPI 外部闪存的正确选择。

    -克尔

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

    由于您使用的是 IAR 8.11.1而不是 SDK 1.35的指定 IAR EWARM 7.80.3、因此您需要自行调查任何不兼容问题。 我的建议是执行以下操作:
    -使用您的 IAR 版本重新构建 driverLib 和其他 TI 驱动程序库、以解决更新的 IAR EWARM 版本中的 w_char 变化
    -使用 #pragma Optimizing=尝试选择性地降低特定函数的优化 pragma 指令

    请注意、我们的下一个 SDK 1.40将在未来几天内发布、并包含对 IAR 8.11.1的开箱即用支持。 所有 coreSDK 组件都将使用此 IAR 版本进行构建。

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

    您好、JXS、

    [引用 user="jxs"]我建议执行以下操作:-使用您的 IAR 版本重新编译 driverLib 和其他 TI 驱动程序库、以解决更新的 IAR EWARM 版本中的 w_char 变化

    我该怎么做? 也许、如果我这么做、我不需要将 SPI.c、SPI.h、 SPICC26XXDMA.c、 SPICC26XXDMA.h 添加到 IAR 项目中

    无论如何、我已经使 BLE 5简单外设片外 OAD 示例程序在优化设置为高电平时工作。 以下是我的设置。

    1. 将项目优化设置为"High->Size"、仅选中"Static Clusting"。  
    2. 将 ExtFlash.c、oad.c、oad.h、oad_target_external_flash.c 优化设置为"无"

    我将把这些设置应用于我们的 CC2640R2F 产品固件并使其正常工作。

    [引用 user="jxs">请注意、我们的下一个 SDK 1.40将在未来几天内发布、并包含对 IAR 8.11.1的开箱即用支持。 所有 coreSDK 组件都将使用此 IAR 版本进行构建。 [/报价]

    感谢您提供相关信息。  

    -克尔

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

    您好、JXS、

       我已将设置应用于我们的 CC2640R2F 产品固件。 在 OAD 期间、它缓慢地写入每个块、然后断开连接。 您是否经历过同样的经历?

    -克尔

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

    无论如何、对于我们的 CC2640R2F 产品固件、在我注释掉2个 BLE 服务后、我成功完成了几个片外 OAD。 如果我需要增加堆栈或堆以便在包含所有 BLE 服务的情况下进行片外 OAD、我将了解该怎么办。

    -克尔