首页
产品
解决方案
服务支持
关于
软件库
在线咨询
申请试用
155-2731-8020
产品
许可分析
实现专业软件许可精细化管理
许可优化
高效利用许可资源、回收闲置许可
许可调配
合理管控调配许可资源
终端软件管理
终端软件管理和合规性管理共同保障终端安全
软件商店
多角度管控软件使用权限,保证软件安全性
资产台账
实用、强大的资产台账管理工具
行业分类
汽车行业
船舶行业
网络行业
半导体行业
医疗行业
军工行业
服务支持
服务保障
软件文章
产品教程
技术文档
关于
关于我们
试用产品
合作伙伴
品牌标志
产品
解决方案
服务支持
关于
软件库
产品
许可分析
实现专业软件许可精细化管理
许可优化
高效利用许可资源、回收闲置许可
许可调配
合理管控调配许可资源
终端软件管理
终端软件管理和合规性管理共同保障终端安全
软件商店
多角度管控软件使用权限,保证软件安全性
资产台账
实用、强大的资产台账管理工具
解决方案
汽车行业
船舶行业
网络行业
半导体行业
医疗行业
军工行业
服务支持
服务保障
软件文章
产品教程
技术文档
关于
关于我们
试用产品
合作伙伴
品牌标志
当前位置:服务支持 >
软件文章
>
干货|BLE入门谈:从空中数据收发理解BLE(上)
干货|BLE入门谈:从空中数据收发理解BLE(上)
阅读数 10
点赞 0
BLE是Bluetooth Low Energy的缩写,即低功耗蓝牙,是蓝牙规范的一个子集,从蓝牙4.0版本开始引入。BLE技术成功地适应了物联网时代那些需要少量无线数据传输,并对功耗很敏感的设备的需求。目前已经有为数不少的MCU器件将BLE无线收发电路集成于片内,还保持了MCU的低功耗特性,实现了单芯片的物联网解决方案。
近几年我通过论坛的活动,陆续接触过NXP、ST、TI、ON Semi支持BLE的MCU产品,深感BLE的门槛不低。要设计一个充分发挥BLE优点的作品,需要对这一技术有比较全面的了解。学习理解BLE也需要一个过程,如果每次仅仅是把现有的例子拿来改一改,获得的经验很有限。从什么切入点开始学习比较好?也许不同的人习惯不同。我打算从MCU硬件工程师的角度提供一些参考,就有了这篇文章的构思。
在MCU上使用BLE,目的不外乎发送数据,或者是接收数据。为什么BLE入门难?对比下最简单的:UART、SPI,和稍微复杂一点的I
2
C、CAN这些——它们都是有线连接(废话),发送方对接收方有一个单独(至少在传输时候是独占)的、可靠(正常情况下发出1/0就收到1/0)的数据通道;并且数据传递之前主机先发出请求,或者数据自身就带有请求标志。再看BLE,数据通过无线电波发出,接收者要判断天线收到的电波里面有没有给自己的信号,再从有效的信号里解调出数据……复杂程度已经不可比拟了。虽然芯片上的无线功能模块已经把调制解调工作做了,但它的工作指令仍然是软件下达的。
BLE要用无线电波传递信息,就是将数据编码,调制到射频信号中发射。通俗地讲BLE使用的电波频率是2.4G,也就是和Wi-Fi、无线键盘鼠标, 还有Zigbee、Thread等协议使用的2.4GHz一个概念。那么问题来了,这些信号会不会互相干扰?
首先要明确2.4GHz这个说法指的是一个频段而不是单一频率(全称2.4GHz Industry Science Medicine band),覆盖从2400MHz到2483.5MHz, 是一个用于短距离,无须执照使用的开放频段。还必须明确:
任何带有信息的信号传递都要占用一定的带宽
,不可能是一个单一频率。单一的频率只能是一个永久恒定的正弦信号——它无法携带信息。例如,无线电广播所指的频率是其信号的中心频率。AM(调幅) 639kHz的中国之声,实际信号带宽是它广播音频带宽的2倍。
BLE在这个2.4GHz频段安排了40个信道(channel),中心频率从2402MHz开始,以2MHz为间隔。如下图上半部分:
上图的下半部分是2.4G Wi-Fi的信道占用频带示意,注意Wi-Fi的不同信道频带就很可能存在交叠。Wi-Fi和BLE整体的频率覆盖是重叠的。至于不同的2.4GHz无线设备是否相互干扰,要看实际通信的电波的能量分布:以时间为第一维度,以频率为第二维度看,只要不交叠,就不会产生干扰;但即使存在部分交叠,不严重的干扰并不损害被编码的数据;干扰的可能性总是存在的,各种无线协议还需要校验和重传机制来保证数据完整性。
一个BLE设备,在任一时刻,只能选择40个信道之中的一个进行发射或者监听
。发射或者试图监听的载波频率,就是对应信道的中心频率。
BLE使用的调制方式叫做GFSK,这是FSK调制的一个改进形式。FSK (Frequency Shift Keying) 是一种简单的调制的:就是将输出信号频率从2
N
个频率中根据调制编码进行选择切换,最简单是1-bit调制,称为2-FSK(本文不讨论其它的)如下图所示:
图上红线代表编码数据,蓝线是输出信号波形。注意调制后信号的瞬时频率改变发生在编码值改变的时刻。
FSK调制的一个应用是用于音频电话线路的调制解调器(Modem),用两个方向的数据bit流分别调制两个不同的单音,如下图所示。在线路一端,发出1170Hz表示0, 发出1270Hz表示1;线路另一端发出2025Hz表示0,发出2225Hz表示1.
我写了一段
MATLAB程序
模拟这样的调制波,将生成的wav文件从电脑播放出来就能感受FSK的频谱了。
FS=48000;
Tt=10;
t=0:FS*Tt-1;
f_center=1170; %2125;
f_shift=100;
baud=300;
pe0=2*pi/FS*(f_center-f_shift);
pe1=2*pi/FS*(f_center+f_shift);
s=zeros(1,FS*Tt);
c=s;
p=0;
enc_one=0;
for k=1:FS*Tt
s(k) = 0.9*sin(p);
c(k) = enc_one;
if enc_one
p = p+pe1;
else
p = p+pe0;
end
if mod(k,round(FS/baud))==0
if rand>0.5, enc_one=0; else enc_one=1; end
fprintf('%d',enc_one);
end
end
fprintf('\n');
plot(t,s,t,0.5*c-1.5,'r');
set(gca,'YLim',[-1.6 1]);
wavwrite(s,48000,16,'fsktone.wav');
将模拟的modem FSK (300bits/s) 调制波进行FFT分析画图,中心频率1170Hz和2125Hz的载波用不同颜色表示:
FSK调制的实现简单在于只需要用一个开关信号控制振荡器,让振荡器在两个工作频率之间二选一,输出就是FSK调制波。从上面这个频谱分析图可以看出,FSK输出波形的频率成分能量最集中的那段也有一定跨度,并非只震荡器的“两个频率”。距离中心频率远了之后能量分布逐渐减少,但仍可能干扰别的信号。
BLE使用的GFSK调制,前面加个G字母代表Gaussian, 是让控制振荡器频率的信号波形先通过一个高斯型低通滤波器,让跳变沿有个平缓的过渡。也就是说,GFSK调制器虽然也是两个基本振荡频率,但切换过程是平滑的。
GFSK调制比FSK调制改善了频谱的宽度,也就是频带的利用效率提高了。BLE使用GFSK调制,基本数据速率是1Mbps, 也就是假若持续发射的话一秒可以发送一百万个0或者1. BLE 5.0规范增加了2Mbps选项。
选择40个信道中的一个,通过GFSK,BLE就能将一串0/1发送到空中去。这40个信道中有三个要单独拿出来,编号是37、38、39,它们是专门用于advertising(若译作“广播”有些偏,因为无线电发射本来就是广播行为,接收机都能收到)。其余37个信道用于建立连接之后的通信。
顺便再提一下,BLE与经典蓝牙(常见于蓝牙音箱、耳机)是不能兼容,不能相互通信的。BLE并不是传统蓝牙的简化版本,在信道划分上就有所不同,从数据格式到上层协议都差异明显。现在主流的智能手机是既支持经典蓝牙又支持BLE的,我们在提及蓝牙概念的时候要注意区分。
BLE的数据发送是以数据包(packet)为单位进行的,一个数据包就是一串有格式的0和1,经GFSK调制成某个信道上的载波,再被接收机解调还原(这当中其实还有两个步骤分别叫做whitening和de-whitening,但不改变数据长度和功能,就姑且忽略了)。如下图,一个原始BLE数据包由4段组成:头部是8-bit Preamble,用于同步,然后是32-bit的Access Address (后面再看它的作用),接着才是数据包内容的payload,最后跟着24-bit的CRC校验值。
接收状态的BLE设备需要在同一信道上监听,才有可能收到这个数据包。接收方还需要知道数据包长度才能进行CRC校验,包长度是包含在PDU段内的。包的类型不同,PDU的具体格式也不同。
信道37、38和39用于advertising, 这是BLE从设备用来表示自己存在的三个信道,也是主设备用来扫描和发起连接用的。在这三个信道中,数据包格式如下图:
Advertising信道中的数据包类型有7种,由PDU header字段的PDU Type域决定。包长度信息是header字段的Length域。根据包类型不同,Payload的内容也不同。ADV_IND, ADV_NONCONN_IND, ADV_SCAN_IND和ADV_DIRECT_IND类型的包是从设备按照自己的间隔发出来的,其中AdvA数据字段是自己的地址(手机上的BLE扫描工具看到的就是这个地址),AdvData数据字段提供其它信息比如设备名称、厂商代码等,还可以包括温度传感器数据这样的自定信息。ADV_DIRECT_IND这个类型要特殊一点,它是给指定的主设备发起连接用的,不附加不必要的数据。
ADV_IND和ADV_SCAN_IND类型的包被主设备收到后,主设备可以马上发送SCAN_REQ包,请求扫描这个设备,然后从设备再以SCAN_RSP包回应,提供补充数据(ScanRspData)。
只有当主设备要发起连接时,才会对从设备发送的包(仅ADV_IND和ADV_DIRECT_IND型有效)以CONNECT_REQ包回应。这样,主从设备之间就算建立起了连接,接下来将在另外的37个信道中进行信息交换。
刚提到过的从设备advertising有自己的间隔,这由BLE的API中advInterval参数(就是“隔多长时间广播一次”的意思)决定。但是,如果两个设备的advInterval参数刚好一样,就有可能碰巧每次都同时广播,相互干扰。为了缓解这个问题,BLE规定实际两个advertising事件之间的间隔还要加上一个随机的延迟,如下图:
这里的间隔越短,其它条件不变的话,设备越容易被发现。当然,付出的代价是耗电也增加。前面说了用于advertising的信道有3个,通常主设备也会在这三个信道上轮流监听,因此,一个advertising事件一般来说是在三个信道上分别发送一个数据包。这么做可以防止一个信道被干扰了就无法使用的情况(注意信道37、38和39的频率并不是接近的)。下面是一个示意图,其中38信道上主机进行了一次扫描。
现在我要提醒大家一点:
接收(监听)状态下BLE无线部分也是消耗很多能量的
,没有比发射状态少太多。与片上的CPU耗电相比,BLE的无线功能的确是耗电大户,各厂商会把TX/RX时的电流作为省电能力衡量的重要指标——重点,RX的耗电不能想当然忽略。
作为从设备,在进行advertising事件的时候,才需要把无线发射功能打开。在此外的间歇期间(几十毫秒到几秒)设备可以休眠等待,因此平均功耗可能很低。但是主设备想发现从设备,可就不能长时间睡大觉了,因为从设备只有一瞬间发射,如果主设备那时没有监听,就错过了。但主设备一直处于(三个信道轮流的)监听状态,无线部分的耗电就很大了。通常主设备也会间歇性地监听来查找从设备,也就是持续接收一段时间,再休息一阵的策略。如果从设备为了减少自身功耗,将广播的间隔设得很长,那么主设备要发现它就要付出更多的功耗。
BLE要做到主机和从机的功耗都小,其要点,我概括为“
在事先约定的时间地点碰头
”。上面所描述的从机advertising阶段,主机因为无法得知从机在哪个时刻在三个信道中的哪一个广播,不得不采取守株待兔的办法,所以主机耗电不能像从机那样低。但是两者建立BLE连接之后就不一样了,现在回顾主机为了建立连接向从机发送的CONNECT_REQ包的Payload内容:
除了主机和从机的BLE地址之外,LLData部分包含了许多字段:
AA: Access Address, 用于数据信道数据包中
CRCInit: 随机生成的CRC初始值
WinSize: Connection Event Transmit Window Size, 以1.25ms为单位
WinOffset: 同上,Transmit Window的时间偏移量
Interval: Connection Event的间隔时间
Latency: Slave Latency参数
Timeout: connSupervisionTimeout参数,以10ms为单位
ChM: 标记要使用的数据信道
Hop: hopIncrement, 是跳频算法的参数
SCA: 主机的sleep时钟误差参数
由以上这些字段决定了BLE连接的初始参数。从机如何知道主机会在什么时候,在那个信道发送数据包?请看下面这个图:
实际上,主机和丛机约定了一个未来的
时间窗口
,主机会在那个时间窗口内发送第一个数据包,从机需要保持监听。因为双方约定了一个时间窗口,无线电RX状态的时间就可以缩短了,就控制了功耗。主机发送数据包之后,转到接收状态,丛机接收到主机的数据包,也会很快回应一个数据包,这两次双向的数据交互时间是可以预计的,不存在无用的RX等待状态。然后,主机在一个连接间隔(connInterval)之后的时刻再次发出数据包,也就是新的connection事件开始,不过通信信道由
自适应跳频算法
重新选择。上图只画了最简单的状态,实际一个connection事件可以有多次的双向数据包交互。
把从机和主机并排起来看:
上图还展示了BLE连接状态的一个特性: slave latency, 即允许从机不响应一些(可能是没有收到的)数据包,而连接暂时能保持,不断掉。因为双方的时间间隔约定还在,后续只要成功交互就可以恢复通信。
BLE连接状态下的数据包格式本文就不列出了,因为涉及到Link Layer层的许多内容,要深入了解的朋友可以参阅蓝牙Core specification 4.0以后版本文档。
本文的目的在于给大家一个BLE的底层是怎么工作的一个整体印象,以及认识到它是怎样实现低功耗的无线数据交互的。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
返回上级列表
联系我们
,获取更多内容
上一篇:
一文教你用优化算法求解工程问题及仿真对比
下一篇:
LabVIEW技能加持:汽车行业复杂测试实现方案
相关文章
迈向高级机械工程师的快捷路径(精髓在最后)
阅读量 619
点赞 17
AUTOCAD
2020Q4全球企业外部OEM存储市场
收
入
下滑
解
析
阅读量 745
点赞 35
AUTOCAD
AutoCAD
中
的光顺曲线命令介绍
阅读量 728
点赞 11
AUTOCAD
SaaS平台软件应用架构:助力企业
数
字化转型
阅读量 679
点赞 57
AUTOCAD
PCIe用户逻辑模块(接
收
)仿真分析与
理
解
阅读量 714
点赞 56
AUTOCAD
干
货
|再
谈
周期折减系
数
对结构设计的影响
阅读量 166
点赞 0
AUTOCAD
审计报告
解
读:如何
从
数
据
中
发
现管
理
漏洞?
阅读量 212
点赞 0
AUTOCAD
申请兑换
入
门
详
解
与实例>书籍
阅读量 78
点赞 0
AUTOCAD
IT部
门
福音!格
发
优化软件许可使用效率
阅读量 654
点赞 0
AUTOCAD
PROE/CREO产品设计
干
货
:
理
发
剪结构设计评审要点
阅读量 169
点赞 0
AUTOCAD
从
策略到实践:高效实施软件许可证采购与分配
阅读量 385
点赞 0
AUTOCAD
干
熄焦原
理
及设备图文并茂全
解
析
阅读量 2116
点赞 93
AUTOCAD
钣金件制造系统研
发
进展
阅读量 676
点赞 42
AUTOCAD
ANSYS视频图文教程合集
阅读量 64
点赞 0
AUTOCAD
干
货
分享:AutoCAD 2018快速
入
门
教程(高清排序版)
阅读量 976
点赞 97
AUTOCAD
干
熄焦预存室及除尘高温料位检测装置改进研究
阅读量 780
点赞 66
AUTOCAD
技术文档
格发
许可分析
软件管理系统宣传
软件实现正版化
-格发最专业的解决方案
企业
软件资产
和
License管理
遇到的问题和解决办法
UG许可
资源优化解决方案-
许可不够用
,解决UG盗版,
UG许可
监控,UG律师函
公司使用
盗版SolidWorks
被发函,
solidworks盗版
检测,solidworks 被软件公司查到用盗版,SolidWork价格减少
Teamcenter
无法创建多余账号怎么办?
如何解决
许可不足
问题以提升许可利用率
CATIA
的
license资源
管理-gofar许可优化效果
企业如何进行
合规性管理
收到西门子发来的
UG告知函
怎么办?
Solidworks盗版
被查如何防范?厂商是怎么样查到公司在用盗版,有什么方法可以核实真假?……
热门文章
电磁场数值仿真技术及天线设计应用全解析
未来几年影响许可证管理的三大趋势
PTC宣布Creo 9.0正式发布:新功能解析
Python方程组求解:获取雅克比矩阵和海塞矩阵的方法
电子电路仿真软件对比:多款工具性能与适用场景分析
Franc3D与ABAQUS联合仿真角裂纹扩展分析
微信扫一扫,欢迎咨询~
联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
发现
许可分析
许可优化
许可调配
终端软件管理
方案
汽车行业
船舶行业
网络行业
半导体行业
服务
服务保障
软件文章
产品教程
技术文档
关于
关于我们
试用产品
合作伙伴
品牌标志
隐私声明
|
使用条款
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
鲁ICP备14018425号-1
鄂公网安备42011302000881号
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式
155-2731-8020
预留信息,一起解决您的问题
*
 姓名:
*
 手机:
*
 公司名称:
姓名不为空
手机不正确
公司不为空