苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]

SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.sydtek.com/

配对后蓝牙设置界面i标识

 

有这个标示  表示 设备和iPhone进行绑定过程,也就是双方进行密钥交换,数据传输是进行aes加密了的,双方都记住了对方的一些信息,像苹果一般是以随机可解析mac进行交互的,所以在进行配对绑定过程中,苹果会和设备交换地址解析密钥IRK,同时苹果还会把自己真实的公共地址传给设备,这样苹果的mac不管怎么随机都,对方设备都可以通过IRK进行计算。

要出现这个标识那么蓝牙设备的地址必须是 static randomtype,也就是最高位(ble_addr.addr[5])的最高两位必须设置成1,如下:

    /* bluetooth address */
    ble_addr.type = RANDOM_ADDRESS_TYPE;
    ble_addr.addr[0] = 0x55;
    ble_addr.addr[1] = 0x44;
    ble_addr.addr[2] = 0x44;
    ble_addr.addr[3] = 0x44;
    ble_addr.addr[4] = 0x11;
    ble_addr.addr[5] = 0xff;
    SetDevAddr(&ble_addr);

最终蓝牙设置界面如下:

苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]_第1张图片

 

 

 

蓝牙连接参数关于IOS的限制

摘录于:http://blog.csdn.net/xiaoshideyuxiang/article/details/50775699

 

 

和iOS设备的连接参数的设置是有要求的

不符合iOS设备连接参数定义的数值是不被接受也就不会变更了,所以首先请您确认一下您的参数定义是否满足以下IOS设备的要求

•Interval Max * (Slave Latency + 1) <= 2 s

•Interval Max >= 20 ms

•Interval Min + 20 ms <= Interval Max

•Slave Latency <= 4

•ConnSupervisionTimeout <= 6 s

•Interval Max * ( Slave Latency + 1) * 3 < ConnSupervisionTimeout

 

 

 

IOS BLE只以地址作为识别依据

     这是IOS系统的问题,算上一个bug,他是以地址来识别的,不是名称。就是说原本你有一个设备叫做SYD8801,这时候IOS扫描到了(或者之前连接过),后来你用相同地址,但是名字为SYD8821的设备,这时候IOS还是认为这个设备叫做SYD8801,因为在改变名字的过程中地址没变。

    这里做如下测试,原来蓝牙名称叫做SYD8801,IOS和安卓都能够正确识别蓝牙名称:

苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]_第2张图片

这时候我把名称改成SYD8821,但是地址不变:

苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]_第3张图片

这时候看到安卓已经正确识别出了SYD8821的名称,而IOS手机依旧使用之前的SYD8801,接下来我们用IOS连接一下SYD8801(其实真实名称是SYD8821):

苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]_第4张图片

这时候打开广播数据:

苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]_第5张图片

这时候看到IOS收到的广播名称确实是SYD8821,但是他却显示为SYD8801,这就是bug了,接下来断线:

苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]_第6张图片

可以看到名字恢复正确了!

你可能感兴趣的:(蓝牙知识)