6626作主机时地址相关问题

wen.shangrong · 7次点击 · 2天前

8.2.4 关于作主机时地址相关问题

6626协议栈中,会同时维护两类地址,分别是Public地址和Random地址

uint16_t len = 0;
uint8_t addr[6] = {0xA0, 0x01, 0x02, 0x03, 0x04, 0xc5};
uint8_t  addr2[6] = {0xA8, 0x01, 0x02, 0x03, 0x04, 0xc8};

ob_gap_addr_set(OB_ADV_ADDR_TYPE_RANDOM, addr); //设置Random地址
ob_gap_addr_set(OB_ADV_ADDR_TYPE_PUBLIC, addr2); //设置Public地址

主机发起连接时,连接参数中,如下代码第2行,如果设置为OB_ADV_ADDR_TYPE_RANDOM,那就选用上面设置的随机地址作为连接地址。 如果设置OB_ADV_ADDR_TYPE_PUBLIC 那么将会选用之前设定的Public地址。

 ob_conn_param_t conn_param = {
OB_ADV_ADDR_TYPE_RANDOM,//第2行
OB_SCAN_FILTER_BASIC_UNFILTER,
peer_addr,
&conn_phy,
&conn_phy,
NULL,
};
uint32_t res = ob_gap_connect(&conn_param);//开始连接


特别注意:

(1)当前选用配置为随机地址时, 最高字节 Addr[5] 的最高2bit尽量保证为b'11xx_xxxx,千万避免设为b'10xx_xxxx开头。

image.png

如上面示例的addr[5]为0xC5, 二进制为 b'1100_0101 符合

假如设置为addr[5]=0xA5,则是不合要求的。当不符合要求时,连接的对方如苹果手机可能会主动断开连接。

以上说的Addr[5],在NRF Connect 或者其它调试工具地址显示中,通常会排在最前面(高位在前)

(2)当Public地址时,则Addr 组成没有过多要求。

image.png

(3)扫描时的地址选择,和上面连接的一样规则。


(4)主端的地址设置作用

-主端扫描时,当发出扫描请求包时,对方可以知道是哪个设备发的扫描请求包。然后要不要回SCAN_RESP

-主要在连接时,可以让对方知道是哪个主设备来连接了。

-当广播端/从端启用白名单策略时,可以依据主端的地来决定过滤与否。

被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站