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.

[参考译文] LAUNCHXL-CC26X2R1:GapInit_connect () 使用 ADDRMODE_RP_with_random_ID (OOB irk) 在定向广播期间使定向 RPA 超时

Guru**** 2893300 points

Other Parts Discussed in Thread: CC2642R

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1626007/launchxl-cc26x2r1-gapinit_connect-times-out-targeting-rpa-during-directed-advertising-with-addrmode_rp_with_random_id-oob-irk

器件型号: LAUNCHXL-CC26X2R1
主题: CC2642R 中讨论的其他器件

说明:
我们正在 CC2642R 上开发一个中央应用。 在进行任何 BLE 连接或 SMP 绑定之前、中央器件会接收外设的标识地址并通过带外 (NFC) 方法发出 IRK。 外设使用 定向广播ADV_DIRECT_IND() 和针对中心的可解析私有地址 (RPA) 进行广播。

在调用之前 GAP_DeviceInit()、我们使用设置地址模式 ADDRMODE_RP_WITH_RANDOM_ID。   CC2642R 上启用了控制器隐私。

观察到的行为:

  1. 扫描成功: Central 开始扫描。 使用 OOB irk、堆栈成功解析传入的定向 RPA 并生成 ADV_REPORT

  2. 连接失败: Central 停止扫描并 GapInit_connect() 使用报告中的地址参数调用。 API 返回 SUCCESS、但连接超时。 GAP_LINK_ESTABLISHED_EVENT 永不点火。

  3. 隐私禁用(成功): 如果我们将地址模式更改为禁用隐私(例如使用公共或静态随机地址),则 GapInit_connect() 呼叫成功,并且链接完全建立到定向广告主。

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

    您好、Marco、

    您能告诉我们这里正在使用 SDK 版本和补丁吗?


    此致、
    François μ s。

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

    您好 Francois、

    我们  使用原始的未打补丁的 SDK v6.30.0.84。 我们在基本 SDK 的基础上集成了多个更新到代码库中。

    具体而言、应用了以下补丁:

    1. 时间同步补丁: 直接 TI 补丁应用于 SDK 6.30.0.84 以实现 时间同步功能 (Apply TI patch on SDK 6.30.0.84 for time synchronisation feature)。

    2. dtm 命令补丁: 应用了一个补丁、以在 Commit note 调用 PTM 模式时支持另外两个命令。 我们在标准的 直接测试模式 (DTM) 下运行、我们确认此补丁与 DTM 功能相关。

    3. 新的 TI 汇总  补丁: 稍后集成了 SDK v6.30.0.84 的新 TI 汇总补丁。

    此致、
    Marco

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

    您好、Marco、

    谢谢你。 我将让我们的专家接手并作出回应。

    如果您认为 Ellisys 日志有助于分析问题、请在此处发布日志并将其发送给我进行内部转发。 我不够专业、无法判断我们是否可以仅根据我们对 SDK 的特性和行为的了解做出响应、或者是否需要跟踪实际场景进行分析。


    此致、
    François μ s。

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

    您好 Francois、
    Ellisys 日志为 attached.e2e.ti.com/.../Directed_5F00_Advertising.zip

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

    非常感谢你,马可!

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

    您好、Marco、

    当使用带有隐私的直接广告时、有一些可能导致此问题的因素。

    1. 仔细检查放置在 GapInit_connect () 中的地址
      1. 中有两个地址 GapScan_Evt_AdvRpt_t (ADV_REPORT)
        1. Addr/addrType、这是广播器的地址
        2. directAddr/directAddrType、这是解析为您的身份地址(中心地址)的目标地址
      2. 使用错误的地址可能会导致在尝试解决连接的地址时出现问题。
      3. 确保将广播器的地址传递到 GapInit_connect ()
    2. 如果广告客户的 RPA 不在解决列表中、则中心可能在解决问题时遇到问题。
      1. 将 IRK 添加到解析列表将允许中心匹配来自对等地址的传入广播并为 connect_Req 生成正确的寻址
      2. 此操作应在从 NFC 方法接收到 IRK 后进行、然后再调用 GAP_DeviceInit()。
      3. HCI_LE_AddDeviceToResolvingListCmd () 应该是要使用的正确 API。

    请检查这两个潜在问题、并告诉我您的发现。

    此致、
    Josh Alderson

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

    你好、Josh

    感谢您的详细答复。 我们已经仔细检查了这两个潜在问题、下面是我们的调查结果:

    1.关于传递给 GapInit_connect() 我们的地址:我们正按照您的建议做。 当 ADV_REPORT 火灾时、我们严格提取 addraddrType 字段(广告主传入的 RPA)。 我们明确 使用 directAddrdirectAddrType。 我们通过广告客户 addr addrType 直接进入 GapInit_connect().

    2.关于解析列表和 IRK: 我们正在成功填充解析列表。 收到 NFC OOB 数据后、我们将 IRK 和 Identity Address 插入到堆栈中、 gapBondMgrImportBond() 然后立即使用 GAP_UpdateResolvingList()

    我们知道 IRK 已成功加载到硬件解析列表中、因为 我们的 CC2642R 扫描器成功解析了传入的定向 RPAADV_REPORT 成功触发回调、我们可以正确识别对等器件。 如果 IRK 丢失、扫描仪将丢弃 RPA、我们将永远不会得到 ADV_REPORT

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

    您好、Marco、

    感谢您确认这两个问题都不存在。

    通过 NFC 共享外围设备的信息时、中央的 IRK 是否也与外围设备共享? 还是只共享外设的 irk? 如果外围设备不知道 Central 的 irk 并将其包含在其解析列表中、则连接尝试可能会失败。

    您能否在尝试连接时检查外围设备的解析列表中是否有 Central 的 IRK? 如果不能、您可以尝试添加它、看看它是否有帮助?

    请告诉我您的调查结果。

    此致、
    Josh Alderson  

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

    你好 Josh、

    IRK 是从中心端共享, 我们 wlll 尝试这,但有没有任何例子或东西定向广告在中心和 pirephral?

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

    您好、Marco、

    定向广告没有具体示例、但示例可以遵循一些常规步骤。
    1.通过 NFC(身份地址,IRK)获取中心的身份信息
    2.导入绑定信息(使用绑定管理器更新,在外设解析列表中添加 IRK )
    3.做定向广告,就像你一直

    此致、
    Josh Alderson

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

    你好 Josh、

    感谢您的跟进。 是的,中心的 IRK 与外围设备共享,两个设备都在积极使用由各自的 IRK 解析的 RPA。

    下面是具体的分步场景:

    1. NFC 交换: 在 NFC 配对过程中,中央和外围设备会交换其身份地址和 Irks。

    2. 中央 (TI) 设置: 在 TI 端、我们 gapBondMgrImportBond() 使用外设的身份地址和 IRK 进行调用。 我们启用了扫描仪筛选器策略(仅限白名单)、因此我们只接收添加到绑定管理器的设备的报告。

    3. 外设设置: 在外设端、我们使用 TI 中心的标识地址更新硬件解析列表、并 开始广播之前发出 IRK。

    4. 问题: 以这种方式配置双方(同时利用 RPA 和解析列表)时、TI 中心无法找到此器件的广播报告。

    请检查随附的 Ellisys 日志屏幕截图、以验证无线行为。 为了便于您在检查数据包跟踪时参考、下面提供了准确的交换数据:

    TI 中心数据:

    • 标识地址: 71 CA 27 74 97 F8

    • IRK: 5E 30 C4 A7 0D EC 25 D3 86 21 98 B0 7A E1 6E 37

    外围设备数据:

    • 标识地址: 76 45 1D 37 60 00

    • IRK: 75 E5 C6 C8 26 8F 83 68 D7 F3 80 EC B9 43 80 B5

    请在查看 Ellisys 捕获结果后告诉我您的想法。

    此致、

    Marco

    /cfs-file/__key/communityserver-discussions-components-files/538/Directed.zip

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

    您好、Marco、

    感谢您提供更多信息。
    如果可能、您能否分享此屏幕截图所来自的 Ellisys 日志? 这将有助于我分析问题。

    如果不是、从屏幕截图中可以看出、一个问题仍然存在、那就是外设可能会为 TargetA 中的中心生成 RPA。 如果是这样、则可能会导致 RPA 不匹配、从而导致失败。 如果尚未完成、请尝试确保 TargetA 是中心的标识地址。

    此致、
    Josh Alderson

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

    你好 Josh、

    感谢您对此进行研究。

    不幸的是,我没有保存 .btt 该特定会话的实际 Ellisys 跟踪文件,只有屏幕截图。 如果我们到达了一个死区、我可以设置环境备份并为您捕获一个新的跟踪文件。

    关于 TargetA RPA 不匹配理论:是的、外设正在为 TargetA 现场中央器件生成 RPA。 但是、为了排除外设端的生成问题、 我们使用了一个独立的脚本、ah(IRK, prand)在无线捕获的地址上手动运行加密解析 ()。 我们给脚本 AdvA TargetA 从嗅探器的 RAW 和 RPA,以及交换的铁杆:

    1. 外设的 AdvA RPA 使用外设的 IRK 正确解析。

    2. TargetA RPA 使用 TI 中央的 irk 正确解析。

    由于两个 RPA 使用我们的脚本在数学上都可以 TargetA 完全解析、因此我们知道外设完全根据 BLE 规范生成 RPA。

    这意味着 CC2642R 硬件/堆栈收到的软件在数学上有效 ADV_DIRECT_IND TargetA 、其中 RPA 是从 CC2642R 自己的 IRK 衍生出来的、但 CC2642R 未能识别出该软件并丢弃报告。

    BLE5-Stack 中是否需要已知的限制或特定配置、使 CC2642R 的硬件扫描仪能够接受 ADV_DIRECT_IND TargetA RPA 是什么、而不是中心的身份地址?

    此致、  

    Marco

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

    您好、Marco、

    我已经咨询了我团队的另一位工程师、我们还提出了一些问题。

    需要检查以下几点:

    在调用之前 GAP_DeviceInit()、我们使用设置地址模式 ADDRMODE_RP_WITH_RANDOM_ID。   CC2642R 上已启用控制器隐私。

    您能否附上代码来说明如何执行此操作? GAP_DeviceInit 将 addrMode 作为参数、因此我不理解您在调用此 API 之前如何设置 addrMode。

    连接失败: Central 停止 GapInit_connect() 使用报告中的地址参数进行扫描和调用。 API 返回 SUCCESS、但连接超时。 GAP_LINK_ESTABLISHED_EVENT 永不点火。

    根据我在原始 Ellisys 日志中看到的情况、连接指示从不显示、这意味着情况不可能如此。 您能给我展示这个代码吗? 此外、您能否重新确认状态代码是否正确?

    此致、
    Josh Alderson

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

    你好 Josh、

    很抱歉晚回复。

    1.关于 GAP_DeviceInit()addrMode

    我们在 API 调用之前不做任何特殊操作;我们只是 ADDRMODE_RP_WITH_RANDOM_ID addrMode 直接在 GAP_DeviceInit() 调用内部作为参数传递。

    2.关于 GapInit_connect() 和 Ellisys 日志:

    你完全正确的是, CONNECT_IND 从不出去的空气。 我需要澄清确切的失败点,因为它实际上发生 之前, 我们可以调用 GapInit_connect().

    以下是我们根据地址模式看到的确切行为:

    • 使用 ADDRMODE_RANDOM (隐私关闭)时: TI 硬件成功使用解析列表中的 IRK、解析外设传入的 RPA 并将传递 ADV_REPORT 给我们的应用程序。 我们的应用程序然后呼叫 GapInit_connect(), CONNECT_IND 出去,和链接建立完美.

    • 使用 ADDRMODE_RP_WITH_RANDOM_ID (隐私打开)时: 如果代码库完全相同且解析列表中加载了完全相同的 IRK、则 TI 硬件 在扫描期间无法解决外设传入的 RPA。由于硬件将其丢弃、因此我们的应用程序永远不会收到 ADV_REPORT。 由于我们从不收到报告,我们的状态机永远不会调用 GapInit_connect().

    此致、  

    Marco

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

    您好、Marco、

    对延迟回复表示歉意。


    此问题可能与解决列表中的隐私模式配置有关。 当您调用 gapBondMgrImportBond() 和 GAP_UpdateResolvingList() 时、隐私模式由 gapBondRec_t 中的 stateFlags 字段确定。 如果在 stateFlags 中设置了 GAP_Bonded_State_RPA_ONLY 标志 (0x10)、则会配置网络隐私模式、该模式应用更严格的筛选、可以防止在中央设备使用隐私模式 (ADDRMODE_RP_with_random_ID) 时接受定向广播。

    在调用 gapBondMgrImportBond() 时、是否可以检查您设置的 stateFlags 值? 如果设置了 GAP_Bonded_State_RPA_Only、请尝试将其删除并将器件配置为设备隐私模式。 您仍应根据配对方法设置适当的安全标志、例如 GAP_Bonded_State_Authenticated 和 GAP_Bonded_State_SECURECONECTION。

    此致、
    Josh Alderson

     

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

    你好 Josh、

    很抱歉晚回复。

    我们按如下所示对记录进行完全初始化:stateFlags = 0u;

    因为它是 0uGAP_BONDED_STATE_RPA_ONLY (0x10) 是明确 设置的。 我们的设备默认为设备隐私模式、但行为完全相同: ADDRMODE_RP_WITH_RANDOM_ID 在 Central 上启用时、扫描器会丢弃数据包、 ADV_REPORT 从不触发、不建立连接。

    根据您的建议、我们怀疑严格的隐私过滤器可能会丢弃数据包、因为绑定缺少安全标志。 我们更新了 OOB 导入、以明确包含它们并测试了以下内容: strBondRec.stateFlags = GAP_BONDED_STATE_AUTHENTICATED | GAP_BONDED_STATE_SECURECONNECTION;

    不幸的是、它也不起作用。 行为完全相同: ADDRMODE_RP_WITH_RANDOM_ID 在 Central 上启用时、扫描器会丢弃数据包、 ADV_REPORT 从不触发、也不建立连接。

    我附上了这个精确测试的 Ellisys 日志的屏幕截图。 如果您查看 Connectable Directed 底部的数据包、您将注意到一个关键的细节: Advertiser 地址AdvA() 和目标地址TargetA() 都是可解析的专用地址 (RPA)。

    此致、

    Marco Magdy


    e2e.ti.com/.../Directed_5F00_Advertising_5F00_stateflags_5F00_1.zip

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

    您好、Marco、

    我做了一些更多的研究的主题,它看起来有一个限制,试图使用隐私和定向广告在一起.

    为了使隐私和定向广播正常工作、外设需要知道 Centrals RPA。 使用当前代码的工作方式时、外设将根据中央器件的身份和 IRK 生成 RPA。 RPA 生成的结果与 Central 生成的结果不匹配、因为它们都使用随机信息来生成。 因此、投资促进机构将会下定决心为相同的身份、但投资促进机构本身将不会匹配。 这就是硬件丢弃数据包而您看不到事件的原因。

    此外、标识地址不能在 TargetA 字段中使用、因为器件不会响应。

    根据您的系统需求、我提供了两种建议。

    1.如果需要隐私,则使用非定向广告。 这样做应该可行、因为它不需要 TargetA 匹配、因此 RPA 不匹配不应该是问题。

    2.如果需要定向广播 、则使用 ADDRMODE_RANDOM。 这将禁用隐私、并像您之前所说的那样工作。

    如需参考、请查看此处的隐私指南: https://software-dl.ti.com/simplelink/esd/simplelink_cc13xx_cc26xx_sdk/6.30.00.84/exports/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/privacy.html

    具体而言
    、本节提及 ADDRMODE_RP_with_random_ID:隐私—SimpleLinkTm CC13XX/CC26XX SDK BLE5-Stack 用户指南 2.02.07.00 文档

    以及有关解决 RPA 和身份地址的此部分: 隐私—SimpleLinkTm CC13XX/CC26XX SDK BLE5-Stack 用户指南 2.02.07.00 文档


    此致、
    Josh Alderson

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

    您好、Marco、

    我回顾了我的最后一条评论、我意识到措辞令人困惑和不完整。

    根据 BLE 规范、可以进行有隐私性的定向广告:

    6.2.2.可连接的定向事件类型

    6.4.启动状态下的隐私

    该问题似乎更多是由于代码过滤器级别的 RPA 不匹配造成的。 您之前提到过您正在使用白名单、如果筛选策略设置为 SCAN_FLT_POLICY_WL 、则 RPA 可能会出现问题并滤除定向广播。

    此过滤器策略将检查每个 RPA 是否完全匹配、但由于所生成的 RPA 包含上述不同的随机数据、因此会失败。

    若要允许器件尝试解析 RPA(应该起作用)、它需要过滤器策略为 SCAN_FLT_POLICY_WL_RPA。

    请检查您正在使用的白名单过滤器策略。 对于您的情况、应该是 scan_FLT_POLICY_WL_RPA。 如果不是、请更新并重试。

    更多有关过滤 策略的信息 、请查看 TI BLE5-Stack API 文档:GapScan 结构

    请仔细研究一下、告诉我您找到了什么。

    此致、
    Josh Alderson