科普 | 低功耗蓝牙配对
Legacy paring 在整个配对流程中只做一次认证,而 LESC paring 会做两次认证。LESC 第一阶段认证的原理是,设备 A 和 B 各生成一个随机数,然后认证这个随机数对不对。LESC 第二阶段认证过程是:设备 A 和 B 通过 MacKey 各生成一个检查值,对方确认这个值对不对。 以 LESC Numeric comparison 为例,其第一阶段认证流程如下所示: 我们还是以 LESC Numeric comparison 为例,其第二阶段全工作流程如下所示: 一旦 LTK 生成成功,主机端就可以发起加密连接流程,如下所示: 至此,LESC 连接被 LTK 加密了,后面就可以分发秘密信息了。 2.3 阶段 3:秘密信息分发 °一旦连接加密了,主机和从机之间就可以分发一些秘密信息。如果是 legacy paring,如下秘密信息必须分发: LTK EDIV Rand °同时根据情况,legacy paring 还需分发如下信息: IRK Identity adresss °对于 LESC paring,秘密信息分发是可选,一般有可能分发如下信息: IRK Identity adresss 如下为 legacy paring 可能分发的最多秘密信息的一个例子: 2.4 绑定,重连和加密 °如果配对的两个设备生成了 LTK 及其他秘密信息: 如上所述,如果配对的两个设备生成了 LTK 及其他秘密信息,并且把 LTK 及其他秘密信息保存到 Flash 等永久化存储设备中,那么我们就可以说这两个设备绑定成功。换句话说,paring 和 bonding 是两个不同的概念,paring 更强调认证和密钥生成,而 bonding 更强调密钥保存。一旦两个设备 bonding 成功,那么这两个设备断开再次重连的时候,主机就可以发起加密流程,从而使用 paring 生成的 LTK 对后续的连接进行加密。主机发出加密连接流程如下所示: 这里说明一下,加密连接只能由主机发出,而不能由从机发起。不过从机可以发出加密请求,主机收到从机的加密请求后,可以发起加密连接也可以拒绝其请求。如下为主机同意从机的加密请求的工作流程: 2.5 配对命令一览表 °如下为 SM 中用的 PDU 命令列表: (注:加密连接命令属于 LL 控制命令,所以没有包含在其中) 3. Nordic SDK 配对流程 °如下为 SM 中用的 PDU 命令列表: 那么如何实现这个配对流程呢?也就是说,我该调用哪些 API 去实现配对流程,这些 API 调用的顺序又是如何,具体会产生哪些协议栈事件,该如何处理这些协议栈事件,这就涉及到协议栈的实现。 Nordic 蓝牙协议栈 softdevice 提供详细的工作流程图,以指导用户如何调用 softdevice API 去实现想要的配对流程,详细的配对流程图请参考 infocenter 如下界面: 比如 S132 协议栈,其从机端配对流程图链接为:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___s_e_c___m_s_c.html。 以 legacy paring,从机端显示 passkey,主机端输入 passkey 为例,softdevice 的配对流程图如下所示,链接为: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___b_o_n_d_i_n_g___p_k___p_e_r_i_p_h___m_s_c.html 上述配对流程图把用到的 API,产生的 softdevice 事件,以及 softdevice 事件如何处理,都一一阐明,大家只要按照这个流程图来做,就可以完成期望的配对。更让人省心的是,Nordic SDK 已经把几种典型的配对场景做成了例子,大家可以直接就拿过来用,连上面的配对流程图都不用看,就可以轻松完成自己的配对应用。 Nordic 提供的配对例子有:ble_app_hids_keyboard,ble_app_hrs,ble_app_gls,ble_app_bps,ble_app_bms,ble_app_cscs,ble_app_hrs_nfc_pairing,experimental_ble_app_hrs_nfc_pairing,ble_app_hids_keyboard_pairing_nfc,ble_app_multirole_lesc 等,基本上囊括了蓝牙各种配对情况。 后面会以 ble_app_hrs 为例来详细讲解如何实现低功耗蓝牙配对 4. 配对例程 ble_app_hrs 解读 °nRF5 SDK 把蓝牙配对做成了一个模块: peer_manager,也就是说,所有关于 paring 的工作都由 peer manager 自动完成,用户无需去了解 softdevice 底层 API 的使用方法,大家直接参考 nRF5 SDK 里面的例程就可以完成自己的配对应用开发。 nRF5 SDK 提供的配对例子有:ble_app_hids_keyboard,ble_app_hrs,ble_app_gls,ble_app_bps,ble_app_bms,ble_app_cscs,ble_app_hrs_nfc_pairing,experimental_ble_app_hrs_nfc_pairing,ble_app_hids_keyboard_pairing_nfc,ble_app_multirole_lesc 等,基本上囊括了蓝牙各种配对情况,下面将和大家一起来解读 ble_app_hrs 配对相关代码 如果你对 Nordic nRF5 SDK 和 softdevice 不是很熟的话,建议你先看一下这篇文章:手把手教你开发 BLE 数据透传应用程序 ,以建立 Nordic 开发的一些基础知识,然后再往下看。 跟没有 paring 的 ble 应用代码相比,有 paring 的 ble 应用只多了一个初始化函数:peer_manager_init(),peer_manager_init 实现代码如下所示: peer_manager_init 里面注册了一个回调函数:pm_evt_handler,用来添加一些用户自定义的处理,例子代码 pm_evt_handler 的实现如下所示: 至此,一个 just works 的蓝牙配对例子就算完成了,是不是有点懵?感觉太简单了以至于有点接受不了。没关系,下面我们在这个例子上加一些额外的功能,以加深大家对它的理解。 5. 改变 ble_app_hrs 配对方式 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |