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.

[参考译文] CC2541:是否可以在1.28秒后终止可连接的定向广播?

Guru**** 2589280 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/601633/cc2541-possible-to-terminate-connectable-directed-advertisement-before-1-28-seconds-elapse

器件型号:CC2541

使用状态机启动可连接的定向通告、然后查看在50毫秒后是否形成连接。  如果在未实现连接的情况下发生3次状态机(150ms)、我们希望终止可连接的定向广播并返回休眠状态5秒钟。

目前、如果我们达到150毫秒、并尝试禁用广播、则在整个1.28秒结束之前、它不会终止。  这是预期的、还是可以在不到1.28秒的时间内根据需要终止可连接的定向广播?

此致、

-Marc

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

    Mark、您好!

    您是否使用受限可发现模式? 您可以使用 TGAP_LIM_ADV_TIMEOUT 来限制器件广播的时间、但我认为您不能将其设置为低于1s

    #define TGAP_LIM_ADV_TIMEOUT 1 //!<处于受限可发现模式时保持广播的最长时间。 以秒为单位(默认为180秒) 

    您还可以尝试设置计时器并使用 GAP_EndDiscoverable()停止广播。

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

    您好、Marie、

    谢谢。  我认为最后一个部分可能会有所帮助。  我们使用的是 GAPRole_SetParameter (GAPROLE_Adverte_enabled、sizeof (uint8)、&new_state);new_state = false。

    我将尝试 GAP_EndDiscoverable() API,看看它是否能满足我们的需求。

    -Marc

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

    您好、Marie、
    所以我尝试了几件事、但还是没有运气。 我们是否确定堆栈将允许在1.28秒之前终止可连接的定向广播(如果未建立连接)?

    请注意 ,调用 GAP_EndDiscoverable()时, 我得到 的返回代码为0x12,它是 bleIncorrectMode。  如果 认为 advertising...no不能确定可连接定向广播持续1.28秒、而调用 GAP_EndDiscoverable 的计时器在150毫秒后触发、这是怎么可能的???

     我将在周末更详细地了解这一点、因此如果您在 COB 星期五之前有任何想法、我们将不胜感激。
    -Marc

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

    尊敬的 Marc:

    如果您尝试连接的器 件处于范围内、器件可能会立即进入连接状态、因此这可能是 bleIncorrectMode 的解释、在此之后器件会自动停止广播。

    此外、如果您查看 peripheral.c、您将看到、如果器件处于 GAPROLE_advertising*状态、则您停止广播、然后它将进入 GAPROLE_WAITING_STUARTing...状态:

      案例 GAP_END_DISCOVERATed_DONE_EVENT:

    (笑声)

    //更新状态。
    if (gapRole_state == GAPROLE_Connected_ADV)

    //在广告关闭期间
    gapRole_state = GAPROLE_Connected;

    其他

    //在广告关闭期间
    gapRole_state = GAPROLE_WAITING_STUARTWAITIN;

    (笑声)

    您还可以通过评测功率来确认、在进入 GAPROLE_WAITing 状态后、广播确实已停止。

    祝你一切顺利

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

    您好、Zahid、

    谢谢。   没有任何具有正确地址的(无中央地址)在允许连接的范围内、因此我知道这不是问题。

    因此、我想我还想知道、在执行可连接定向广告时、停止向堆栈提交广告的过程是否在 CDA 启动后150毫秒完成、堆栈是否会停止广告或将继续运行广告直到1.28秒 (在执行此操作时、显示 GAPROLE_WAITING_WAITING_UART等到1.28秒结束)?

    客户真的需要广告停留在150毫秒、而不是运行整个1.28秒。

    请告诉我。

    此致、

    -Marc

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

    您好、Zahid、

    可连接的定向广告是否应该是阻塞式操作?  在1.28秒之后、似乎会阻止主应用程序循环中的任务调度程序运行。  我已配置射频内核、然后为50ms 计时器间隔发生时(P1_6)以及尝试禁用副(P1_1)添加了调试信号。  在1.28秒的可连接定向广告之后,这些似乎永远不会发生……这是预期的吗????  即使在公布之前启动50ms 计时器、也会发生这种情况。

    我认为、第一个计时器 INT 在可连接定向广告运行时发生、但直到可连接定向广告结束时、应用程序任务调度程序才会为其提供服务...然后它会触发接下来的几个间隔、然后呼叫尝试停止可连接 出现定向广告(太晚)。

    是否有办法解决此问题、或者运行可连接的定向广告是否能阻止其他事情发生?

    此致、

    -Marc

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

    您好!

    我将尝试重现此情况。 但根据日志、它看起来像是进入连接状态、您能否确认状态代码是否设置为定向广播超时(0x3C)

    另外、如果在将参数设置为启动定向 ADV 之前启动计时器、您是否会看到任何差异?

    祝你一切顺利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    扎希德
    对于可连接的定向广告、外设将进行广播、然后立即侦听间隔~1msec 的短突发。 上面的数据看起来像是一个连接、但不是....it、只是可以连接的定向广告发生得非常快、如果存在具有正确地址的中央设备、射频内核会在 TX/RX 之间切换以实现快速连接 (它不存在、上面的数据没有连接)。

    要回答您的问题、订单似乎根本不会改变行为(我今天早些时候测试过)。

    我通过修改 simpleBLEPeripheral 项目完成了这些测试。 我将发送包含基本模式的 C 文件、以便您进行复制。 调试端口路由如上一帖子中的图片所述。

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

    对于 CC254x、在1.28s 持续时间完成之前、无法禁用 HDC 定向 ADV。 此问题将在我们的未来版本中得到解决。 权变措施是在未施加此限制的情况下使用低占空比定向广播:

    #define DEFAULT_advertising_interval      32

    advEventType = GAP_ADTYPE_ADV_LDC_DIRECT_IND;  

    祝你一切顺利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Zahid、
    我注意到、在使用带有低占空比定向广告的修改示例时、当 DEFAULT_advertising_interval 设置为5时、可能会发生 XDATA 堆栈溢出。 我将尝试弄清这一点、但您是否对这种情况可能发生的原因有任何想法? 这甚至不是在连接中、而是随机发生(有时在加电2分钟后发生、有时小于该时间)。
    -Marc
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Zahid、
    其他信息。 请提供建议。
    我通过 OSALMEM_MEASICENTS 对堆进行了一些检查,在正常的广播操作下(使用低占空比定向广告),我看不到任何接近使用限制的内容(它小于可用空间的30%)。 我也看不到 iDATA 或 XDATA 堆栈接近其全部分配的任何位置(iDATA 使用量小于20%,XDATA 使用量小于30%)…。调试器接口出现故障,所有内容都是 FFs,包括其他寄存器。

    我已经在将 DEFAULT_advertising_interval 设置为10的情况下运行了系统~50分钟、它继续运行良好。

    我的理论是、间隔是从1条广告的开头(在所有3个频道上)到下一个3系列的开头计算得出的。 由于在“间隔0”的所有3个通道上进行广播所需的时间~2.55ms,我认为如果代码逻辑确定下一个间隔“间隔1”小于2.55ms +后处理任务的裕度,则可能会导致问题。 例如、当我们将值设置为5时、间隔时间为3.125msec、抖动为0msec…这种情况下、只有0.575msec、直到下一个广告间隔引起问题。

    有什么想法?
    -Marc