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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1236637/cc2642r-missing-multiple-slave-advertising-during-the-scan

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

大家好!

我使用的 是 CC2642、SDK_CC26X2_R2_4_40_00_44、用作项目起点的示例是 multi_role、经过大幅修改。 该板是定制板。

此产品不断扫描两种不同类型的从属,它也可以自己从智能手机连接。

必须扫描并(最终)连接的两种从器件(我们将其称为"A"和"B")也是基于 CC2640_R2的定制板。  

从器件"A" 经常进行广播、一旦 multi_role 扫描找到它、就会建立并无限期保持连接。 不会有问题。

从器件"B"用作标签、因为其由电池供电、 每3秒进行一次广播(在三个通道37、38和39上)。  

当 multi_role 附近没有从 B 时、multi_role 扫描开启3.5秒、关闭0.2秒、这是无限期的。

扫描期间的 multi_role 找到从器件"B"后、 我更改扫描参数时序、以便 使用从器件 B 广播 sincronize 多角色扫描(这样可以从 从从从器件"B"中查找每个下一个广播)。

因此、在 multi_role 找到第一个从站 B 广播后、便会设置 multi_role 扫描:

-关闭2.8秒(因为从 B 的下一个通告将不会早于3秒到达)

那么

-只需一段时间就可以得到下一个广告,因此理想情况下只需0.2秒。 ( 如果没有发现广告、最长打开3.5秒)。

等等

扫描间隔和扫描风都设置为16 (10毫秒)    

此扫描与两个从器件的 white_list

为扫描调用的函数为 GapScan_enable (0、T_ScanDuration、DEFAULT_MAX_SCAN_RES);   

我将  DEFAULT_MAX_SCAN_RES 从25记录到250、但由于我正在使用白名单、并且由于我在发现从 A 或 B 广告时停止扫描、我认为此变量根本无关 (我也不使用 multi_role_addsScanInfo 函数,该函数要求该变量不大于某个值)。  

问题是,通常,扫描不是一个,而是三或四广告的 Salve B 连续。

我尝试了许多不同的扫描和间隔值,并且(同时认为 multi_role 必须从智能手机连接,并且必须保持与从器件 A 的连接)这两个值16似乎都是最好的选择。

我还在扫描期间检查了无线电的行为、以确保一切都按预期工作、使用  

//将 LNA 使能引脚 RFC_GPO0映射到 DIO06
IOCPortConfigureSet (DIO06、IOC_PORT_RFC_GPO0、IOC_IOMODE_NORMAL);

我没有发现任何问题:当我触发"开启扫描"时、对讲机工作正常。

我还尝试了 multi_role 作为中央设备、不使用 peripheral_CFG 配置。 但这并不能带来更好的结果。   

如果有一种方法可以获得更好的结果、或者我缺少什么、您会怎么办?

非常感谢您的支持

费德里科

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

    尊敬的 Federico:

    感谢您与我们联系。 我们将对此进行研究、并尽快与您联系。 与此同时、您是否可以使用低功耗蓝牙监听器? 如果是、那么您能否在错过的扫描事件发生时记录监听日志? 这将帮助我们验证当多角色器件错过广播时是否通过无线方式发送。 您是否能够在 Launchpad 上运行自定义代码、或其功能是否与自定义电路板相关联? 我想看看我们是否有可能在我们身边重现这一问题。

    此致、

    1月

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

    大家好、Jan、

    我可以做到。 同时,我发现:

    -在 MAX_NUM_BLE_CONN=1的情况下,我的 multi_role 的扫描可以轻松地找到我的标签中的几乎所有广播(每3秒1个高级)。               无论是否将智能手机连接到 multi_role。

    -通过  MAX_NUM_BLE_CONN=2,我的 multi_role 的扫描可以很容易地找到我的标签中的几乎所有广告(每3秒1 Adv ),只有我没有   将智能手机连接到 multi_role。 由于我连接智能手机,从 multi_role 扫描开始工作非常糟糕,缺少许多标签 Adv。

    我检查了堆、似乎一切都正常。 我要将4个用例与堆日志相关联。 堆栈大小也可以(我也尝试过减小它们、但结果相同)。  

    为什么只向 MAX_NUM_BLE_CONN 添加1个连接(即使仅使用其中一个连接)会产生如此大的差异? 如果问题是堆,我想我应该通过 heapmgrFail 看到它。

    我该怎么办? 至少我应该在 MAX_NUM_BLE_CONN=2下运行...

    谢谢、Federico

     

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

    您好 Federico、  

    我们期待看到您的监听器日志。 是否有可能修改了包含 MAX_NUM_BLE_CONN 的代码? 此外、您能否测试将 MAX_NUM_BLE_CONN 设置为1或2以外的数字?   

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:
    正如您所问、我根据 multi_role 示例准备了一个非常简单的定制代码、您可以直接在 Launchpad 中使用这些代码来验证行为。


    从最初的 muli_role 示例开始、我只修改了 multi_role.c 文件:您可以将其替换为 multi_role.c。

    -在这个文件中,搜索"tag_mac_Addr",以写入你想作为从要从 multi_role 搜索的 Mac 地址
    -从机应每3秒广播一次

    e2e.ti.com/.../8156.multi_5F00_role.zip


    multi_role 搜索标签(通过白名单)、扫描时间最长为3.5秒。 如果找不到标签、multi_role 会等待0.2秒、然后重新开始新扫描。
    当发现标签时、扫描会立即停止、然后2.8秒后再次开始新的扫描(因为标签从设备每3秒广播一次、所以我随时准备好通过无线方式找到它)
    我已经使用这两个 LED 通过示波器更好地呈现了结果:

    扫描 MULTI_ROLE 时、红色 LED 亮起
    发现标签时、GEEN LED 亮起几毫秒

    我在 ti_ble_configh.h 中尝试了许多不同的设置、例如:


    MAX_NUM_BLE_CONns 从1更改为8

    DEFAULT_SCAN_INTERVAL 从16更改为800
    DEFAULT_SCAN_WINDOW 从16到800

    DEFAULT_UPDATE_MIN_CONN_INTERVAL 从100更改为800
    DEFAULT_UPDATE_MAX_CONN_INTERVAL 从100更改为800

    但 multi_role (与智能手机连接)几乎每3秒查找一次标签的唯一方法是将 conn.interval 保持在 multi_role 和 Smartphone 之间超过600 (通过 default_update_maX_CONN_interval 600)
    如果您尝试下面的值、则无法每3秒定期获取标签广告。


    当 DEFAULT_UPDATE_MAX_CONN_INTERVAL < 600时、扫描开始丢失许多标签广播:通过监听器检查、问题来自 multi_role、它似乎可以正确启动扫描(GAP_SCAN_ENABLE (); 函数始终 返回成功)、但实际上、监听器显示、当标签广播丢失时、发生这种情况是因为 multi_role 没有扫描请求、即使标签在正常进行广播、每3秒进行一次广播也是如此。


    在这种情况下(DEFAULT_UPDATE_MAX_CONN_INTERVAL < 600且1个或更多主器件连接到 MULTI_ROLE)、我注意到扫描结果跟随类似的正弦波、每3秒正确找到几秒钟的标签、然后在其他许多秒内、MULTI_ROLE 扫描难以找到标签、 依此类推。 扫描周期前提是发现标签没有问题、并且标签广播丢失时的周期随着 DEFAULT_UPDATE_MAX_CONN_INTERVAL 的值发生相应变化(较高的值、较长的周期内 multi_role 可以正确找到标签)。

    我的问题是 DEFAULT_UPDATE_MAX_CONN_INTERVAL = 600已经不可用于我的使用、因为智能手机应用程序和 multi_role 之间的通信速度太慢(智能手机应用程序命令的延迟和 multi_role 的执行操作的延迟太大、而且无法从客户视图中实现)。

    因此,我请求帮助,以了解是否确实有问题(在这种情况下,如果可能解决),或者我无法为我的需要做任何事情?

    非常感谢,Federico

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

    您好 Federico、  

    我必须在星期一回到你的身边。 我们需要使用监听器来确定最终是否缺少外设广播。 此外、您能否告诉我们您是否在 SysConfig 中修改了其他任何内容? 如果是、您可以向我们提供您的 SysConfig 文件吗?  

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:
    从 TI 的原始示例开始、我只更改了 multi_role.c。 这样做是为了使您可以非常快速和轻松地使用 LP 重现问题。 关于 SysConfig、正如我前面所写的、我通过 ti_ble_configh.h 只使用了连接和扫描参数

    谢谢、Federico

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

    您好 Federico、  

    这似乎是需要根据用例优化参数的情况。 因为你不能扫描100%的时间,你一定会错过一些广告. 我们明天将对此进行更详细的测试、并有望找到一些其他信息。 此外、我会 在此处附加过去的 E2E  主题、并在此处附加我们的广告和扫描 SLA、了解有关此主题的更多信息。  

    此外、是否可以使用其他电路板来复制、或者您是否主要通过 iOS/Android 应用程序对其进行测试?

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:

    感谢你的帮助。 我知道我不能扫描100%的时间,我的问题是一个完全错误的任何广告16次(有时更多, somtime 更少)连续。 我觉得这有点奇怪。。。 感谢链接:我尝试了每一个扫描风和扫描 intervall 值专注于错过少副可能当主连接到 multi_role lp ,但从我的标签得到广告的唯一方法是保持连接间隔为600或更高. 我尝试扫描风和扫描间隔从16到800、但如果连接间隔保持在600以下、multi_role 就会连续错过太多广播。

    我一直在使用我的定制板+我的定制 Android 应用程序、但根据您的要求、现在您可以轻松地使用我在4天前附上的 LP + multi_role.c 进行复制。 您可以使用任何类型的智能手机:连接间隔从不同智能手机的不同值开始、但在 update_link_parameter 期间、连接间隔设置为 ti_ble_configh.h 中存在的值

    例如、如果我设置 DEFAULT_UPDATE_MAX_CONN_INTERVAL = 300、但智能手机和 LP 之间的连接以30的连接间隔开始、则在几秒钟之后、"链路参数更新"将新的连接间隔设置为值300。 从该状态开始、任何类型的扫描间隔和缠绕、multi_role 都连续多次丢失标签广播。 仅当我使用 DEFAULT_UPDATE_MAX_CONN_INTERVAL > 600时、它开始正常工作、但正如我在应用中所介绍的、600或更高的值才是真正巨大的值。

    因此,如果我的目标是使用一个大约100 maxium 的连接间隔来加速 SNphone 和 multi_role 之间的通信,如果我已经尝试过任何扫描间隔和风,我如何修复从扫描中丢失的广告?  

    您是否可以建议我扫描风电和扫描间隔参数值、以便在连接间隔=100的情况下工作、而不会出现扫描问题?

    你有没有发现任何与嗅探器来解释这种行为?   

    谢谢,Federico

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

    您好 Federico、  

    首先、您能向我提供您所需的连接间隔吗? 此外、您提到您正在更改扫描间隔、您是否看到最适合您的扫描间隔? 其次、您能否从器件的 TX、Rx 引脚提供任何日志? 这可以帮助我们指明所有内容是否正在发送和被正确接收。 第三、您尝试发起多少个连接? 第四、您能解释一下所有的角色是什么吗? 现在我认为、由于在0.2秒关闭时扫描间隔设置为3.5秒、因此连接事件会干扰扫描事件。 如果您有任何疑问、敬请告知、由此给您带来的不便、敬请谅解。  

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:

    正如我在前面所写的、最大连接间隔= 100对于我的应用而言是足够的。

    TX 引脚和 Rx 引脚工作正常、因为我已经通过 IOCPortConfigureSet 函数进行了检查、但没有发现任何问题。 在我配置的时间之后,转移和接收将正确完成。   

    通常、我的 multi_role 自定义应用应管理2-3个连接:1个在智能手机的从模式下、1-2个在主模式下(1-2个从模式)。  

    我可以使扫描间隔递增、但结果仍然相同:即使我使用连续扫描、也会错过许多广播。

    您是否有机会使用我在前一篇文章中附加的 multi_role.c、尝试在 LP 中重现我的问题? 因为对于它、我可以找到相同的行为、

    提前感谢 Federico   

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

    您好 Federico、  

    我们使用您的程序收集了一些监听器日志和 TX Rx 日志。 连接间隔设置为100以复制应用程序足够的连接间隔、扫描风电/间隔设置为500。 我将包括以下两个日志。 您能否验证您是否在我们的日志中看到与您的日志相同的活动? 此外、您是否可以尝试缩短扫描间隔、但增加扫描次数? 请告诉我、这是否能解决您的问题。  e2e.ti.com/.../scanningadvertisingandconnectionevents.btte2e.ti.com/.../txrxpinactivity.sal

     

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:

    感谢你的帮助。 我无法打开您的日志文件(.btt 和.sal 扩展名)、您能以不同的格式发送我吗?

    我已经对 LP 进行了以下测试:

    扫描间隔和扫描风力= 500

    DEFAULT_UPDATE_MAX_CONN_INTERVAL = 100

    结果与之前相同:

    1 -标记 Mac 地址是 LP 中唯一设置的地址(带列表)

    2 - LP 在未连接 SPhone 的情况下、始终可以每3秒找到从标签发送的广告

    3-以低于100个连接间隔(例如,30或40个)的时间开始连接到 LP。

    4 - LP 与 SPhone 连接开始缺少许多广告从标签每3秒发送

    5 -通过链路更新、连接间隔成功设置为100  

    6-  已连接狮身人面像的 LP 仍缺少每3秒从标签发送的许多广告

     

    我也尝试将扫描时间从3.5秒减少到1秒,但结果是相同的。  

    您是否成功地使 LP 能够在连接间隔=100和扫描 wint/interval =500或任何不同的参数设置下正确地找到每个标签广播?

    我的目标是在 LP 和 SPhone 之间使用100 (或更低)的连接间隔、同时在 LP 正确接收每3秒从标签发送的广播。

    如果您发现要为设置我的目标而使用不同的扫描间隔/扫描风电/扫描时间/参数、请与我分享、以便我可以复制。    

    再次感谢您的支持

    费德里科

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

    您好 Federico、

    很抱歉、要打开这些日志、您将需要一些可在线下载的附加软件。  

    BTT 文件是 ellisys 蓝牙监听器日志。 您可以通过下载 ellisys 蓝牙分析器软件来读取这些文件:  

    Ellisys -蓝牙跟踪器-下载

    Sal 文件需要 Saleae 逻辑分析仪软件、可在此处下载该软件:  

    Saleae 的逻辑分析仪软件

    您是否可以下载此软件并打开侧面的日志、以便您可以看到我在本地使用您的映像时看到的行为?  

    您是否可以尝试使用更短的扫描间隔、窗口和持续时间? 我希望看到使用更短、更频繁的扫描是否可以在保持100连接间隔值的同时获得更好的结果。 您是否可以尝试低至10ms 的扫描间隔和窗口、低至20ms 的扫描持续时间? 我们可以从头开始着手工作。 在这一点上、我认为非常长且频繁的扫描可能被连接事件抢先、这会导致某些扫描被跳过、降低扫描频率和长度将有助于我们验证是否是这种情况。  

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:

    实际上、在我的自定义应用程序中、我已经在使用 SCAN WIND =16和 SCAN INTERVALL =16、 因为这是我在之前的测试中找到的最佳组合(扫描持续时间保持3.5秒)。  

    正如您所问的、保持扫描风和扫描间隔= 16、我已经尝试将扫描持续时间也减小到20毫秒、但值如此之小、multi_role 根本找不到任何广播。  

    ----------------

    我已下载软件、并检查您发送给我的日志。 我已尝试在相同条件下记录:连接间隔= 100、扫描风力和扫描间隔= 500、扫描持续时间3.5秒。 我还将射频引脚调试添加到了 LP 代码中、因此还能够使用示波器4信号进行监控:

    - 1°探头(黄色)  -> LNA (IOC_PORT_RFC_GPO0)

    -1°探头(绿色)  -> Tx (IOC_PORT_RFC_GPO3)

    - 1°探头(蓝色)   ->扫描打开/扫描关闭

    - 4°探针(紫色)->检测到/未检测到标记通告  

      您可以在附件中找到使用一线 BT 监听器(无连接的 mult_role、通过示波器连接的 multi_role)捕获的日志和相对示波器波形。

    e2e.ti.com/.../2604.LOG.zip 

    谢谢、Federico

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

    您好 Federico、

    确认一下、在外设侧、广播间隔似乎为3秒。 您使用此特定值是否有原因? 是否有可能缩短广告间隔、让扫描器有更多机会捕捉广告? 即使您必须使用3秒的广播间隔、您是否可以尝试将广播间隔设置为20ms 以查看问题是否仍然存在? 在此测试期间、请将扫描窗口、间隔和持续时间设置为较小的值。  

    根据您的用例、定期广告可能最适合您。 我将 在此处链接定期广告文档。 您能否查看该部分、看看它对您的用例是否有用。 如果定期广播对您的用例很有用、您能否尝试按照文档中的说明实现该功能。  

    此外、您是否能控制外设? 如果是、您可以修改外设广播吗?  

    谢谢。  

    艾萨克

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

    尊敬的 Isaac:  

    感谢您的反馈。 我们使用3秒作为标签广告间隔的原因是因为我们的标签是电池供电的,所以我们必须保持尽可能低的消费。 我将尝试用20毫秒作为广告隔音,我相信它将改善扫描结果,但我们不能 用它用于生产,不幸的。 谢谢您提供的链接、我将研究它以查看是否可以帮助我。

    此致、Federico  

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

    您好 Federico、  

    感谢您对此进行测试。 定期广告可以正常工作、但您是否还可以尝试将广告间隔最小化为适合您的用例的值? 请告诉我这一切是如何工作的。  

    谢谢。  

    艾萨克