SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.sydtek.com/
SYD8801密码加密配对
SYD8801作为从机,按照规范说明可发起SecurityReq,然后主机将进入配对流程。
SecurityReq函数定义如下:
uint8_t SecurityReq(uint8_t flag, uint8_t mitm);
其中flag和mitm属于规范中的内容,如下说明:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISNzQDOxkDN5AzMwIDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
这些都是协议栈的内容,一般不用关心,只要记得传入1,0即可。
此篇博客是针对密码加密的情况,所以在配对过程中协议栈会上报一个事件来获取密码:
这里设置密码为123456!
加密成功后会进入上图的“else if(p_evt->evt_code == GAP_EVT_ENC_KEY)”分支!
如下为安卓手机的测试流程截图(注意这里有两次配对流程,第一次确认配对,第二次输入密码):
下面是IOS的配对流程:
这里上测试源代码:
http://download.csdn.net/download/chengdong1314/10237965
安全参数的设置说明
在ble_init协议栈初始化函数中会调用SetSecParams函数初始化安全参数,比如如下代码:
struct smp_pairing_req sec_params;
sec_params.io = IO_NO_INPUT_OUTPUT;
sec_params.oob = OOB_AUTH_NOT_PRESENT;
sec_params.flags = AUTHREQ_BONDING;
sec_params.mitm = 0;
sec_params.max_enc_sz = 16;
sec_params.init_key = 0;
sec_params.rsp_key = (SMP_KEY_MASTER_IDEN |SMP_KEY_ADDR_INFO);
SetSecParams(&sec_params);
其中smp_pairing_req结构体定义如下:
struct smp_pairing_req{
uint8_t io;
uint8_t oob;
uint8_t flags:2;
uint8_t mitm:1;
uint8_t rsvd:5;
uint8_t max_enc_sz;
uint8_t init_key;
uint8_t rsp_key;
};