Discuz! Board

标题: 有关从机静态连接的过程分析 [打印本页]

作者: LYFMCU    时间: 2019-10-23 17:18
标题: 有关从机静态连接的过程分析
本帖最后由 LYFMCU 于 2019-10-23 17:45 编辑

先上图,在群友的提示下找到了这张图  我先说说个人的理解:1.在初始化的时候通过 sd_ble_opt_set()这个函数    设置BLE选项 形参1是BLE_GAP_OPT_PASSKEY,形参2.就是对应的密码了
2.在建立连接完成以后,等待BLE_GAP_EVT_SEC_PARAMS_REQUEST_这个事件 然后调用 void pairng_request(void)这个函数 这个函数中调用了sd_ble_gap_sec_params_reply函数来对执行 使用GAP安全参数回复。那么问题来了什么情况下才会触发 BLE_GAP_EVT_SEC_PARAMS_REQUEST事件。根据图中可以发现是 SMP_Pairing Request.(但是看例子代码是从机和主机建立以后 通过sd_ble_gap_authenticate这个函数才会触发 SMP_Pairing Request,对于这个和图中介绍的不一样啊
void pairng_request(void)
{
  ble_gap_sec_params_t sec_params;
        uint32_t err_code;
        memset(&sec_params,0,sizeof(ble_gap_sec_params_t));
        sec_params.bond = BOND;
        sec_params.io_caps = IO_CAPS;
        sec_params.mitm = MITM;
        sec_params.max_key_size = MAX_KEY_SIZE;
        sec_params.min_key_size = MIN_KEY_SIZE;
        err_code = sd_ble_gap_sec_params_reply(m_conn_handle,BLE_GAP_SEC_STATUS_SUCCESS,&sec_params,NULL);  //
      APP_ERROR_CHECK(err_code);
}
3.在调用了pairng_request这函数以后从机就会发响应给主机也就是图中SMP Pairing Response了。
4. 当主机收到这个响应以后会弹出输入密码的界面。我猜测应该是sd_ble_gap_sec_params_reply这个函数可以设置主机密码配对的时间等参数吧
5. 接下来就进入了蓝牙配对的第二阶段了    生成短期密钥(Short Term Key,简称STK)6.协议栈会生成一个事件 BLE_GAP_CONN_SEC_UPDATE,。
7.BLE_GAP_EVT_AUTH_STATUS,在这个事件中如果监测到配对失败了,就调用函数关闭连接


作者: admin    时间: 2019-10-24 15:56
1发生连接事件的时候,初始化GAP验证过程。这样就会在连接的时候进行配对认证。
    设置了安全参数的值并不能决定主机和从机需要进行配对认证。需要主机进行配对认证的时候要调用函数sd_ble_gap_authenticate(m_conn_handle,&params)发起GAP链路认证。这个调用位置决定什么时候发起认证,一般是在主机发起连接的时候进行认证申请,因此该函数应该在事件BLE_GAP_EVT_CONNECTED下调用。同时注意安全参数初始化的时候mitm要设置为1,发起的是需要密钥的认证申请。

2发生安全参数应答事件的时候,首先发起配对请求,交换配对信息,同时主机决定配对算法。这时候会调用第一步编写的配对请求pairng_request函数。
3 GAP链路认证状态,如果认证不成功,则断开链接。如果认证成功,这正常连接
作者: LYFMCU    时间: 2019-11-5 18:25
admin 发表于 2019-10-24 15:56
1发生连接事件的时候,初始化GAP验证过程。这样就会在连接的时候进行配对认证。
    设置了安全参数的值并 ...

明白了,感谢您!




欢迎光临 Discuz! Board (http://qfv8.com/) Powered by Discuz! X3