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.

[参考译文] CC2642R:通告诊断

Guru**** 2595800 points
Other Parts Discussed in Thread: ENERGYTRACE, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/979938/cc2642r-diagnostics-for-advertisments

器件型号:CC2642R
主题中讨论的其他器件:ENERGYTRACESysConfig

BLE 堆栈是否提供了任何诊断/统计数据以了解与广播相关的问题?

我的代码库基于 SDK v4.20中的简单外设应用。 该广告在几天前一直运作良好。 但是、在应用代码中添加了几个与广播或 BLE 堆栈完全无关的代码后、广播不会从 Launchpad 传出。  

该代码特定于应用、不会禁用 BLE 堆栈中的任何内容或中断。

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

    您好!

    目前,我没有想到这一问题有任何明显的原因。

    我建议利用我们 的调试指南、检查 GAP 函数返回的状态、确保没有命中断言、并验证是否没有堆栈/堆短缺。

    让我们及时了解最新信息、

    此致、

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

    您好 Clement、

    我已检查堆栈/堆是否没有断言命中、也没有问题。

    此致、

    Mehul

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

    Clement、

    是否有任何方法来验证传输的广播没有损坏? 我之所以问、即使 BTool 未接收到广播、我也可以看到外设消耗能量在传统广播通道上传输广播数据包。

    请参见随附的 EnergyTrace 管理单元。 通告间隔为320ms。

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

    您好!

    您确定这些是广告吗? 每个"广播"似乎持续100ms (而应处于100us 的数量级)。

    话虽如此、您可以使用 BLE 分析仪来验证您的广播内容。

    如果您没有 BLE 分析仪、则可能可以使用移动电话应用(例如 LightBlue)。

    此致、

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

    您好、Clement、所有高电流不仅是广播、而且是我们的应用特定代码。 这是 BTool 未捕获广播时的缩放快照。

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

    您好、Clement、所有高电流不仅是广播、而且是我们的应用特定代码。 这是 BTool 未捕获广播时的缩放快照。

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

    您好!

    感谢您的详细信息:)现在我们同意,这些是广告。  

    如前所述、尝试获取一些 BLE 迹线可能会有所帮助。

    此致、

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

    LightBlue 应用是否有帮助? 我没有 BLE 分析器。

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

    此外、您能想到数据如何被破坏吗?  

    我认为在广播不起作用的情况下、驱动程序/覆盖的一些 BLE 堆栈相关指针可能会损坏?

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

    您好!

    LightBlue 可能会帮助您验证是否检测到设备。 此外、您还可以选择查看广播集的内容。

    在您的应用中、您通常是否更新广告的内容?

    此致、

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

    是的、固件会在发送广播后更改广播数据。

    这里的问题是在客户端应用程序中根本没有捕获广播数据! 因此、不确定 LightBlue 应用是否有用。

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

    您好 Clement、

    是的、我们确实会在每次成功的广播事件(GAP_EVT_ADV_END)之后更改广播数据。 您认为这可能是一个问题吗? 我们有以下更改广播数据的步骤:

    - GapAdv_disable()

    - 带有新句柄的 GapAdv_enable()

    我相信广告数据会因某种原因而损坏。

    此致、

    Mehul

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

    您好、Mehul、

    您是否可以尝试不更改广播或始终加载相同的句柄? 目标是确定问题的来源。

    此致、

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

    您好 Clement、

    我试过、但它不起作用。 广告仍未播出。

    Mehul

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

    您好、Mehul、

    总之、根据功耗跟踪、我们知道会发送广播。 但是、到目前为止、没有任何器件能够检测到这些广播。

    您是否考虑使用新 LaunchPad 运行一些测试?

    如果在器件进行广播时在广播通道上看到一些射频活动、您能否使用 Launchpad + SmartRF Studio 进行验证?

    另外、请确保您已经尝试了我们的调试指南 dev.ti.com/.../debugging-index.html 中指定的所有想法

    如果这些元件不起作用、则需要 BLE 监听器。

    此致、

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

    您好 Clement、

    我们有 Ellisys BLE 监听器、它不会显示任何来自 BLE TI Launchpad 的广播包。

    此外、没有来自任何模块(堆、BLE 堆栈、TI RTOS (XDC)等)的 assert()。

    我从 C:\Program Files (x86)\Texas Instruments\SmartRF Tools\SmartRF Packet Sniffer 2\sniffer_fw\bin\cc26x2r1lp 获得了二进制文件。 将立即尝试使用射频监听器。

    Mehul

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

    您好、Mehul、

    [引用 user="Mehul Dalal"]我们有 Ellisys BLE 监听器、它不显示来自 BLE TI Launchpad 的任何广播包。

    好的、那么这是有问题的。 我认为射频监听器不会在这里管理更好的工作-但请向我证明我错了:)

    您可能希望提供更详细的电源跟踪视图。 我可以尝试对其进行审查、并尝试寻找一些东西、但我不承诺任何事情。

    此致、

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

    您好 Clement、  

    "更详细的电源线迹视图"中需要什么?

    Mehul

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

    Clement、

    我验证了 SmartRF 监听器也没有什么帮助。  

    此致、
    Mehul

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

    [报价用户="Mehul Dalal"]在"更详细的电源跟踪视图"中,您需要什么?[/quot]

    "缩放"广告本身可能会有所帮助。

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

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

    Clement、

    我也有用于工作广告的轨迹。 下面重点介绍了一次能量跟踪部分、我可以看到其中的一个差异。 如果广播不起作用、突出显示的部分将丢失:

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

    您好 Clement、

    还有一个想法。 我认为缺少能量跟踪是指发送广播数据后外设处于接收器模式(用于扫描请求或连接请求)的时间。 换句话说、如果出现问题、我认为 BLE 堆栈在广播后根本不会进入接收器模式(监听器上也不会出现这种情况)。

    我认为 BLE 堆栈本身确实有问题。 我们的广播数据始终是可连接和可扫描的。

    Mehul

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

    您好、Mehul、

    我同意电源迹线不符合预期。 您的让我想到扩展广播-因为4个尖峰以及其他设备 正在努力扫描它们。 话虽如此、始终难以100%确定。

    请向我提供您正在使用的广告参数吗?

    此致、

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

    Clement、

    我已经验证了布线也适用于传统广播。 在什么情况下、我们可以在扩展广播中看到4个尖峰? BLE 堆栈在所有广播通道中传输广播数据、即37、38和39。 在广播启动事件之后应观察到3个尖峰。

    器件是否可能发送广播通道以外的广播数据?

    以下是各种参数:

    //广播集的旧广播参数
    #define GAPADV_PARAMS_EMR_LEGACY_SCAN_CONN (GapAdv_params_t){\
    eventProps = GAP_ADV_PROP_CONNECTABLE | GAP_ADV_PROP_scannable |\
    GAP_ADV_PROP_LEGACY_\
    .primIntMin = EMR_ADV_Prim_INT_min、\
    .primIntMax = EMR_ADV_PRIM_INT_MAX、\
    .primChanMap = GAP_ADV_CHAN_ALL、\
    .peerAddrType = peer_ADDRTYPE_public_or_public_ID、\
    .peerAddr ={0x00、0x00、0x00、0x00、0x00、 0x00 },/* peerAddr 不使用,因为我们不使用定向广播*/\
    .filterPolicy = GAP_ADV_WL_POLICE_ANY_REQ、\
    txPower = GAP_ADV_TX_POWER_NO_PRICE_\
    .primPhy = GAP_ADV_PRIM_PHY_1_Mbps、\
    secPhy = GAP_ADV_SEC_PHY_1_Mbps、\
    .sid = 0\

    //扩展广播参数
    #define GAPADV_PARAMS_EMR_DELLED (GapAdv_params_t){\
    eventProps = EMR_ADV_MODE_NON_CONN_NON_SCAN、\
    .primIntMin = EMR_ADV_Prim_INT_min、\
    .primIntMax = EMR_ADV_PRIM_INT_MAX、\
    .primChanMap = GAP_ADV_CHAN_ALL、\
    .peerAddrType = peer_ADDRTYPE_public_or_public_ID、\
    .peerAddr ={0x00、0x00、0x00、0x00、0x00、 0x00 },/* peerAddr 不使用,因为我们不使用定向广播*/\
    .filterPolicy = GAP_ADV_WL_POLICE_ANY_REQ、\
    txPower = GAP_ADV_TX_POWER_NO_PRICE_\
    .primPhy = GAP_ADV_PRIM_PHY_1_Mbps、\
    secPhy = GAP_ADV_SEC_PHY_2_Mbps、\
    .sid = 0\

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

    您好!

    您能否添加 SysConfig 的屏幕截图以及显示如何设置广播的代码片段? (为了保持简单、您可以共享一个片段、其中显示了与 GapAdv_xxx 函数相关的代码)

    此外、在 simple_peripheral 示例上应用完全相同的配置可能会很有趣、以查看是否也会出现一些问题。

    此致、

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

    您好 Clement、

    确切的代码是在早期工作的、因此无法在 SDK 中的简单外设固件中重复出现相同的问题。

    请注意、在我们的应用中、我们刚刚添加了4字节的静态变量、并将其添加到数组中、我们已经开始看到这个问题。 该变量与广播或与其关联的模块无关。 添加它还会完全更改映射文件。

    我们的项目中没有 SYSCFG。 相反、我们在项目中包含了通过 SYSCFG 创建的文件、并禁用了 SYSCFG。 您需要哪一个特定的文件?

    以下是各种 GapAdv_代码片段:

    //使用广播集参数创建和初始化广播句柄
    指控(GapAdv_create (advingCallback、advParm、advHandle)、成功);

    if (advHandle!=空)


    //为广播集设置事件掩码
    指称(GapAdv_setEventMask (* advHandle、
    GAP_ADV_EVT_MASK_START_AFTER_ENABLE |//* GAP_EVT_ADV_START_AFTER_ENABLE -在 GapAdv_ENABLE *之后首次广播之后*/\
    GAP_ADV_EVT_MASK_END_AFTER_DISABLE |/* GAP_EVT_ADV_END_AFTER_DISABLE -由于 GapAdv_disable*/\而导致广播停止后
    GAP_ADV_EVT_MASK_SET_TERMINATED|//* GAP_EVT_ADV_SET_TERMINATED-由于连接建立而终止广播集之后*/\
    GAP_ADV_EVT_MASK_END)、/* GAP_EVT_ADV_END -每个广播集结束后*
    成功);

    /*装载手柄*/

    指称(GapAdv_loadByHandle (advHandleLegacySet0、GAP_ADV_DATA_TY_ADV、sizeof (advertDataLegacySet0)、(uint8 *)&advertDataLegacySet0)、Success);

    指称(GapAdv_loadByHandle (advHandleLegacySet0、GAP_ADV_DATA_TY_SCAN_RSP、sizeof (scanRspData)、(uint8 *)&scanRspData)、成功);

    /*用于更改广播和扫描响应数据*/

    //在旧广播句柄上调用 GapAdv_prepareLoadByHandle()
    //选项 GAP_ADV_FREE_OPTION _DONT_FREE =不要释放任何内容,因为我们将使用相同的缓冲区重新加载
    指称(GapAdv_prepareLoadByHandle (advHandleLegacySet0、GAP_ADV_FREE_OPTION _DONT_FREE)、成功);
    //在旧广播句柄上调用 GapAdv_loadByHandle()
    指称(GapAdv_loadByHandle (advHandleLegacySet0、GAP_ADV_DATA_TY_ADV、sizeof (advertDataLegacySet0)、(uint8 *)&advertDataLegacySet0)、Success);

    指称(GapAdv_prepareLoadByHandle (advHandleLegacySet0、GAP_ADV_FREE_OPTION _DONT_FREE)、成功);
    指称(GapAdv_loadByHandle (advHandleLegacySet0、GAP_ADV_DATA_TY_SCAN_RSP、sizeof (scanRspData)、(uint8 *)&scanRspData)、成功);

    /*启用特定的高级句柄*/

      bStatus_t status =(STATUS_t) GapAdv_enable (advHandle、GAP_ADV_ENABLE_OPTIONS_USE_MAX、0);

    /*禁用特定的高级句柄*/

      bStatus_t status =(STATUS_t) GapAdv_disable (advHandle);

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

    您好、Mehul、

    我没有在您共享的代码中发现问题。

    最好确认您提到的"4字节静态变量"是否是导致问题的原因。

    此致、