出品 | 智东西公开课
讲师 | 蔡秉铨 杰理科技嵌入式部门经理
提醒 | 点击上方蓝字关注我们,并回复关键词
IoT芯片02
,即可获取课件。
导读:
8月21日,杰理科技嵌入式部门经理蔡秉铨在智东西公开课进行了一场直播讲解,主题为《基于低功耗蓝牙芯片的物联网应用创新》。
在本次讲解中,蔡秉铨老师从蓝牙技术的演进、低功耗蓝牙芯片的关键指标要求及实现挑战等方面,结合杰理科技AC630N系列低功耗蓝牙芯片特性,及其物联网应用开发实践展开系统讲解。
本文为此次课程的图文整理:
大家晚上好,很高兴能有机会为大家做这期内容的分享,我是杰理科技嵌入式部门经理蔡秉铨,现在主要负责蓝牙射频技术的研发以及推广工作。今天分享的内容主要包括以下4个部分:
1、蓝牙技术的演进历程
2、低功耗蓝牙芯片的关键指标要求与实现挑战
3、低功耗蓝牙芯片AC630N特性详解
4、基于AC630N的物联网应用开发实践
蓝牙技术的演进历程
真正意义上的低功耗蓝牙是从4.0版本开始诞生的。下面介绍下经典蓝牙,它在蓝牙音频产品上已经发挥得非常好,现在市面上看到的蓝牙耳机、音箱,就是经典蓝牙的成功应用。蓝牙版本之所以还在不断更新,主要目的是为了满足更多的应用场景。对比同样是2.4G的其他技术,蓝牙通过不断改进弥补自己在应用上的缺陷,与它名字的由来及设计初衷一样,逐渐成为无线协议的一个统一者,大家有兴趣可以去了解一下logo以及名字的来源。(编者加注:https://www.logonews.cn/bluetooth-brand-story.html)
接下来看下蓝牙的现状,蓝牙4.0-4.1/2,主要是为了构建和完善一个适合低功耗的互联网应用。这里主要提下mesh的应用,更是对市面上各种厂商定制的私有mesh做了统一和规范。万物互联,首要解决的第一个问题是通讯协议的规范,并不是在mesh诞生之前没有这个概念,而是其进一步完善和规范通讯协议。
之后的蓝牙5.0版本,我认为对低功耗蓝牙赋予了可伸缩能力。我们都知道吞吐量、距离其实是属于矛盾的两端,这样的设计可以让蓝牙产品能够覆盖更多的场景。比如短距离但具有高的吞吐量,或者远距离但吞吐量会降低的情况,因此满足了开发者的不同的需求。后面的5.1版本更是在前述的物联网布局的前提下,增加了一个更加精准的定位功能,并不是之前的版本无法实现定位,而是精度的一个提升。很多传统的厂商使用4.0、4.1/2去进行定位,然后通过信号强度方法配合算法也能实现定位,因此这里主要是精准度的提升。5.2版本更是对之前一个现象级爆款的TVS蓝牙耳机进行了规范和扩展,使得蓝牙音频不只限制在一对或者两对耳机之间,而是打破了这种约束,使其可以在更多的设备之间去分享。
接着看下第一个低功耗蓝牙的扩展是如何实现?从上面的图中可以看到是从自上而下的进行了一次更新,也包括硬件的更新。这意味着经典蓝牙和低功耗蓝牙其实是属于蓝牙的两种不同模式,互相独立,并且是不能互相连接。
通过上图,我们可以看到低功耗蓝牙和传统蓝牙的优缺点的对比。从数据的特点、连接速度、连接数量,传输速率、安全加密等级等,都能看到一些差异,相对于经典蓝牙,低功耗蓝牙更适用于一些数据量不高的应用场景,并且连接速度有所提升 ,连接数量更是打破了限制;但是速率有所下降,而且数据包的有效长度也变小;然而安全等级更高,采用128 Bit的AES加密;在profiles层面仍有还是相通的。
正因为蓝牙存在两种不同的模式,所以诞生了蓝牙smart ready和蓝牙smart的概念。比如传统蓝牙音频头戴式耳机、开车时用到的蓝牙耳机、蓝牙打印机等,蓝牙video大家见到的比较少,但是经典蓝牙也是能够实现传输视频的。中间是兼容两种蓝牙模式的双模蓝牙设备。得益于笔记本和手机对蓝牙更新的支持,当然这个也是蓝牙对比其他2.4G协议所存在的一个不可比拟的优势,得到了生态级别的支持。大家会发现,常用的一些电子产品,蓝牙版本已经在蓝牙4.0以上,也就是基本上是属于smart ready的设备,可以同时和传统的蓝牙音频进行。对于低功耗蓝牙的应用场景,它主要是针对一些传输数量少、功耗比较敏感的场景。有一些设备是重复使用的,就像鼠标、键盘、打印机,其使用蓝牙smart来做会更加合适。
接下来是蓝牙4.1版本,在这里我选出了几个重要的更新,第一个是privacy 1.1,它主要是对蓝牙地址的扩展,使得设备变得不容易被跟踪。这改善了互联网上的刚性需求,即如何提高用户的隐私安全等级。对于物联网时代来说,这会变得尤其重要。
另外一个就是mesh的引入,使得蓝牙从过去的点对点连接、广播这一类的通讯行为上实现了突破,使得网状的通讯行为成为了可能。蓝牙mesh适用于低功耗蓝牙,也就是4.0以上的版本。由于mesh使用了 flood based的消息传输机制,是一个简单而且可靠的网络。虽然效率不是最高,但是从技术定位上来看,是比较符合要求的。
下面看下搭配云服务器的一个应用场景,蓝牙用于边缘计算的应用案例。左边的就是端侧设备,比如开关、湿度传感器、温度传感器、红外等;这些信息通过mesh汇集以后,再经过手机或者其他代理节点同时上报到云端,形成一个网络。
蓝牙5.0作为一个大版本的更新,主要更新内容由以下几点组成:2倍速率、4倍距离、8倍的吞吐量和网络共存,即在2.4G频段内的共存能力的提升。
先来看下速率、距离相关的更新,从它的空中包格式来了解更新细节。由于使用了2M PHY数据格式,所以同样的时间内传输速率是过去的2倍;从远距离的角度来说,通过牺牲了symbol rate作为前提来提高接收灵敏度(这里要区分下,symbol rate和data rate是两个不同的概念,开发者关心的是 data rate,也就是码率;其在空中使用多少个符号代表一个数据,称为symbol rate),能够提高链路预算,理论上传输距离可以达到过去的4倍。
再来看下另一个比较特别的更新:新的广播行为。它是在传统广播的基础上引导出新的广播包,不仅是在包类型上进行了扩展,同时也在传统的通道上进行了扩展。它不仅了使用传统的广播通道,而且为了避免信道的拥挤,使用了37个数据通道(以前的广播只使用了37/38/39三个频段)。此外,也引入了跳频的新特性,从无线的时间和频率的角度上优化了网络的共存特性。对比蓝牙的两个频道选择算法,我们可以看到它的输入变多了,更好的复杂度和更难于跟踪的频点算法,主要是为了避免互相干扰和多路径衰落的影响。
蓝牙5.1版本重点更新的主要是:定位服务、增加了天线阵列和不经过白化处理的固定频率扩展输出。
看看一个angle of arrival(AoA到达角)的场景,通过天线阵列和固定的频率输出,基带就有能力去计算出每一个信号到达天线的夹角。上图是它的两个接收设备,是从到达的设备去做计算的,通过不同的算法,三边测量法或者其他方法来确定出目标的位置。它的运算能力集中在固定布局的接收设备这一端,而不是说 asset端,适用于跟踪一些简单的设备,其中接收设备知道自己的位置,而设备本身没有能力知道自己的位置。
另外一个方法就是angle of departure(AoD发射角)的方法,相比于AoA的方法,AoD是通过移动设备接收到的不同的天线的信号,从而通过计算获得自己的位置。可以看到这里从asset换成了一个手机,运算能力主要还是集中在接收端,也就是手机设备。这是两者比较大的一个差异,也是算力分布的差异。
低功耗蓝牙实现挑战
低功耗蓝牙首先需要关心的第一个性能指标就是功耗。功耗主要分为动态功耗和静态功耗。动态功耗包括蓝牙发送/接收的瞬时功耗以及系统/SoC芯片的活跃功耗。静态功耗,也就是系统空闲时的低功耗,其中系统空闲功耗可以细分为蓝牙的收发状态切换、系统进入睡眠等多种的静态功耗。
另外一个比较重要的性能指标就是速度。速度包含了两点:连接速度和响应速度,与之相关的参数就是连接间隔,传输PHY的选择和传输包的大小将会影响数据的吞吐量。
数据的可靠性就看使用广播的形式还是连接的形式来确定是否存在应答机制,是否有效的进行传输。
另外一个就是加密机制,蓝牙加密机制是有两种模式,分别有4个level的设置。
下面重点介绍下两个比较重要的参数,它们将会影响性能指标和用户体验。第一个是连接间隔,即connection interval。上图最上面是connection interva两段,会对性能产生什么影响?如果 connection interval越低,代表通讯间隔越小,会带来主机、从机功耗的上升;由于通讯机会变多,数据的吞吐量也会跟着上升;而在主从之间的数据延迟将会下降。反之,如果通讯间隔变宽,就是很久才通讯一次的场,可以看到主机和从机的功耗都会明显下降;同时数据吞吐量也下降;主从机的一个数据延迟也增大,这些都是我们不希望看到的。
那有没有方法可以做到不仅功耗低,而且又能保持数据吞吐量和数据延迟呢?这里要引入第二个重点参数,叫做 latency value。
先看下slave latency value的两端分别情况如何。可以看到 slave latency valu很小或者接近于0时,相当于在每一个间隔都进行通讯,可以看到这样的情况下,相比于slave latency value处于high状态,从机功耗会上升,因为连接的间隔表示主从之间通讯的增加;但是slave latency value不会影响到其他这三点的(主机功耗、吞吐量和从主数据延迟),因为其只对从机有效;主从数据延迟也会下降。如果slave latency value处于high状态,从机功耗下降,主机功耗、吞吐量和从主数据延迟不变,而主从数据延迟增加。
如果master的latency跟上面的可能摄影头往高走的情况是一样的。那还看到第二个就是组合之间的数据延迟也是会下降。当slave latency变大时,我们希望牺牲组织来获取一个成绩,在功耗和延迟和吞吐量有一个最好的结果。我们也可以看到在冲击方因为通讯间隔有了Linux的作用,通讯间隔相对变差,但是主机的引导还是保持原有的节奏不变,那它的功耗就降下来了。这也是我们所希望的,牺牲主机而保持从机在一个均衡的性能状态。
latency的设计主要是为了节省从设备的功耗,比如常见的蓝牙遥控、鼠标和键盘。它既能保持响应的速度,又能保证设备的功耗情况。来看看低功耗蓝牙广播状态下的功耗分解,上图是以一个500毫秒间隔的广播包为例,三个通讯信道上都有广播包。两个重点因素是通讯的时间以及通讯的电流,并用电流来代表功耗。
一个广播包在一个周期内,功耗是可以估算出来的。怎么估算?可以把它拆分为多个区域。第一个区域是从设备的发送状态;第二个是时间间隔,主要是用于切换作用;后面是接收窗口,假如有一个scan request包产生,会在这里进行接收;后面是两个蓝牙状态收发切换到切换回来的中间的一个属于基带idle的状态;另外这里红色的区域是属于系统的休眠状态;最前面的红色区域属于蓝牙的准备时间。
来看以100毫秒为间隔的连接包的案例分享,关键参数同样还是时间和电流。可以看到它的状态切换有点不同,主从连接上之后通讯就会变得简单,经历的阶段也是发送、转换、接收、idle。
以刚才的500毫秒的间隔的一广播包为例,假设发射功率是8毫安,接收功率是6毫安,系统idle是3毫安,系统sleep是0.03毫安,payload为0 Byte。代入公式,预估的功耗对应的电流是69微安。另外一个就是连接功耗,以一个连接间隔为100毫秒, latency为0的例子作为讲解,它的功耗将会是93微安。假如使用了latency,并且设成99,功耗会降低到36微安。
正如刚才所提到的latency特性所言,在低功耗蓝牙上对功耗会有一个比较明显的改善。实现的挑战主要是设计芯片时要尽可能缩短高耗电的运行的时间,比如发射、接受、切换等;另一个是运行功耗,任何一个公式内的因素的降低,都对改善功耗是有帮助的,但是主要影响的还是所列出的几项,另外sleep的时间越长,功耗也会越低。
低功耗蓝牙AC63系列
在了解完蓝牙特性和一些性能指标与实现挑战后,来看下AC63系列都实现了哪些蓝牙的特性,以及克服了哪一些实现的挑战。
AC63系列是一款超低功耗的蓝牙双模SoC系统级芯片,通过了蓝牙SIG 5.0版本的认证。在功耗方面的表现,有着超低功耗的电源管理系统,支持内置的LDO和DCDC;同时在应用上支持了蓝牙SIG的一个mesh功能,并且接入天猫精灵,后续会增加更多的第三方接入。使用场景主要有以下,我们提供了完整的应用解决方案的,因此尽量减少客户的二次开发。
上图为AC63的规格和箱型图。其是一个支持片内falsh的结构,32位的基于RISC的CPU,同时也支持AES的加密。
这个是芯片资源的介绍,左侧:32位的CPU运行的频率上限是120M赫兹、 56k的data RAM、8k的I-Cache、内置的flash支持不同容量256k和512k、支持所有的外部I/O唤醒(在低功耗应用上是一个非常重要的特点)、2个全速的USB、总线和旋转编码器、IRTC时钟和闹钟;右侧是蓝牙的规格:支持1M/2M/和Coded PHY(适合高吞吐量和远距离布局)、支持标准的profile、(以500毫秒的间隔的一广播包为例)待机功耗大约70微安、 睡眠功耗30微安、待机功耗2微安、支持内部的DC/DC、支持温度从-40℃-125℃(含有不同规格)、工作电压从1.8V-5.5V(含有不同规格)。
上图是63系列的不同型号,以及型号之间的差异。差异主要体现flash的容量、是否内置DC/DC、充电、工作电压、工作温度。命名规则里面能够体现出这些差异。63系列有两个规格,可以根据应用需求去选择最适合的型号。
AC63 应用解决方案
除了传统的SDK发布方式, AC63还支持同步的线上发布,同时也拥有专属的github仓库。下面先了解一下SDK的介绍内容。
首先是开发环境的搭建,由于芯片都是自主研发,而且包括了自主研发的 CPU、指令集以及编译器,所以在开始应用开发之前,需要独立安装一个编译工具;另外是开发的升级工具,主要是前期在开发时去烧录对应的hex文件进行调试。
然后是一些介绍文档,主要介绍大家在开发前比较关心的芯片规格和SDK信息,包括SoC数据手册、SDK历史版本和SDK快速开始简介。同时也提供了一些完整的应用解决方案,后面将会不断推出更多的应用解决方案,减少客户二次开发的时间。
编译环境是同时支持Codeblock IDE和有make file的编译环境,编译前根据不同的编译环境,要选择不同的方法去开始应用。如果选择Codeblock IDE,需要进入对应的工程目录打开工程文件;如果是make file的编译环境,需要手动修改一些宏变量;需要提醒的是在开发前要确保工具链、升级工具是进入正常连接的状态,并且进入编程模式,才能下载程序。
我们做的是基于深度学习的语义导航,把图片识别和深度相机结合起来,在一个图像上识别到一个人,深度图上知道这个人的位置,我画在这上面时知道是一个人,当它是一个静态障碍物时,我知道它是一个箱子。
可以看到SDK是一个带有操作系统,并且以以事件为出发的结构。事件和 APP的抽象对于应用之间的解耦起到了一个很好的帮助,可以让用户可以集中去开发应用逻辑,而不需要去关心太多的硬件细节。下面是SDK的一些示例,支持经典蓝牙的SPP透传、LE的透传和作为模组命令应用。另外一个就是一个双模的HID设备,这些就是工程文件。
这个是鼠标的 SDK的简单结构介绍。可以看到大家的主要开发集中于业务逻辑,怎么去驱动事件,怎么去获得不同的状态,比如鼠标的按键、旋转编码器、光学传感器和蓝牙设备的事件,然后由系统APP去处理,并且进行发送。
大家可以看到应用能够运行在不同的芯片平台上,这是蓝牙mesh的一个介绍。mesh的feature已经支持了relay、proxy、friend和low power,支持provisioning bearer support(PB-GATT和PB-ADV)和provisioning role support(unprovisioned device)。同时也接入了第三方天猫精灵。
也顺便介绍下我们即将发布的蓝牙在IoT/Beacon/Multi-link/vendor wireless的应用。
今天的今天的演讲就到这里,谢谢大家。