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.

[参考译文] CC2652P7:未通过将器件绑定到 Windows 10

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1507455/cc2652p7-fail-bond-device-to-windows-10

器件型号:CC2652P7

工具/软件:

你好。 我们正在使用 SDK 示例基于 CC2652P7芯片开发器件。 我们有两个相同的 BLE 器件、其 MAC 地址不同。 我们还在使用 Plugin.BLE 库(C#)为 Windows 10开发软件。 我们在 Windows 中遇到了一个问题、即在将一个设备与 PIN 请求配对并断开连接后、Windows 不允许连接到第二个设备。 连接到第二个设备时出现错误:"SMP_PAIRING_FAILED_UNSPECIFIED:encryption failed to start"(SMP_PAIRING_FAILED:无法启动加密)。 我们尝试使用 Windows 的本机工具连接到设备、但遇到了同样的问题。 这可能是什么原因造成的?

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

    您好、

    感谢您联系我们。 为安全起见、您能否确认两个设备都通过监听器日志或 BLE 扫描应用广播不同的地址? 作为测试、您是否可以在正在使用的项目上使用公共地址模式、而不是修改器件的 MAC 地址?

    此致、

    1月

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

    你(们)好 在我们的项目中、我们使用公共地址(它们在运行过程中不会更改)、并且两个器件的地址完全不同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    论坛上的讨论与我的问题类似。 例如:
     
     
     
     
    然而、所提出的解决办法并没有产生预期的结果。 以下是我们尝试的操作:
     
    情形1: 最初、将参数 GAPBOND_KEY_DIST_LIST 设置为:GAPBOND_KEYDIST_MENCKEY | GAPBOND_KEYDIST_MIDKEY | GAPBOND_KEYDIST_MSIGN | GAPBOND_KEYDIST_SENCKEY | GAPBOND_KEYDIST_SIDKEY | GAPBOND_KEYBOND_SIST_KEYSIGND。 在多个器件中、第一个器件始终与 Windows 10成功配对。 但之后、其他设备无法正确连接、并且在尝试配对时因错误而断开连接。 错误为 SMP_PAIRING_FAILED_UNSPECIFIED。
     
    情形2: 从上述列表中删除了字段 GAPBOND_KEYDIST_SIDKEY。 结果与案例1类似。
     
    情形3: 从标志列表(在案例1中进行了介绍)中删除了标志 GAPBOND_KEYDIST_SIDKEY 和 GAPBOND_KEYDIST_MIDKEY。 结果与案例1类似。
     
    情形4: 参数 GAPBOND_KEY_DIST_LIST 被设置为:GAPBOND_KEYDIST_SENCKEY | GAPBOND_KEYDIST_SIDKEY | GAPBOND_KEYDIST_MIDKEY | GAPBOND_KEYDIST_MSIGN。 该序列被指定为文件 gapbondmgr.h 中的默认值 结果与案例1类似。
     
    情形5: 参数 GAPBOND_KEY_DIST_LIST 设置为0。 在本例中、所有器件都成功与 Windows 10配对。
     
    基于此、我想了解这里的关系是什么? 这些参数如何影响 Windows 10上的连接? 删除这些参数将对器件运行有何影响? 我没有找到这些参数的详细说明。 可能只有一个删除的参数会影响该行为。 您能帮助解释一下这种情况吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我相信 Windows 机器对允许通过 BLE 连接的设备有一定的严格要求,这取决于地址模式,目前的配置文件,广告参数,连接参数等

    作为快速测试、您是否可以尝试将地址模式设置为具有公共 ID 的 RPA、以查看是否发生了相同的行为?

    此致、

    1月

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

    您好、

    我使用另一种类型的器件寻址进行了实验(将 ADDRMODE_PUBLIC 替换为 ADDRMODE_RP_WITH_PUBLIT_ID)。 事实上、我所描述的问题在本案中没有得到观察。 但是、我想使用静态器件地址。 因此、我仍想为我的问题找到一个解释。

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

    您好、

    我懂了。 感谢您的澄清。 是否已启用配对? 如果是、哪种配对模式? 您是否在连接时开始配对? 如果没有、那么您可以尝试使用该选项吗?

    此致、

    1月

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

    你(们)好 很抱歉等待。

    是、配对和绑定均已启用。 我将附上更详细的信息

    设置进行比较。

    uint8_t pairMode = GAPBOND_PAIRING_MODE_Initiate; 

    uint8_t MITM = true;

    uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

    uint8_t 绑定 = true;

    uint8_t secureConnection = GAPBOND_SECURE_CONNECTION_ALLOW;

    仅限 Uint8_t 验证配对 = false;

    uint8_t autoSyncWL = false;

    Uint8_t eccReGenPolicy = 0;

    uint8_t KeySize =16;

    uint8_t removeLRUBond = true;

    Uint8_t bondFailAction = GAPBOND_FAIL_Initiate_pairing;

    uint8_t KeyDistList = GAPBOND_KEYDIST_MENCKEY |

    GAPBOND_KEYDIST_MIDKEY | GAPBOND_KEYDIST_MSIGN | GAPBOND_KEYDIST_SENCKEY

    | GAPBOND_KEYDIST_SIDKEY | GAPBOND_KEYDIST_ssign;

    uint8_t eccDebugKeys = false;

    Uint8_t allowDebugKeys = true;

    Uint8_t eraseBondWhileInConn = false;

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

    您好、

    您可以尝试以下设置吗?

    gapBondParams_t gapBondParams ={
       .pairMode            = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ、
       .MITM                = false、
       .ioCap               = GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT、
       .bonding             = true、
       .secureConnection    = GAPBOND_SECURE_CONNECTION_ALLOW、
       .rectalPairingOnly   = false、
       .autoSyncAL          = false、
       .eccReGenPolicy      = 0、
       .KeySize             = 16、
       .removeLRUBond       = false、
       .KeyDistList         = GAPBOND_KEYDIST_CENCKEY | GAPBOND_KEYDIST_CIDKEY | GAPBOND_KEYDIST_CSIGN | GAPBOND_KEYDIST_PENCKEY | GAPBOND_KEYDIST_PIDKEY | GAPBOND_KEYDIST_PSIGN、
       .eccDebugKeys        = false、
       .eraseBondWhileInConn = false、
       .sameIrkAction       = GAPBOND_SAMARE_IRK_UPDATE_Bond_REC
    };

    IVE 在 HOGP 演示中成功地将这些设置与需要配对的 Windows 机器配合使用。

    此致、

    1月

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

    你好。 我已经尝试过您的设置、但结果是相同的。 第一个器件可正确与 Windows 10配对、但当我尝试与第二个器件配对时、它会返回错误 SMP_PAIRING_FAILED_UNSPECIFIED。

    您使用的是哪个版本的 Windows 10? 这还有什么关系呢?

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

    你好。 我们尝试使用标准 Windows 建立 BLE 连接
    10种工具。 结果如下所示。

    1. Windows 10家庭版。 操作系统版本10.0.17134 N/A Build 17134。 生成了
    17134.1.使用 VirtualBox。         [ BLE 工作正常]

    2. Windows 10专业版。 操作系统版本10.0.19042 (不适用)内部版本19042。 生成了
    19042.1466.只是工作站。    [ BLE 工作不正常]

    3、Windows 10专业版。 操作系统版本10.0.18363 N/A 内部版本18363。 生成了
    18363.1256.笔记本电脑。                 [ BLE 工作不正常]

    4、Windows 10专业版。 内部版本15063.0。 使用 VirtualBox。    [ BLE 工作正常]

    5. Windows 10专业版。 Build 19045.5737。 工作站。 [ BLE 工作不正常]

    在使用特定版本的之前、似乎连接工作正常
    Windows 10。 您能否证实这一点?
    该问题是否有任何解决方案(例如、在 TI BLE 栈上
    在 Windows 端或特定的命令序列)?

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

    您好、

    我很抱歉耽误你的时间。 如果我们发现仅基于版本号的行为存在差异、这可能是 Windows 方面的问题。 我想我们可能需要尝试了解 Windows 行为是什么以及他们期望看到什么。

    您能否在 Microsoft 支持论坛上发布此问题以了解可能发生的情况?

    此致、

    1月

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

    你好,我很抱歉长时间的沉默。
    我进行了一些研究、有几个问题我希望得到解答。

    1. 正如预期的那样、Microsoft 的支持非常缓慢、因此我没有收到他们的官方回复。 但是、您之前提到过它对您来说是正确的。 您能否确认器件地址类型设置为 ADDRMODE_PUBLIC? 您使用的是哪个版本的 Windows? 您能否确认它在不同版本的 Windows 10上正常工作、正如我尝试的那样?

    2. 我在与他人的论坛上发现了一个类似的问题。 下面是讨论的链接:
      https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/826255/cc2540-cve-2019-2102---ltk-authentication-problem
      在那里、该人写道、他们在与多个设备配对时遇到问题、就像我一样。 他们引用了 Windows 10事件日志、其中包含错误35、我还在日志中观察到此错误。 日志中对此错误的描述指出:"设备(xx:xx:xx:xx:xx:xx:xx)尝试分发已被配对设备使用的身份解析密钥。 配对被拒绝。 如果您计划与此设备配对、您可能需要先清除现有的配对信息。"
      我在 STM 论坛上发现了类似的问题: https://community.st.com/t5/stm32-mcus-wireless/connect-multiple-identical-ble-devices-to-windows/td p-p / 754140
      最终、我在 Microsoft 上发现了一个类似的问题: https://answers.microsoft.com/de-de/windows/forum/all/bluetooth-le-ger%C3%A4te-mit-gleichen-identity/4a7c4993-1a5f-4308-b6f7-61e4753e1ac0
      通过这些讨论、我推断在某个时候、Windows 10更改了 BLE 设备的连接算法。 我认为 Windows 10以某种方式使用 irk 作为设备唯一性标识符。 由于我使用公共(静态)地址、根据"Gap_DeviceInit"函数内"gap.c"中的源代码、irk 参数等于0、因为在本例中未使用该参数。 因此、我有两个具有不同 MAC 地址但具有相同(零) irk 的设备。 这会导致我将第一个设备与 Windows 10配对的情况、但当我尝试连接第二个设备时、Windows 10读取零 irk 并假定它是第一个(已配对)设备、从而传输不正确的加密密钥。
      首先、我尝试在"GAP_DeviceInit"函数中的 ADDRMODE_PUBLIC 位置强制设置不同的 IRK。 似乎、如果地址类型设置为 ADDRMODE_PUBLIC、但 IRK 不等于0、则可以同时对两个器件进行配对。 然而,这导致了另一个问题。 在广播广播广播广播消息之前、TI BLE 栈似乎使用 IRK 来生成 MAC 地址。 由于 irk 不为零、我看到我的设备已经具有不同的 MAC 地址!
      您能否确认这种行为?
      是否可以在 ADDRMODE_PUBLIC 时以某种方式设置 IRK 而不影响器件的 MAC 地址?
      如何解决此问题?

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

    您好、Nick、

    别担心。 我对延误表示歉意:

    正如预期的那样、Microsoft 的支持非常慢、所以我没有收到他们的正式回复。 但是、您之前提到过它对您来说是正确的。 您能否确认器件地址类型设置为 ADDRMODE_PUBLIC? 您使用的是哪个版本的 Windows? 您能否确认它在不同版本的 Windows 10上正常工作、正如我尝试的那样?

    我公开使用地址模式。 我已经在 Windows 10 Pro (不使用哪个确切版本)、以及 Windows 11 Pro (版本10.0.22631 Build 22631)上进行了测试。

    我在论坛上发现了一个与他人类似的问题。 下面是讨论的链接:
    https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/826255/cc2540-cve-2019-2102---ltk-authentication-problem
    在那里、该人写道、他们在与多个设备配对时遇到问题、就像我一样。 他们引用了 Windows 10事件日志、其中包含错误35、我还在日志中观察到此错误。 日志中对此错误的描述指出:"设备(xx:xx:xx:xx:xx:xx:xx)尝试分发已被配对设备使用的身份解析密钥。 配对被拒绝。 如果您计划与此设备配对、您可能需要先清除现有的配对信息。"
    我在 STM 论坛上发现了类似的问题: https://community.st.com/t5/stm32-mcus-wireless/connect-multiple-identical-ble-devices-to-windows/td p-p / 754140
    最终、我在 Microsoft 上发现了一个类似的问题: https://answers.microsoft.com/de-de/windows/forum/all/bluetooth-le-ger%C3%A4te-mit-gleichen-identity/4a7c4993-1a5f-4308-b6f7-61e4753e1ac0
    通过这些讨论、我推断在某个时候、Windows 10更改了 BLE 设备的连接算法。 我认为 Windows 10以某种方式使用 irk 作为设备唯一性标识符。 由于我使用公共(静态)地址、根据"Gap_DeviceInit"函数内"gap.c"中的源代码、irk 参数等于0、因为在本例中未使用该参数。 因此、我有两个具有不同 MAC 地址但具有相同(零) irk 的设备。 这会导致我将第一个设备与 Windows 10配对的情况、但当我尝试连接第二个设备时、Windows 10读取零 irk 并假定它是第一个(已配对)设备、从而传输不正确的加密密钥。
    首先、我尝试在"GAP_DeviceInit"函数中的 ADDRMODE_PUBLIC 位置强制设置不同的 IRK。 似乎、如果地址类型设置为 ADDRMODE_PUBLIC、但 IRK 不等于0、则可以同时对两个器件进行配对。 然而,这导致了另一个问题。 在广播广播广播广播消息之前、TI BLE 栈似乎使用 IRK 来生成 MAC 地址。 由于 irk 不为零、我看到我的设备已经具有不同的 MAC 地址!
    您能否确认这种行为?
    是否可以在 ADDRMODE_PUBLIC 时以某种方式设置 IRK 而不影响器件的 MAC 地址?
    如何解决此问题?

    感谢您对此进行彻底的研究! 您可以尝试调用 Gap api.Parameter 来配置 device_init Config_Set 调用的 irk 吗? 我认为这应该允许您以任何方式配置 IRK。 您也可以在通过 HCI_EXT_SetBDADDR ()调用 device_init 之前将设备地址设置为所需的任何地址。

    此致、

    1月

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

    你(们)好 感谢您的答复。

    不幸的是,你的建议已经尝试过,他们不起作用。

    根据 Config_Set 栈说明、仅在调用 GAP_DeviceInit 之前才能使用用于更改 ILK 和 HCI_EXT_SetBDADDR 的 Gap BLE-Parameter 函数。

    如果我根据 TI 的建议在 GAP_DeviceInit 之前调用这些函数、则会获得以下行为:

    如果地址类型设置为 ADDRMODE_PUBLIC、则使用 Gap Config_Set 参数写入 IRK 是毫无意义的。 Gap Config_Set 参数函数返回0、表示成功。 如果我在 GAP_DeviceInit 之前使用 osal_SNV_Read (BLE_NVID_irk、KEYLEN、IRKR)来读取它、则 IRK 会被更改。 调用 GAP_DeviceInit 后、此参数再次变为0。 这是因为在 GAP_DeviceInit 内、如果地址类型等于 ADDRMODE_PUBLIC、则栈会强制复位此参数。 因此、这种方法不起作用。

    目前、有三种方法可以帮助实现期望的结果:

    1.在连接时为每个设备提供唯一的 IRK。

    2.使用 GAPBond Mgr_Set 参数将 GAPBOND_KEY_DIST_LIST 值设置为0。

    3.在 Windows 中编辑"regedit "。

     由此产生了几个问题、我想回答这些问题:

    1.能否在 Windows 10中同时将两台设备与 ADDRMODE_PUBLIC 配对? 您能否使用我在上面的消息中提到的命令来比较"regedit"中存储的辐条?

    2.根据 BLE 栈的经验、我想无论寻址类型如何、当设备开始广播时、BLE 栈都使用 MAC 地址和 IRK、执行一些转换、并使用更改的 MAC 地址进行广播。 您能否证实这一点?

    3.继续回答问题2、如果地址类型设置为 ADDRMODE_PUBLIC、是否可以避免这些转换? 例如、在下一个库版本中进行更改?

    4、继续回答问题2、打电话后是否正确

    GAP_DeviceInit 在不影响 MAC 地址的情况下、我是否无法更改 IRK?

    5、我之前提到过、如果我将 GAPBOND_KEY_DIST_LIST 设置为0、则可以避免配对问题。 但是、TI 文档不提供有关密钥的详细信息。 您能否提供有关其影响的详细信息? 它们的用途是什么?

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

    你(们)好
    我在 Windows 上面临着完全相同的问题。
    我想知道在保持公共广播模式的同时、在 Windows 上连接多个 BLE 设备的解决方案是什么?
    谢谢  

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

    您好、

    我进一步查看并找到了以下 Microsoft 资源:

    https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/bluetooth

    https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/bluetooth-prepairing

    https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/bluetooth-swift-pair

    我还找到了以下 Microsoft 支持论坛主题:

    https://learn.microsoft.com/en-us/answers/questions/390918/unable-to-connect-ble-device-with-ble-privacy-enab

    https://learn.microsoft.com/en-us/answers/questions/229207/windows-10-bluetooth-le-stack-privacy-mode-(privat

    在窗口端、不同的地址模式似乎存在一些问题。

    Microsoft 支持部门是否对您的线程做出了响应、并提供了一些值得尝试的内容?

    此致、

    1月

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

    我在我这边取得了小进展。


    我使用的是公共地址、 在 GAP_DeviceInit()之前使用 Gap Config_Set 手动设置 irk 参数(GAP_CONFIG_PARAM_irk、customIrk) 、取消选中外设 irk 密钥分发在 Win 10上工作、使用此设置、我可以连接2个设备并与它们通信。
    很遗憾、这在 Win 11上不起作用。
    要使其在 Win 11上正常工作 、似乎 也应该取消选中 Central irk 密钥分发、但这样做会导致连接到 iOS 时出现问题(如果在 iOS 上发生蓝牙重启、则必须删除设备)、否则重新连接失败、而在 MacOS 上仍正常工作。
    有什么其他想法来解决这个问题?

    可以做的另一件事似乎是切换到 RPA 地址模式、但我在 OAD 固件升级后找到此模式擦除绑定。
    我读了某个地方的 irk 密钥可以检索并保存到另一个 NVS 区域,你有一些源代码来实现这一点吗?
    谢谢  

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

    您好:

    感谢您分享您的进度! 您可以导出和导入密钥以重新建立配对。 我们在用户指南(链接如下)中有一个部分讨论了如何执行此操作:

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gapbondmngr-cc13xx_cc26xx.html#extract-bonding-information

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gapbondmngr-cc13xx_cc26xx.html#import-bonding-information

    此致、

    1月