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.

[参考译文] CC2652R:具有 BLE 外设的 DMM + Ti15.4协调器-在 DMM 调度程序中注册 MAC 线程

Guru**** 1133960 points
Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1350212/cc2652r-dmm-with-ble-peripheral-ti15-4-coordinator---registering-mac-thread-in-dmm-scheduler

器件型号:CC2652R
主题中讨论的其他器件:LAUNCHXL-CC26X2R1SysConfig

您好!

我正在从事一个需要同时操作 蓝牙外设和 Ti15.4协调器 。 为了学习和开始使用 DMM 进行开发、我决定使用一个名为"DMM 15.4收集器+ BLE 远程显示"的示例(CCS 中的 DMM_154collector_remote_display_app_2_4g_CC26X2R1_LAUNCHXL_tirtos7_ticlang)。

开始使用 TI LaunchXL-CC26X2R1 我已经在硬件上成功运行该示例。 在不对示例代码进行任何修改的情况下、我观察到的广播数据和蓝牙外设的间隔。 令我吃惊的是它 不是 符合我根据 SysConfig 设置的预期。

SysConfig 中定义的广播间隔:  100毫秒 (不对 SysConfig 设置进行修改)

观察到的广告间隔:(测量确认与三星 Galaxy A40和 iPhone 14都运行 NRF Connect 应用程序)

这是一个巨大的差异-广播间隔超过6倍。 我找不到有关此类差异的任何信息、因此我决定尝试使用示例代码。 我从分析 DMM 的初始化和配置过程开始。 由于是蓝牙外设受到了影响、我将注意力转向了 TI15.4堆栈、认为它对蓝牙运行有不良影响。 我觉得 MAC 线程在 DMM 中的注册方式有点可疑:

DMMSch_registerClient(&(((pthread_Obj *) pMacTaskHndl)->task), DMMPolicy_StackRole_154Collector);

我真的不明白所有这些来源、因此我决定深入研究该问题、并获取了早期版本的 Simple Link SDK。 由于我运行的是最新的7.40.0.77、因此我决定沿着历史记录的道路前进、以转到 Simple Link SDK  6.10.0.29.对于同一样本,在 DMM 计划程序中注册新客户的情况看起来完全不同,感觉很正常(因为它应该看起来像乞讨):

DMMSch_registerClient(pMacTaskHndl, DMMPolicy_StackRole_154Collector);

为了进行测试、我已决定将样片从 Simple Link SDK 7.40.0.77修改为 以相同的方式注册 MAC 任务、使其按预期工作 ! 蓝牙以正确的广播间隔进行广播、Ti15.4网络正常工作。

以下是修复 MAC 线程在 DMM 调度程序中注册的方式之后观察到的广播间隔(看起来是什么样的):

Question:

  1. 在 DMM 调度程序模块中注册堆栈线程的正确方法是什么?
  2. 为什么在示例项目中对其进行了更改?  
  3. 为什么这一变化对蓝牙外设运行有如此大的影响?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您分享您的努力和发现!

    • 在 DMM 调度程序模块中注册堆栈线程的正确方法是什么?
    • 为什么在示例项目中对其进行了更改?  
    [/报价]

    我需要向我们的开发团队了解其变更的原因。

    [quote userid="602607" url="~/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1350212/cc2652r-dmm-with-ble-peripheral-ti15-4-coordinator---registering-mac-thread-in-dmm-scheduler 为什么此更改会对蓝牙外设操作产生如此大的影响?

    我倾向于同意您的假设、即在本示例中、类型设置可能会干扰 BLE 外设的运行。
    我的猜测是该函数调用(DMMSch_registerClient)已更改、可能会提高 TI 15.4协调器的性能。

    我还将与我们的开发团队核实这一点。

    谢谢。
    托比

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

    我收到了我们开发团队的反馈。

    此更改的原因是15.4堆栈重构为 POSIX 线程(之前是 TI RTOS 线程)。

    当您将7.40函数调用恢复为6.10函数调用时、它实际上抵消了 DMM 调度程序跟踪15.4堆栈的能力。

    关于函数调用、我们建议 在7.40示例中将其保留为默认值。

    现在、对于 BLE 广播间隔精度、这与它相对于15.4堆栈 RX 始终开启的默认优先级相关。 BLE 广播(包括广播)的默认优先级设置为低于15.4堆栈"始终开启"。 但是、如果错过了太多的连续广播、DMM 机制会暂时授予 BLE 广播更高优先级-这就是您看到600ms 广播间隔与预期100ms 广播间隔的原因。

    您可以通过提高 BLE 广播事件的优先级来提高 BLE 广播的优先级:

    在您的 CCS 项目中、dmm_priority_ble_154collector.c:

    /* Global Priority Table: BLE connection is lower than 15.4 data */
    StackActivity activityBLE_bleL154CollectorH[ACTIVITY_NUM_BLE*PRIORITY_NUM] =
    {
        // ...
    
        DMM_GLOBAL_PRIORITY(DMM_BLE_BROADCASTING, DMM_StackPNormal, 95), // Toby: increase BLE broadcast priority to 95 from 60
    
        // ...
    };
    
    
    StackActivity activity154_bleL154CollectorH[ACTIVITY_NUM_154*PRIORITY_NUM] =
    {
        // ...
    
        DMM_GLOBAL_PRIORITY(DMM_154_RX_BEACON, DMM_StackPNormal, 90), // Toby: BLE broadcast is higher priority than 15.4 RX beacon
        DMM_GLOBAL_PRIORITY(DMM_154_RX_BEACON, DMM_StackPHigh, 190),
        DMM_GLOBAL_PRIORITY(DMM_154_RX_BEACON, DMM_StackPUrgent, 240),
    
    
    
    #if (CONFIG_PHY_ID == APIMAC_5KBPS_915MHZ_PHY_129 || CONFIG_PHY_ID == APIMAC_5KBPS_868MHZ_PHY_131)
        DMM_GLOBAL_PRIORITY(DMM_154_RXON, DMM_StackPNormal, 175),
    #else
        DMM_GLOBAL_PRIORITY(DMM_154_RXON, DMM_StackPNormal, 80), // Toby: BLE broadcast is 95, higher priority than 15.4 RX on
    #endif
    
        // ...
    };

    这样、他们能够观察到100ms 的广播间隔。

    请注意、一般的权衡仍然适用、如以下文档所述: https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_40_00_77/docs/dmm/dmm_user_guide/html/dmm/performance.html

    虽然上述更改提高了 BLE 广播的准确性、但它可能会影响15.4收集器侧的性能(例如错过更多数据包)。
    需要牢记的一些事项、同时设计系统的其他部分。

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

    非常感谢您的快速、内容丰富的回复!

    我肯定漏掉了 TI15.4堆栈的相关信息、在查看发行说明时、该堆栈被重新分解为 POSIX 线程。 检查"pthread_Obj"结构之后,我们可以发现 typecasting 是有意义的。 另外、比预期更长的广播间隔实际上确认 DMM 按预期运行-也有意义。

    让我更深入地了解了 DMM 的工作方式-再次感谢您的支持