蓝牙4.0技术分析1-广播者角色
第1章 BlueTooth Roles-Broadcaster
1.1 广播类型
1) Connectable Undirected Event Type(可连接无定向广播)
2) Connectable Directed Event Type(可连接定向广播)
3) Scannable Undirected Event Type(可扫描无定向广播)
4) Non-connectable Undirected Event Type(不可连接无定向广播)
广播类型定位在(include/gap.h),具体定义的类型如下:
GAP_ADTYPE_ADV_IND //!< Connectable undirected advertisement
GAP_ADTYPE_ADV_HDC_DIRECT_IND //!< Connectable high duty cycledirected advertisement
GAP_ADTYPE_ADV_SCAN_IND //!<Scannable undirected advertisement
GAP_ADTYPE_ADV_NONCONN_IND //!<Non-Connectable undirected advertisement
GAP_ADTYPE_ADV_LDC_DIRECT_IND //!<Connectable low duty cycle directed advertisement
其中定向可连接广播类型分成两种方式(High duty cycle和Low duty cycle)
GAPRole_SetParameter(GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &advType );
1.1.1 Connectable Undirected Event Type
Link Layer(链接层)需在同一个广播信道上监听来自“扫描者”或“发起者”的请求。
在一个广播事件中的两个相邻广播包(ADV_IND PDU)的时间间距小于等于10ms,广播状态将在advertising interval内完成状态的关闭。
一个没有扫描请求和连接请求的广播事件(使用所有广播信道37、38、39)如下图所示:
注意:广播的间隔时间一般不会是严格的10ms,系统会产生一个随机的时间值,加上10ms,防止冲突。
一个包含扫描请求的广播事件(使用所有广播信道37、38、39),扫描请求在广播事件的中间,如下图所示:
一个包含扫描请求的广播事件(使用所有广播信道37、38、39),扫描请求在广播事件的末尾,如下图所示:
1.1.2 Connectable Directed Event Type
当“广播者”发送一个广播包(ADV_DIRECT_IND PDU)后,它将在同一信道上监听连接请求包(CONNECT_REQPDU)。任何扫描包将被忽略,也就是说不接受扫描请求。
在同一个广播信道上的两个相邻广播包的时间间隔小于等于3.75ms,可见该类型的广播速度比可连接非定向广播包(<=30ms)要快很多。
当进入广播状态后,Link Layer(链接层)会在1.28s内退出广播状态。
一个没有连接请求(CONNECT_REQ PDU),含有5个广播包(ADV_DIRECT_IND PDU)的两个广播事件序列图,如下所示:
应用场合:可连接的定向广播类型用于期望快速建立连接的场合(如:重连)。
1.1.3 Scannable Undirected Event Type
可扫描非定向广播包(ADV_SCAN_IND PDU),允许一个“扫描者”回应一个扫描请求包(SAN_REQ PDU)来向“广播者”获取附加信息(SCAN_RSP)。
Link Layer(链接层)将在同一个信道上监控来自扫描者的请求。
在一个广播事件中的两个相邻广播包(ADV_IND PDU)的时间间距小于等于10ms,广播状态将在advertising interval内完成状态的关闭。
有扫描请求的包序列示意如下,其中一个扫描请求在中间,另一个扫描请求在末尾:(示意图)
1.1.4 Non-connectable Undirected Event Type
不可连接非定向广播包(ADV_NONCONNN_IND PDU),该广播类型不接受任何请求包(包含:扫描请求和连接请求),“扫描者”可接收来自“广播者”的广播包。
在一个广播事件中的两个相邻广播包(ADV_IND PDU)的时间间距小于等于10ms,广播状态将在advertising interval内完成状态的关闭。
1.2 广播相关参数说明
1.2.1 Advertising interval
首先介绍一下Advertising interval(广播时间间隔):在所有的非定向广播事件中,两个相邻的广播事件的时间间隔(T_advEvent)为:
T_AdvEvent = advInterval + advDelay
advDelay是Link Layer(链接层)分配的一个伪随机数,它的范围为0-10ms。
Advertising_Interval_Min Size:2 Bytes
值 |
参数描述 |
N = 0xXXXX |
非定向广播包的最小广播间隔。 范围:0x0020-0x4000 默认值:N = 0x0800(1.28秒) Time = N * 0.625ms 时间范围:20ms-10.24s |
Advertising_Interval_Max Size:2 Bytes
值 |
参数描述 |
N = 0xXXXX |
非定向广播包的最大广播间隔。 范围:0x0020-0x4000 默认值:N = 0x0800(1.28秒) Time = N * 0.625ms 时间范围:20ms-10.24s |
1.2.2 Advertising_Type
值 |
参数描述 |
0x00 |
Connectable undirected advertising (ADV_IND)(default) |
0x01 |
Connectable directed advertising (ADV_DIRECT_IND) |
0x02 |
Scannable undirected advertising (ADV_SCAN_IND) |
0x03 |
Non connectable undirected advertising (ADV_NONCONN_IND) |
0x04 – 0xFF |
Reserved for future use |
广播类型决定了回应包类型,下表列出各种类型下的扫描请求和连接请求的对照关系:
广播类型 |
广播包(PDU) |
回应包(PDU) |
|
扫描请求(SCNA_REQ) |
连接请求(CONNECT_REQ) |
||
可连接非定向广播 |
ADV_IND |
YES |
YES |
可连接定向广播 |
ADV_DIRECT_IND |
NO |
YES |
不可连接非定向广播 |
ADV_NOCONN_IND |
NO |
NO |
可扫描非定向广播 |
ADV_SCAN_IND |
YES |
NO |
1.2.3 Own_Address_Type
值 |
参数描述 |
0x00 |
Public Device Address (default) |
0x01 |
Random Device Address |
0x02 – 0xFF |
Reserved for future use |
Public Device Address:公有设备地址是设备所特有的并且是不可改变的,类似网络设备的MAC地址,它的长度为48位。这个地址是从IEEE注册当局获取的,由2个部分组成:
Company_assigned部分:低地址部分由24位组成。
Company_assigned (24位) |
Company_id (24位) |
Ramdom Device Address:随机设备地址(私有设备地址),它也是48位
hash (24位) |
random (24位) |
1.2.4 Direct_Address_Type,
1.2.5 Direct_Address,
定向对象的设备地址(根据类型设置,可以是公有设备地址或私有设备地址)
1.2.6 Advertising_Channel_Map
Advertising_Channel_Map Size:1 Bytes
值 |
参数描述 |
00000000b |
保留 |
xxxxxxx1b |
允许使用37信道 |
xxxxxx1xb |
允许使用38信道 |
xxxxx1xxb |
允许使用39信道 |
00000111b |
Default (允许所有广播信道) |
1.2.7 Advertising_Filter_Policy
Advertising_Filter_Policy Size:1 Bytes
值 |
参数描述 |
0x00 |
允许任何扫描请求,允许任何连接请求(default) |
0x01 |
只允许来自白名单的扫描请求,允许任何连接请求 |
0x02 |
允许任何扫描请求,只允许来自白名单的连接请求 |
0x03 |
只允许来自白名单的扫描和连接请求 |
0x04 – 0xFF |
保留 |
1.2.8 Advertising Data
1.2.9 Reponse Data
扫描请求回应的附加数据,它的长度最多不超过31个字节(0-31),数据包的格式同Advertising Data。
1.3 广播流程(Undirected Advertising)
1.3.1 无定向广播流程(Undirected Advertising)
1.3.2 定向广播
1.4 TI CC254X下的实现
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA,sizeof ( scanRspData ), scanRspData );
GAPRole_SetParameter( GAPROLE_ADVERT_DATA,sizeof( advertData ), advertData );
GAPRole_SetParameter(GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &advType );
GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MAX, advInt );
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
蓝牙4.0技术分析1-广播者角色相关推荐
- iOS开发之蓝牙4.0技术完美实现
CSDN博客 BaiHuaXiu123 博客专家 iOS开发之蓝牙4.0技术完美实现 发表于2016/5/1 21:13:06 8034人阅读 前言 前端时间,同学在做项目过程中遇到 ...
- 大型停车场智慧导航系统-运用蓝牙5.0技术实现室内车位导航
当前随着各政策以及实际需求的增加,室内定位导航技术在大型公共场所如政务中心.商场.车站中的应用越来越多,人们对智慧停车场的需求也日益凸显出来. 地下停车场因为在建筑内无法获取GPS定位,再加上规划和行 ...
- 蓝牙5.0技术定位的优势以及影响
据网络数据,物联网用户数将会超过手机用户数,在未来有可能会达到万亿.IDC企业系统高级副总裁Vernon Turner预测:到2025年,不仅将会有800亿台设备连接到物联网,而且每分钟还会增加152 ...
- DUQ U2.0 技术分析
virustracker · 2015/06/12 14:34 from:https://securelist.com/files/2015/06/The_Mystery_of_Duqu_2_0_a_ ...
- 蓝牙BLE5.0扩展广播介绍
蓝牙BLE5.0扩展广播介绍 前言 广播包基本介绍 扩展广播包结构 总结 author :cbk 前言 在2016年12月更新的蓝牙Core_v5.0中,更新了LE Advertising Exten ...
- 蓝牙4.0和5.0的区别
一.蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低功耗蓝牙技术,将三种规范合而为一.它继承了蓝牙技术在无线连接上的固有优势 ...
- 三星android5.0 蓝牙,蓝牙5.0手机有哪些 蓝牙5.0和4.2的区别是什么【区别介绍】
蓝牙5.0手机有哪些和4.2的区别是什么?相信小伙伴们一定很好奇,下面小编为大家带来了蓝牙5.0详细介绍说明,感兴趣的小伙伴赶紧跟着小编一起来看看吧. 今年3月,三星推出了最新的旗舰机GalaxyS8 ...
- iOS 蓝牙4.0开发
1. 什么是蓝牙 4.0 ? 全新的蓝牙4.0技术并不是一种技术,而是由传统蓝牙,高速蓝牙和低功耗蓝牙合而为一.并且这三种蓝牙可以组合使用,也可以单独使用.其中,低功耗蓝牙即BLE是蓝牙4.0的核 ...
- 一款强大的芯片nRF52840及利用蓝牙5.0实现数据远程采集
一.nRF52840蓝牙芯片简介 自从nordic在2018年强势推出nRF52840这颗重磅级芯片后,蓝牙5.0技术开始在业界流行起来,随后蓝牙5.0技术开始成为了各大品牌的旗舰手机标配功能. 1. ...
最新文章
- 像证券交易员一样思考_2.理解绝招
- 为什么非阻塞io性能更好_提高性能:流的非阻塞处理
- 算法题:输入aaaabbbcccccc输出a4b3c6。
- Java应用性能调优工具介绍及实践
- 计算机网络(十三)-数据链路层-动态分配信道
- 【使用注意】Boolean是final类型,值初始化后不能被更改
- HttpHandler和ashx使用Session 出现未初始化异常
- Bailian3250 字母重排【排序】
- python 2.7.9 安装beautifulsoup4
- python threadPool 与 multiprocessing.Pool
- Node.js相关——CommonJS规范
- MySQL 脱敏函数
- HG30A-3多用表校验仪
- 洛谷P1359租用游艇
- 软件工程微信平台作业总结
- java项目常用的工具类
- 教程1-简易飞机大战-第二节
- Note For Linux By Jes(19)-Linux 备份策略
- 《论文写作》思考与总结
- 学Python有什么好处?Python有哪些优点和特征?
热门文章
- 不懂卷积神经网络?别怕,看完这几张萌图你就明白了
- 什么是 CAS 机制?
- 主机到中继地址的发包路径
- python中color的用法_python - 如何为热图(使用plt.pcolor创建)中的NaN单元分配特定的颜色或图案,并使其显示在颜色栏中(图colorbar) - 堆栈内存溢出...
- html中基本选择器的优先级,CSS_CSS中的各种选择器与样式优先级小结,优先级:由高到低(从上到下)- phpStudy...
- java 更新ui_你怎么解决Android开发中更新UI报错的异常吗-百度经验
- 9300万美元投资涌入 新加坡成亚太最大数据中心
- 四层交换机是什么?有什么用?与二层/三层交换机有何区别?
- java swing鼠标事件监听_java swing鼠标监听问题
- 成功解决ModuleNotFoundError: No module named ‘sklearn.grid_search‘