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。
此致、
车架