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:数据包丢失问题

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1119905/cc2541-packet-loss-issue

器件型号:CC2541

大家好、

以下是客户提出的问题、可能需要您的帮助:

使用 CC2541作为主器件来扫描来自从器件的广播数据包将导致数据包丢失。 例如、从器件广播间隔为200ms、主机扫描间隔为100ms。 在无射频期间降低频率的指令已被禁用。 主机可以在一分钟内扫描从机发出的220个数据包、这与理论上应该扫描的285个数据包稍有不同。 但使用监听器握持、可以捕获280个数据包。

客户想知道、有什么好方法可以实现少量的数据包丢失。  

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

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

    樱桃、您好!

    客户使用哪个 SDK 版本和项目来执行此测试? 配置了哪些扫描参数? 客户是否已使用 host_test 对此进行了测试?

    我想说、在这种情况下、预计会出现一些损耗。 接收器在固定时间内以固定的间隔打开、然后在两者之间休眠。 由于接收器并非始终处于打开状态、因此我们增加了丢失某些广播的可能性。 一般来说、监听器仅用于监听、因此我希望设备能够接收大部分数据包。

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

    您好、Ammar、

    感谢您的支持!

    • 主机使用的程序为1.4.0。
    • 版本的作用分别使用中央和观测器
    • 扫描参数:被动扫描、默认最大扫描数为8、扫描周期=扫描间隔=扫描窗口时间= 100ms
    • 发现模式:全部
    • 白名单:未使用
    • 在 HCI 指令中、禁用无线电射频期间的 MCU 抑制。
    [引用 userid="314474" URL"~/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4152208#4152208"]我想说在这种情况下会出现一些损耗。

    为周围蓝牙广播之间的碰撞剂量"损失"?

    目前监听器抓取数据包可以捕获285个左右的数据包、但程序只能捕获大约200个数据包。

    监听器是否始终接收? 监听器数据包捕获与使用 CC2541有何区别?

    是否有办法优化 CC2541的接收状态? 例如、无论功耗如何、它都可以保持始终接收状态。

    [~报价 userid="314474" URL"/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4152208#4152208"]客户是否已使用 host_test 对此进行了测试?

    他们不熟悉 host_test、能否帮助链接到相关文档?  

    谢谢、此致、

    樱桃

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

    樱桃、您好!

    感谢您提供详细信息。 简而言之、我希望监听器 FW 在大部分时间都打开 RX。 而应用程序配置为仅在设定的间隔/窗口期间打开 RX 进行扫描。

    作为参考、让他们浏览扫描/广播 SLA (提供的链接不是针对他们自己的、而是针对更新的 CC2640R2。 他们只能参考 SLA 以获取扫描基础知识的参考和说明): https://dev.ti.com/tirex/explore/node?node=AD4sGbaamTCyn0DvZgBAsg__krol.2c__LATEST

    我会尝试扩大扫描窗口以查看它们是否在接收量方面有改进、并增加 DEFAULT_MAX_SCAN_RES。

    [引用 userid="496057" URL"~/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4154461#4154461"]他们不熟悉 host_test、您能帮助链接到相关文档吗?  [/报价]

    SDK 的文档位于 BLE-CC254x-1.5.2.0>文档文件夹中,特别是 TI_BLE_Software_Developer's Guide。 这不包括 HostTest 项目(位于  projects\ble\HostTest\CC2541中)。 HostTest 是一个基于网络处理器的项目。 客户应将项目刷写到 LaunchPad 中。 然后、客户需要使用 BTOOL (BLE-CC254x-1.5.2.0\Accessories\BTool)通过 UART 连接到电路板。  他们可以使用此 GUI 来扫描设备(以及更多:即连接)。

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

    您好、Ammar、

    您能否帮助检查客户提出的新问题?

    1) 1)当扫描参数 DEFAULT_SCAN_DURATION 设置为100时、1分钟内仅计算585次扫描、相当于一次扫描102ms、 从设置值100ms 起为2ms、该误差可能是由于时钟错误、因为使用计时器时、1ms 内存在20us 的误差。
    但是、在调试期间、当 DEFAULT_MAX_SCAN_RES 设置为100时、此错误会增加。 1分钟内只能进行572次扫描、相当于一次扫描104毫秒。 是否由于 DEFAULT_MAX_SCAN_RES 设置更大而增加单个扫描事件的时间消耗?

    2) 2) DEFAULT_MAX_SCAN_RES 设置的最大值是多少? 协议栈是否受限?

    3) 3)当扫描参数 DEFAULT_SCAN_DURATION 设置为5000时、从广播间隔为200ms、广播数据内容更改周期为1000ms。 即使 GAP_SetParamValue( TGAP_FILTER_ADV_REPORTS,false )指令禁用了过滤,具有相同广播数据内容的数据包仍会被过滤。是否有任何指令可防止对具有相同广播数据内容的数据包进行过滤?

    谢谢、此致、

    樱桃

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

    樱桃、您好!

    [引用 userid="496057" URL"~/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4162388#4162388"]由于 DEFAULT_MAX_SCAN_RES 设置更大、单次扫描事件的时间消耗增加了吗?[/QUERP引号]

    您能澄清一下#1吗? 第一句是指将默认扫描持续时间设置为100、然后转到描述  DEFAULT_MAX_SCAN_RES 中的更改。 回答时、如果两个测试之间的唯一增量为 DEFAULT_MAX_SCAN_RES、则可以合理地解释为器件将花费更多的时间来捕获额外的扫描结果。 这种开销意味着接收每次扫描之间的处理时间更长、这可以解释我们看到的内容。 无线电级别的扫描窗口不应受此变量的影响。

    [~ userid="496057" URL"/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4162388#4162388]2) 默认设置的最大值是什么?MAX_SCAN_RES 设置的最大值? 协议栈是否受限?[/quot]

    我认为应用程序负责分配用于扫描的内存。 示例 simpleBLEObserver.c 显示了用于存储扫描结果的 simpelBLEDevList。 此处的最大值将根据您的应用受到限制。

    [~报价 userid="496057" URL"/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4162388#4162388"]是否有任何指令阻止筛选具有相同广播数据内容的数据包?

    我认为相关参数是 TGAP_FILTER_ADV_REPORTS、默认情况下为 true。 您可以通过调用 GAP_SetParamValue (TGAP_FILTER_ADV_REPORTS、false)来禁用此功能;

    希望这对您有所帮助。

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

    尊敬的 Ammar:

    [引用 userid="314474" URL"~/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1119905/cc2541-packet-loss -issue/4163638#4163638"]我认为相关参数是 TGAP_FILTER_ADV_REPORTS、默认为 true。 您可以通过调用 GAP_SetParamValue (TGAP_FILTER_ADV_REPORTS、false)来禁用此功能;[/QUERT]

    客户已使用此参数禁用过滤功能。 但是、从扫描结果来看、底层仍在过滤扫描事件中具有相同广播数据内容的广播包。

    因此、他们想知道在扫描事件中是否有任何指令来取消筛选同一从器件广播内容的广播包?

    谢谢、此致、

    樱桃

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

    樱桃、您好!

    除了  应用层的 TGAP_FILTER_ADV_REPORTS 设置之外、我认为没有其他方法可以更改链路层(源代码)的行为。

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

    您好、Ammar、

    谢谢。

    1) 1)在不与堆栈冲突的情况下、是否可以将底层寄存器配置为在扫描事件期间取消筛选具有相同广播包数据内容的广播包?

    2) 2)如果寄存器的使用会导致冲突、是否可以实现每个从器件广播事件? 以便在每次广播事件后更新广播数据内容。 这可防止从器件发送具有相同数据内容的广播包、还可防止在扫描事件期间针对相同广播内容对主机进行过滤。

    谢谢、此致、

    樱桃

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

    樱桃、您好!

    遗憾的是、链路层在寄存器级别处理滤波(即无线电驱动器命令)。 由于这是从源头上考虑的、因此建议的解决方案是不可能的。

    将 TGAP_FILTER_ADV_REPORTS 设置为 false 后、客户是否看不到更多的 ADV 报告? 设置后、他们应在高级报告中看到更新(包括重复)。

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

    您好、Ammar、

    在扫描过程中、即使 Tgap_filter_ADV_REPORTS 设置为 false、仅当广播包的值发生变化时、底层过滤器才会重复一次、对吧? 由于客户测试如下:

    将从器件的广播间隔设置为200ms、主机的扫描事件周期=扫描间隔:10240ms、DEFAULT_MAX_SCAN_RES 设置为50、Tgap_filter_ADV_REPORTS 设置为 false。 在扫描中只能接收来自该从器件的一个广播包。

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

    樱桃、您好!

    此 e2e 中有一些与此相关的历史信息: https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/337753/cc2541-unfiltered-discovery-scan 

    我会请求客户确认应用层没有滤波器。 但是、我无法确认此问题目前是否仍然存在。 让我对此进行调查、然后返回给您。