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.

[参考译文] CC2650STK:CC2650绑定问题、闪存问题

Guru**** 2471710 points
Other Parts Discussed in Thread: CC2650, CC2650STK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/572640/cc2650stk-cc2650-bonding-problems-flash-memory-issue

器件型号:CC2650STK
Thread 中讨论的其他器件:CC2650

大家好。

我使用的是 CC2650STK、IAR 7.70.3编译器。 我遇到了 CC2650内部闪存问题。

1) 1)如果 OSAL_SNV=2。

收到错误:

无法在[0x00001050-0x0000cffe]>(总未提交空间 bbbff)中为总估计最小大小为0xc12b 字节(最大对齐0x4)的段/块分配空间。

APP SIZE = 0xBFFAF = 49071字节、APP_START = 0x1000、STACK START 地址= 56408 -0xDC58

应用程序的总内存为:56408-0x1000 = 52312字节。

为什么编译器无法 找到0xBFFA=49071字节?

2) 2)如果 OSAL_SNV=1、并且使用 外部闪存代码

 APP SIZE = 46849字节、APP_START = 0x1000、STACK START 地址= 60392

应用程序的总内存为:60392-0x1000 = 56292字节。 我当前的应用程序大小为46849 -> 56292-46849 = 9443字节是免费的、但绑定无效!!!

在配对 过程中、我收到 了 GAPBOND_Pairing_State_Started 、但没有其他内容。 在我的电话上、我没有收到请求 PIN 码。

3)如果  OSAL_SNV=1、则不使用 外部闪存代码

 APP SIZE = 43803、APP_START = 0x1000、STACK START 地址= 60392

应用程序的总内存为 :60392-0x1000 = 56292字节。 我当前的应用程序大小为43803->56292-43803= 12489字节是免费的,绑定工作正常!!!

向我解释为什么当存储器小于特定级别(在我的情况下小于9443字节)时、绑定停止工作?

为什么在第一种情况下为-1)、编译器无法分配49071字节、尽管可用的是52312字节

我将 SBPeripheral 项目与 SerialPortService+ OAD 一起使用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我进行实验:创建大小为6555字节的常量数组。 现在 app_size = 50419字节,stack_start = 60392,
    我的应用程序的理论内存:60392-0x1000 (引导加载程序)=56296字节。
    粘结工作正常。

    结论:
    1) 1)如果我添加 feature_OAD、我的 app_size = 46849字节、绑定不起作用

    2) 2)如果我排除 FITY_OAD 并添加测试数组,则我的 APP_SIZE = 50419字节并且绑定工作正常

    3) 3)如果我排除了 FITY_OAD 并且没有添加测试数组,我的 APP_SIZE = 43803字节并且绑定工作正常

    我不是恒定的,为什么???? 外部闪存驱动程序或线程同步可能有问题?

    剩下的内存:在我的实验中,我的应用程序的理论内存为:60392-0x1000 (引导加载程序)=56296字节,但实际上,编译器无法发布超过50419字节的数据。 剩下的存储器:56296-50419 = 5877字节?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Oleg、

    您是否考虑了堆栈的页舍入?

    是否强制堆栈的入口点为60392 (0xEBE8)?

    不确定问题是什么、除了页面边界问题、我不知道为什么会出现问题。

    尝试查看仅使用配对时是否出现此问题、同时切断 SNV。 (并填充一个巨型数组?)

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

    您好、Rebel、感谢您的响应。

    是的、您是对的、我不考虑页面边界。  

    但粘结问题仍然存在。

    我使用 myltiperipheral 器件(我的外设 BLE 可以通过 MAX_NUM_BLE_CONns=3 个中央器件进行连接)

    如果我设置 MAX_NUM_BLE_CONns=1 =>绑定工作正常、但 MAX_NUM_BLE_CONns=3绑定失败。  

    在开始配对过程中、我将获得 GAPBOND_Pairing_State_Started 状态、不再如此。

    冲突:

    1) 1) MAX_NUM_BLE_CONns = 1 =>粘合工作正常

    2) 2) MAX_NUM_BLE_CONns = 1、并且 FITY_OAD 被禁用=> 粘合工作正常

    3) 3) MAX_NUM_BLE_CONns = 3 =>   收到 GAPBOND_Pairing_State_Started 后绑定失败

    4) 4) MAX_NUM_BLE_CONns = 3、并且 FITY_OAD 被禁用=> 粘合工作正常

    我以 multi_role 示例为基础。 我使用2.2.1 BLE 堆栈。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 BLE 堆栈设置如下:
    -DHOST_CONFIG=PERIODIS_CFG
    -DGAP_BUK_Mgr
    -dlb_V41_features =V41_CTRL_CFG
    -DHCI_TL_NONE
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    5) 5) MAX_NUM_BLE_CONns = 2、此时 OAD =>粘合工作正常
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能正在 RAM 不足、更多连接需要更多资源。 我不知道这是否与闪存问题有关。

    此致、

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

    你好、Rebel。

    我还认为 RAM 内存不足。  

    我可以使用   VIMS 存储器的第二部分(从(0x11000000 + 0x1000)到(0x11000000 + 0x2000))来存储数据吗?

     当 OSAL_SNV = 1时、VIMS 存储器的第一部分(从0x11000000到(0x11000000 +0x1000)= 4096字节)用于 compactPage ()过程。

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

    您好 Oleg、

    您可以查看当前 SDK 中的多角色示例、了解 RAM 缓存是如何完成的。 我不认为在不正确关闭高速缓存的情况下使用它是一个好主意。

    您还可以尝试将 AUX_RAM 用于传感器控制器。 该 RAM 较慢、应用于卸载非频繁访问的对象。 这将有助于释放额外的系统 RAM。

    此致、

    反叛分子

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

    你好、Rebel、感谢你的回答。  

    我已经用 cache_as RAM 编写了自己的基于项目的 multi_role 示例、但有一个 usue。

    我的固件仅在连接了调试器(XDS110)的情况下工作、而不会启动调试器我的器件、但 BLE 不会运行、也不会进行广播。

    我将 multi_role 示例项目加载到我的器件中、并获得相同的用例。 示例工程仅与调试器连接。

    在没有 cache_as 定义的情况下,multi_role 工作正常。

    我看到了.ICF 文件并看到:

    定义符号 GPRAM_START = 0x11000000
    define symbol GPRAM_SIZE = 8096;
    define symbol GPRAM_END = GPRAM_START + GPRAM_SIZE;

    但是、如果 OSAL_SNV=1:

    堆栈将使用#define RAM_buffer_address     (uint8*) 0x11000000 作为 Bond compact 的高速缓存( "nvocop.c")  

    可能 是错误吗? GPRAM 缓存和 Bond 缓存使用相同的存储器  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在我添加了定义:
    #ifdef cache_as RAM
    /*设置待机和空闲模式的约束*/
    power_setConstraint (PowerCC26XX_SB_disallow);
    power_setConstraint (PowerCC26XX_IDLE_PD_Disallow);
    #endif
    在 int main()函数中,并解析此包....