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:CC2541配对错误

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/904667/cc2541-cc2541-pairing-error

器件型号:CC2541
Thread 中讨论的其他器件: BLE-STACK

大家好、

我们将使用基于 CC2541 TI 芯片的 Laird TiWi-UB1模块。 它配置为支持中央和外设角色。

配对过程使用每侧必须输入的 PIN。 每侧使用 GAPBOND_IO_CAP_KEYBOARD ONLY 的 IO 功能、以便可以执行经过身份验证的配对(两侧均在其密钥中输入)。 我认为这会导致安全模式1、级别3 (经过身份验证和加密)。

当连接发生时、两侧都尝试开始配对过程。 外围设备将发送 SlaveSecurityRequest,而中央设备将尝试开始配对(每一方都按各自的时间发送各自的消息,这似乎不是问题,因为如果已经开始配对过程,则中央设备将忽略 SlaveSecurityRequest)。

 然后、通常会启动配对、并且它们发送引脚、交换密钥和链接受到保护、并且在应用程序中继续进行(我们收到 GAPBOND_Pairing_State_Started 和 GAPBOND_Pairing_State_Complete 事件)。

 我们在连接期间实现了2次超时。 一个30秒计时器在连接时启动、并在配对开始时停止。 当配对开始时(GAPBOND_PAING_STATE_Started 事件)、将启动第2个30秒计时器。 如果其中任一超时到期、则固件将断开连接。

 在我们看到的错误情况下,配对过程似乎没有完成。 我使用了 TI 软件狗(带 BTool)来模拟中央设备。 我已连接到终端设备,但我看不到预期的 SlaveSecurityRequest 来自终端设备。 当我尝试启动与 GAP_Authenticate 的配对时、似乎已成功发送、但30秒后、我收到具有 bleTimeout 状态的 GAP_AuthenticationComplete (以及断开连接、这可能与终端设备超时和断开连接有关)。 我监听了这些器件的 BLE 流量、确实看到配对请求数据包是通过无线方式发送的、但不会发送其他数据包(可能用于保持连接的空数据包除外)。

 我确实注意到、即使在错误情况下、终端设备似乎也会收到 GAPBOND_Pairing_State_Started 事件、因为在与 BTool 连接后、如果我等待20秒、然后使用 GAP_Authenticate 发起配对、链接将不会停止、直到再经过30秒。 这表示在收到 GAPBOND_Pairing_State_started 后第二次启动了30秒。 但配对过程似乎不会继续。

 最后一个故障排除项目是记录 API 函数 GAP_SendSlaveSecurityRequest 的状态结果

和 GAP_Authenticate。 我们看到的未知错误状态来自 GAP_SendSlaveSecurityRequest 函数、在该函数返回0x04。 这似乎不是已记录的退货状态之一:

 

  *@返回     成功、

               * bleIncorrectMode:配置文件角色不正确、

  *             INVALIDPARAMETER、

  *             bleNotConnected、

  *             失败:不可行。

 

我想知道它是否是 MSG_buffer_no_avail,但不确定。 该命令的可能返回值吗? 如果这是有效的返回值,这是否意味着存在内存问题?

仅供参考、代码片段仅用于:

 

 bStatus_t stat = GAP_SendSlaveSecurityRequest (connHandle、authReq);

 LOG_WRn (16、"SlaveSecurityReq stat %d"、stat);//此命令还将状态保存到 NV 内存,以便我们稍后可以检查。

 

GAP_Authenticate 似乎没有返回任何故障、但是返回值始终为0x00。

此致、

车架

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

    您好、Garret、

    您使用的是 BLE-Stack 和 BTool 的哪个版本?

    是否为任何器件设置了 MIPTM?

     GAPBOND_Pairing_State_Complete 事件的状态是什么?

    您能否发布监听器日志?

    您是否尝试使用 GAPBondMgr 命令从 BTool 启动配对?

    我认为0x04是 MSG_BUFFER_NOT AVAIL (在 comdef.h 中定义)、这是正确的。 是否可以尝试增加 Rx/Tx 缓冲区中的数据包数量?

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

    0) 0)请回答 Marie 的问题。

    1)

    - MSG_BUFFER_NOT_AVAIL (0x04):没有 HCI 缓冲区可用(稍后重试)。

    在 GAP_SendSlaveSecurityRequest 的上下文中、这似乎与耗尽的 LL_MAX_NUM_DATA_buffers 有关。 您可以重试呼叫以查看其是否正常工作。

    2)

    连接参数是什么?

    3)

    器件是否仅在外设模式下有效运行? 还有什么可以同时填满 TX 缓冲区?

    您能否尝试启用重叠处理、以便能够在每次连接事件中发送4个以上的数据包;

    //启用重叠处理
    HCI_EXT_OverlappedProcessingCmd (HCI_EXT_ENABLE_OVERRIDGE_processing);
    HCI_EXT_HaltDuringRfCmd (HCI_EXT_HALT_AALT_AALT_AALT_AINE_Rf_DISABLE); 

    4)

    您在哪里获得了组合角色代码(中央+外设)?

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

      您使用的是 BLE-Stack 和 BTool 的哪个版本?

    BLE-STACK 1.4.2.2

    在 PC 端,我实际上不使用 BTool,而是创建了基于 BTool 的 PC 应用程序(较旧版本,不确定是哪个版本)。 PC 应用程序需要发送一些必要的通信来保持连接,因此我们需要一个自定义工具。

    是否为任何器件设置了 MIPTM?

    是的、两个器件都设置了 MIPTM。 绑定设置为 false。

     GAPBOND_Pairing_State_Complete 事件的状态是什么?

    应用程序似乎没有收到此事件。 GAPBOND_Pairing_State_Complete 处理程序将停止我们实现的配对超时计时器、但我们看到该计时器过期并导致断开连接。

    您能否共享监听器日志?

    我们使用 Frontline Sodera BLE 监听器捕获 OTA 数据包。 我已附加日志。 我相信用于查看它的软件是免费的,但我并不是100%确定的。 如果需要、您可以从 http://www.fte.com/support/WPS-download.aspx?demo=Sodera&iid=CS 下载该软件

    您是否尝试使用 GAPBondMgr 命令从 BTool 启动配对?

    是的、我们从 PC 应用程序(即基于 BTool 的应用程序)发送了 GAP_Authenticate 命令、我们的监听器通过无线方式看到了该命令、但未捕获任何响应。 由于固件中的配对超时计时器、链路仍持续30秒、直到断开。

    我认为0x04是 MSG_BUFFER_NOT AVAIL (在 comdef.h 中定义)、这是正确的。 是否可以尝试增加 Rx/Tx 缓冲区中的数据包数量?

    我不确定是指哪个 Rx/Tx 缓冲区? 我认为我们没有明确控制 BLE 堆栈使用的缓冲区。 就堆而言,INT_HEL_LEN 设置为1960,我认为我们不能再增加它了。

     

    1)- MSG_BUFFER_NOT_AVAIL (0x04):没有 HCI 缓冲器可用(稍后重试)。

     

    在 GAP_SendSlaveSecurityRequest 的上下文中、这似乎与耗尽的 LL_MAX_NUM_DATA_buffers 有关。 您可以重试呼叫以查看其是否正常工作。

     

    在后续连接中,会发送相同的命令,但失败时出现相同的错误,因此似乎不会释放缓冲区。 您知道这种情况的发生原因吗? 这些缓冲器是否受到应用程序存储器使用的影响?

     

    2) 2)连接参数是什么?

    最小连接间隔= 28 (35mS)

    最大连接间隔= 28 (35mS)

    从器件延迟= 0

    监控超时= 56 (560ms)

     

    3) 3)器件是否仅在外设模式下有效运行? 还有什么可以同时填满 TX 缓冲区?

     

    是的、此时它应该只处于外设模式。 我不知道还有什么会填满 TX 缓冲区。 它只会广播、然后通过中央设备连接到、并作为启动时的第一个操作开始配对过程。

     

    您能否尝试启用重叠处理、以便能够在每次连接事件中发送4个以上的数据包;

     

    我们可以看到这是否可行。 我相信我们以前曾尝试过使用此功能、但必须将其取出。 我不记得为什么,但启用它可能有一些问题。

     

    4) 4)您在哪里获得了组合角色代码(中央+外设)?

    我并不记得。 我不确定是否有我们参考的 TI 示例,或者我们是否只是从中央示例和外设示例中提取了文件。 在我们的应用程序的运行方式方面、我们通常保持在外设模式、只是进行广播、以便其他器件可以连接到我们。 在特定的时序中,我们将通过调用“GAPentralRole_StartDevice”(使用标志 GAP_PROFILE_CENTRAL | GAP_PROFILE_Broadcaster 调用 GAP_DeviceInit)切换到中央模式,以便我们可以执行扫描。 完成后,我们通过调用“GAPRole_StartDevice”(使用标志 GAP_PROFILE_PERPeripheral 调用 GAP_DeviceInit)切换回外设模式。

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

    e2e.ti.com/.../snifferlog.zip

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

    您好、Garret、

    您说两侧都必须使用 GAPBOND_IO_CAP_KEYBOARD ONLY、但在监听器日志中、启动器使用 IO 功能:KeyboardDisplay。 在这种情况下、使用了另一个版本的 Passkey 条目:启动器显示、响应器输入 Authenti-alled。