BLE Central Security Demo Project

示例描述

具有基本扫描/连接和安全功能的DA14585 / 6中央侧项目。主要目的是展示中心侧的基本配对,加密和粘接过程。它将主动配对外围设备,并存储有关连接的绑定信息,或者被动地从外围设备响应安全请求。可以印刷中央和外围侧面上的SDK相关功能以跟踪配对/粘接过程的过程。

Features

  1. Interactive scanner through the UART serial port terminal
  2. Pairing process actively started by central side on connection or passively triggered by security request from peripheral side
  3. 如果绑定信息已经存在,请尝试直接加密连接而不是配对
  4. 如果外围侧缺少粘合密钥,则尝试重新启动配对过程(此功能所需的SDK代码修改)

How security binding works

要学习BLE的基本安全功能,请参阅训练材料来自支持网站。

配对和绑定过程是主设备和从设备之间发生的一系列命令和凭据信息交换,之后两个设备存储用于加密连接的信息。该信息将存储在专用绑定数据库中(BDB短路)供以后使用,并且数据库可以配置为保留SPI Flash或I2C EEPROM。SDK提供了Neccessary API以操纵数据库。

为了使键合过程清除,可以将其作为下面的流程图解释:粘合流程图

似乎要处理了很多消息。只要默认处理程序正确注册,宽恕的大多数都是由现有的SDK函数或BLE堆栈进行照顾user_callback_config.h.。我们真正需要做的(作为主设备)是通过发送债券/加密请求来初始化从设备而非主动发送安全请求或正确响应安全请求的过程。

在此示例中,主设备将首先检查绑定数据库以查看连接的设备是否先前配对。如果是,它将直接发送加密请求并跳过配对过程。否则它将尝试与从设备配对。

例外情况是从设备以某种方式删除存储的主设备的信息,将在调试会话期间触发错误并停止程序。在软件配置部分中介绍了一个解决方法

HW and SW configuration

  • 硬件配置

    • DA14585 Basic / Pro Dev Kit * 2。
    • 外围:

      • 跳线作为标准SPI闪光设置,加上P04 - JL_RXD上的UTX打印额外跳线。
    • 中央:

      • 跳线作为标准SPI闪光设置,加上UTX打印的额外跳线 - JL_RXD和跳线接线jl_txd在p02上。见下面的插图:

      Cenrtal Jumper Placement/Wiring

  • 软件配置

    • 外围:
      • Use original SDK included ble_app_security for peripheral side app.
      • Change.security_request_scenario.在下面user_default_hnd_confuser_config.h更改安全请求行为。def_sec_req_never默认情况下。
        • def_sec_req_never:从站不发送安全请求。
        • def_sec_req_on_connection:从站发送安全请求
    • 中央:
      • Serial Terminal (e.g. TeraTerm) is required for the demo to work. A key input for number is required to choose the device to connect. The settings should be default DA14585 UART connection configuration:
        • 115200波特拉特
        • 8 bit data
        • 没有平等
        • 1停止位
      • 定义/缩小CFG_SECURITY_ACTIVEda1458x_config_basic.h.更改安全行为。当定义时,中央设备将在连接时发送绑定请求,忽略安全请求。未定义时,中央设备将等待Security_Request从外设启动配对过程。
    • 相容性:项目最初创建on SDK6.10.511, some codes in SDK files should be modified for full feature. The source file should work with other SDK file without any modification.

应在SDK文件中修改以下代码以在加密过程中处理缺少的密钥错误,否则连接到先前配对的外围设备,缺少密钥将导致assert_error:

  • 添加了SMP_ERROR_ENC_KEY_MISSING错误的处理gapc_cmp_evt_handler.app_task.c.
静止的在tgapc_cmp_evt_handler.ke_msg_id_tconstmsgid.塑造gapc_cmp_evt.const*帕纳ke_task_id_t.constdest_id.ke_task_id_t.constsrc_id{转变帕纳- >手术{//重启完全的案件gapc_update_params.{如果((帕纳- >地位!=co_error_no_error.))){//当Param UPD请求被拒绝时,申请具体情况callback_args_1.user_app_callbacks.app_on_update_params_rejected帕纳- >地位}别的{callback_args_0.user_app_callbacks.app_on_update_params_complete.}}休息;默认{如果帕纳- >地位!=GAP_ERR_NO_ERROR.{如果帕纳- >地位==.smp_error_enc_key_missing.){callback_args_0.user_extra_app_callbacks.app_on_encrypt_key_missing.}别的{assert_error.0.);//意外错误}}如果app_process_catch_rest_cb.!=空值{app_process_catch_rest_cb.msgid.帕纳dest_id.src_id);}}休息;}返回ke_msg_consumed.);}

Known Limitations

  • 中央应用程序应使用任何BLE地使用任何BLE外围设备,但只需在SDK中使用GLANTED使用BLE_APP_SECURY示例
  • 为了便于关键输入,将仅在一个扫描活动中扫描并打印10个外围设备
  • 在成功配对/加密后,​​演示将在任何一侧手动复位后,不需要操作,以便再次运行演示