BLE中央安全演示项目
例子描述
一个DA14585/6中心侧项目,具有基本的扫描/连接和安全功能。主要目的是演示中心端的基本配对、加密和绑定过程。它主动地与外围设备配对并在连接时存储绑定信息,或者被动地响应外围设备的安全请求。无可打印中心侧和外围侧SDK相关功能,跟踪配对/绑定过程。
特征
- 通过UART串行端口终端交互式扫描仪
- 配对过程由中心侧主动启动,或者通过来自外设侧的安全请求被动地触发
- 如果绑定信息已经存在,则尝试直接加密连接而不是配对
- 如果外围设备侧缺少以前绑定的键,则尝试重新启动配对过程(此特性需要修改SDK代码)
安全绑定有效程度如何
了解BLE的基本安全特性,请参阅培训材料从支持网站。
配对和绑定过程是发生在主设备和从设备之间的一系列命令和凭据信息交换过程,在此过程中,主设备和从设备存储用于加密连接的信息。该信息将存储在一个专用的绑定数据库(简称bdb)中以供以后使用,数据库可以配置为保留在SPI flash或I2C EEPROM上。SDK提供了操作数据库所需的api。
为使粘接过程更加清晰,可将其解释为如下流程图:
似乎有很多信息要处理。Lucily他们中的大多数已经被现有的SDK函数或BLE堆栈照顾,只要默认处理程序被正确注册user_callback_config.h.我们真正需要做的是(作为主设备)在从设备被配置为不主动发送安全请求或正确响应安全请求时,通过发送bond/encrypt请求来初始化进程。
在本例中,主设备将首先检查bonding数据库,以查看连接的设备之前是否已经配对。如果是,它将直接发送加密请求并跳过配对过程。否则,它将尝试与从设备配对。
异常情况是,从设备以某种方式删除了主设备的存储信息,一个错误将被触发,并在调试会话期间停止程序。在软件配置部分介绍了一种解决方案
HW和SW配置
硬件配置
- DA14585 Basic/Pro开发套件* 2。
周边:
- 跳线作为标准SPI flash设置,加上一个额外的跳线用于P04 - JL_RxD上的UTX打印。
中心:
- 跳线作为标准SPI flash设置,加上额外的跳线用于UTX打印在P04 - JL_RxD上,跳线用于JL_TxD P02上.请参见下面的说明:
软件配置
- 周边:
- 使用原始SDK包括外设侧应用的BLE_APP_SECURY。
- 改变.security_request_scenario下user_default_hnd_conf.在user_config.h.更改安全请求行为。默认DEF_SEC_REQ_NEVER。
- DEF_SEC_REQ_NEVER:从站不发送安全请求。
- DEF_SEC_REQ_ON_CONNECTION:从端在连接上发送安全请求
- 中心:
- DEMO需要串行端子(例如TERATERM)进行工作。需要一个键输入来选择要连接的设备。设置应默认为DA14585 UART连接配置:
- 115200波特率
- 8位数据
- 没有奇偶校验
- 1停止位
- 定义/未赋值cfg_security_active.在da1458x_config_basic.h改变安全行为。定义后,中心设备将在连接时发送绑定请求,忽略安全请求。当未定义时,中心设备将等待外设的security_request来启动配对进程。
- DEMO需要串行端子(例如TERATERM)进行工作。需要一个键输入来选择要连接的设备。设置应默认为DA14585 UART连接配置:
- compatiblity:该项目最初在SDK6.10.511上创建,应修改SDK文件中的某些代码以获取完整功能。源文件应使用其他SDK文件,而无需任何修改。
- 周边:
以下代码应该在SDK文件中修改,以处理在加密过程中丢失密钥的错误,否则连接到一个之前配对的丢失密钥的外设将导致ASSERT_ERROR:
- 增加了SMP_ERROR_ENC_KEY_MISSING错误的处理gapc_cmp_evt_handler在app_task.c
静态㈡gapc_cmp_evt_handler(ke_msg_id_t.常量是否,结构体gapc_cmp_evt常量*参数,ke_task_id_t常量dest_id,ke_task_id_t常量src_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(是否,参数,dest_id,src_id.);}}打破;}返回(KE_MSG_CONSUMED);}
已知的限制
- 从理论上讲,中心应用程序应该可以与任何BLE外设一起工作,但只能与SDK中的ble_app_security示例一起工作
- 为了方便按键输入,只有10个外设将被扫描和打印在一个扫描活动
- 在配对/加密成功后,演示程序将不采取任何行动,需要手动重置任何一方才能再次运行演示程序
版本日期:
27/11/2018
版本号:
1.0