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的限制
摘录于: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和安卓都能够正确识别蓝牙名称:
这时候我把名称改成SYD8821,但是地址不变:
这时候看到安卓已经正确识别出了SYD8821的名称,而IOS手机依旧使用之前的SYD8801,接下来我们用IOS连接一下SYD8801(其实真实名称是SYD8821):
这时候打开广播数据:
这时候看到IOS收到的广播名称确实是SYD8821,但是他却显示为SYD8801,这就是bug了,接下来断线:
可以看到名字恢复正确了!