TI中文支持网
TI专业的中文技术问题搜集分享网站

主从一体机pairing failed unspecified reason

Hi:

我遇到一个主从一体机pairing的问题,

我使用最新sdk 4.30,用的是原装例子multi-role,测试某个peripheral的配对,peripheral是主动发起配对模式的;

我设置的配对信息是:

uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;//GAPBOND_PAIRING_MODE_NO_PAIRING;//GAPBOND_PAIRING_MODE_INITIATE;
uint8_t mitm = TRUE;
uint8_t ioCap = DEFAULT_IO_CAPABILITIES;//GAPBOND_IO_CAP_DISPLAY_ONLY;
uint8_t bonding = TRUE;
uint8_t replaceBonds = FALSE;

// Set pairing mode
GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);

// Set authentication requirements
GAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm);

// Set I/O capabilities
GAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

// Set bonding requirements
GAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);

// Set bond list LRU
GAPBondMgr_SetParameter(GAPBOND_LRU_BOND_REPLACEMENT, sizeof(uint8_t), &replaceBonds);

// Register and start Bond Manager
VOID GAPBondMgr_Register(&multi_role_BondMgrCBs);

测试出现连接后,还没有进入pairing start state,直接就pairing failed:错误码是23.unspecified reason;

用wireshark抓包如下图:

请问,这可能是什么原因造成的?

Kevin Qiu1:

改成uint8_t pairMode = GAPBOND_PAIRING_MODE_INITIATE;也不能配对成功吗

user6224880:

回复 Kevin Qiu1:

Hi:

不能的,这里的peripheral 固定是GAPBOND_PAIRING_MODE_INITIATE配对模式,是配对发起者,

配对码是要通过算法算出的;

之前使用simple_central,是可以正常进行配对流程的,现在是multi-role,就不能配对了。

pairing start 状态都没有触发。

Kevin Qiu1:

回复 user6224880:

我刚测试配对成功,默认密码是123456

user6224880:

回复 Kevin Qiu1:

Hi:

请问是用哪个sdk下的Multi-role?

我这要与peripheral 配对,peripheral 是用蓝牙5协议的,配对码是要经过自定义的算法 计算出来的。

我用sdk 4.30 或者sdk 4.10 下的multi role 的例子,蓝牙协议是4.2,连接peripheral 后,发现没有进入pairing start state,直接就pairing failed :unspecified reason。

user6224880:

回复 Kevin Qiu1:

Hi:

我通过wireshark抓包,对比之前ble5stack下的例程simple_central与peripheral 配对流程,

multi-role与peripheral 配对失败在于Pairing Public Key后没有继续收到Peripheral 的Pairing Confirm,以及DHKey Check。

请问,Multi-role端需要设置什么参数,才能获得Peripheral 的pairing confirm以及DHKey Check?

截图:simple_central 与peripheral 配对抓包流程

Kevin Qiu1:

回复 user6224880:

sdk 4.30下的Multi-role,例程要有输入密码的过程,没输入密码不会收到Pairing Confirm

user6224880:

回复 Kevin Qiu1:

请问,在sdk4.30 的multirole 例程下代码,你有做些改动吗? 因为我的peripheral 端一旦配对失败立即断开,

而multi-role 端连接peripheral 后,马上就pairing failed。

Kevin Qiu1:

回复 user6224880:

没有修改过,我用手机连的,CC2640r2f作从机

user6224880:

回复 Kevin Qiu1:

我是测试sdk 4.30 multi-role例程,CC2640R2 作为主机,发现multi-role 配对流程没有进入pairing start state就pairing failed:unspecified reason.
而用sdk 3.40 的multi-role,测试同一个peripheral,连接后直接就paired、bond save success,这流程也是不符合标准的;两个例程中的配对参数都是一样的;
如下:uint32_t passkey = DEFAULT_PASSCODE;//123456uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;uint8_t mitm = TRUE;uint8_t ioCap = DEFAULT_IO_CAPABILITIES;//GAPBOND_IO_CAP_DISPLAY_ONLY;uint8_t bonding = TRUE;GAPBondMgr_SetParameter(GAPBOND_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);// Set pairing modeGAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);// Set authentication requirementsGAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm);// Set I/O capabilitiesGAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);// Set bonding requirementsGAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);
而同样的配对参数,在ble5stack下的simple_central 就是可以与peripheral配对的,配对流程就是收到pairing start state,再输入正确的,计算出来的配对码,就可以触发pairing success,再自动bond success。
不知multi-role 为何配对结果就完全不同?

赞(0)
未经允许不得转载:TI中文支持网 » 主从一体机pairing failed unspecified reason
分享到: 更多 (0)