微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2540 bonding

cc2540 bonding

时间:10-02 整理:3721RD 点击:

我用开发板作为peripheral,用手机做central。 连接,bonding 过程中有几个问题。

1)如果peripheral之前没有和手机配对成功过。 在手机端会要求输入 密码 来完成认证。我用下面的CB打印 pairing的信息。

static void peripheralPairStateCB(uint16 connHandle, uint8 state, uint8 status)
{
static uint8 bond_status = 0;

if (state == GAPBOND_PAIRING_STATE_STARTED)
{
ComDbgMsg("bond start\n");
}
else if (state == GAPBOND_PAIRING_STATE_COMPLETE)
{
if (status == SUCCESS)
{
ComDbgMsg("Pairing success\n");
}
else
{
ComDbgMsg("Pairing fail\n");
}
}
else if (state == GAPBOND_PAIRING_STATE_BONDED)
{
if (status == SUCCESS)
{
ComDbgMsg("Bonding success\n");
}
}

}

如果手机输入密码正确:先后打印如下信息: bond start

                                      Pairing success.

并没有打印  bonding success , 请问这是为什么呢?

如果手机输入密码错误: 先后打印如下信息: bond start, Pairing fail。我把Pairing fail的status打出来,是 4

错误码:

#define SMP_PAIRING_FAILED_CONFIRM_VALUE 0x04 //!< The confirm value doesn't match the calculated compare value

这个没有什么问题。

2)当下次再用手机和peripheral连接, 手机不再需要输入密码了, peripheral端打印:bonding success, bond start, Pairing fail。 请问这是怎么回事? 我把Pairing fail时的status打印出来,是8,查了一下错误码:

#define SMP_PAIRING_FAILED_UNSPECIFIED 0x08 //!< Pairing failed due to an unspecified reason

那么,这是什么原因导致的Pairing fail呢? 而且手机实际和peripheral是认证成功了的。

杰克,

这个你要空中抓包看看哈,看看配对过程中发生了什么。

关于这个问题,今天抓包试了一下。

1)当ios没有与peripheral配过对。抓包截图如下。

我peripheral的bond设置为wait for request。当ios连上peripheral并且试图读一个属性值时,就弹出输入密码的对话框。

2)当ios与peripheral配过对,将peripheral上的passcode改变,并且擦除peripheral上的所有bond,重复上面操作,当试图读取属性时,并没有弹出输入密码的对话框。抓包如下。

由图可以看到,ios并没有发起配对的流程,而是将自己之前存下来的ltk信息发给peripheral,而peripheral上的ltk信息已经被我擦除了。因此认证失败。

现在我的问题是:如何能够通过peripheral这边的配置,擦除ios上的bond信息。

谢谢解答!

ios与peripheral配过对,复位或重新上电peripheral,就会出现最下图的情况,感觉是peripheral是保存了绑定信息的,但为什么加密不成功?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top