使用蓝牙LE开发物联网设备
蓝牙
技术正在大力打破其在物联网中的地位。一些这方面的技术,被称为蓝牙的LE (蓝牙低能量,这是蓝牙智能,又名BLE)直接将自己定位为理想的选择物联网(物联网)。很难不同意。BLE已经知道如何路由Internet通信,确定房间中的坐标,连接工业可编程逻辑控制器,支持WEB服务器,连接体重秤,温度计,心率监测器,血氧仪,血压监测器以及许多其他东西。的C BLEWi-Fi解决方案固有的许多问题都会自动解决。使用类似于ZigBee的技术,不久就可以在MESH网络中组织具有BLE的设备。这已经反映在蓝牙规范5.0中。因此,在开发IoT模块时,与使用Wi-Fi相比,我无条件地偏爱BLE。我将以K66BLEZ调试模块为例来考虑BLE网络的外围部分。
在这里,我想描述一下我从几乎完全不了解BLE到批量生产的开发路线。这些文章开始
了对K66BLEZ1模块的熟悉:.
. FatFs
.
模块K66BLEZ作为收发BLE用途芯片MKW40Z160(48兆赫的Cortex-M0 +,160 KB闪存,RAM 20 KB)生产挖NXP。该芯片的有趣之处在于,它与BLE一起还可以用作标准802.15.4的信号收发器。众所周知,标准802.15.4是ZigBee技术的载体。直接栈的ZigBee为MKW40Z没有公布,但已经提供firmvare其中802.15.4与同时工作BLE。带有BLE芯片的模块的一部分的示意图如下所示。
(点击放大)代替芯片的 MKW40已经有芯片 MKW41具有128 KB的RAM容量,512 KB的闪存容量,支持所有流行的协议: BLE 4.2,BLE网格中,ZigBee,线程A,IPv6的6LoBLE。新芯片上尚无公开文档,但它有望与MKW40引脚兼容。模块上的MKW40 BLE芯片通过SPI和I2C接口连接到MK66主微控制器。 I2C接口还将芯片连接到充电器芯片。主通信通道在SPI接口上以6 Mbit / s的比特率实现。可以使用JTAG适配器通过SWD接口执行MKW40芯片中程序的调试,还可以通过调试接口UART0将其输出到X4调试器连接器。恩智浦为MKW40芯片上的各种应用提供了两个以上的示例,包括:压力,葡萄糖,温度,接近传感器,心率表等。有无线UART和无线引导程序的应用程序。我对这些芯片进行了NXP框架的深层重构,并在Windows PC上使用演示程序创建了新的配置文件,这些演示程序在PC端不需要单独的适配器。但是稍后会更多。蓝牙LE很难学习。原因是制造商的文档中有大量的规范和大量简短的表述,这些术语立即以不同寻常的术语开始。因此,让我们开始吧。术语和缩写的解码和翻译,语。
- Pairing — (). BLE . , PIN .
- Bonding — (). BLE .
- Device authentication — () , .
- Advertising — BLE (). , , , .
- Scanning — BLE . , .
- Profile — . , , .
- UUID — universally unique identifier. 128- .
- BLE Host — . BLE , . GAP, GATT, GATT, L2CA.
- BLE Controller — . BLE - Bluetooth.
- HCI — Host Controller Interface. API BLE BLE .
- GAP — Generic Access Profile, . layer (). . , BLE .
- GATT — Generic Attribute Profile, . . — (, , ...) , , .. , UUID.
- L2CA — Logical Link Control and Adaptation Layer. . , , , , . BLE .
- SMP — Security Manager Protocol. . L2CA.
- LTK — Long-Term Key. BLE .
- IRK — Identity Resolving Key. .
- CSRK — Connection Signature Resolving Key. .
- RAND — 64- , LTK
- EDIV — 16- , LTK
- MITM — man-in-the-middle. .
- Message integrity — .
- — , . BSP (board support package), HAL (hardware abstraction layer), OSA (OS abstraction layer), (middleware) : , , .
在为BLE选择芯片时,我对最著名的制造商的报价进行了小幅分析。最重要的是,我对为ARM核心下的项目所建议的软件,框架和编译-组装-调试工具的组成感兴趣。一个重要因素是IAR环境和RTOS MQX框架的连续性,这是在模块的主处理器上开发应用程序时使用的。它为芯片提供一个SDK nRF51822内核在Cortex - M0的。在IAR,KEIL,GCC中进行编译。 BLE堆栈由没有源代码的整体库表示,该源代码称为SoftDevice,其中所有API均已实现:GAP,GATT,L2CA,HCI。围绕该库构建了带有驱动程序的框架。该框架带有两个RTOS:Keil的RL-ARM RTX和FreeRTOS。该框架使用protobuf序列化技术和Segger RTT调试。此外,还提供了nrf5 IoT SDK。。它包括MQTT,COAP,TLS协议(取自MBED项目),cJSON,lwip(免费的TCP / IPv4 / IPv6协议栈),套接字接口,IPv6适配器的源代码。还有6LoWPAN,但没有源代码。在ARM上,它仅制造2核BLE芯片CC2640 (Cortex-M3和Cortex-M0),但相应的规格为Bluetooth 4.2。要下载,它提供了SDK SimpleLink蓝牙低功耗软件堆栈2.2.0。它也是由Code Composer Studio自己的开发环境编译的在IAR环境中。它带有自己的RTOS TI-RTOS 2.16和围绕BLE堆栈库开发的框架。作为其中一种方案的SDK涉及使用外部应用程序处理器-简单应用程序处理器(SAP)。CC2640芯片本身称为简单网络处理器(SNP)。它们之间的通信是根据称为统一网络处理器接口的协议建立的(NPI)。在CC2640端,必须使用TI-RTOS;在SAP处理器端,您可以自行决定使用RTOS。NPI协议的源代码随SDK一起提供给SAP端和SNP端。这是SimpleLink技术。BLE堆栈本身分为3个没有源的预编译库:主机,控制器,HCI。所有这三个库仅在Cortex-M3处理器上工作,该处理器是CC2640芯片的一部分。除了研究TI-RTOS,用户还需要研究一种特殊的软件机制或协议,以与称为iCall的BLE堆栈进行交互。在Cortex-M0内核上制造ATBTLC1000蓝牙LE芯片。整个芯片堆栈都写入ROM。在Atmel网站上找不到用于对这些芯片进行编程的开放工具。相反,Atmel建议使用外部微控制器与ATBTLC1000进行交互。Atmel软件框架中提供了用于外部微控制器的软件和示例。在Atmel Studio(GCC的外壳)或IAR中进行编译。产生在芯家族的可编程芯片BLE 了Cortex-M0的 - 对PSoC 4:对PSoC 4XX8和的PRoC CYBL1XX7X支持的说明书蓝牙4.2。芯片项目是在特殊的IDE PSoC Creator中创建的。赛普拉斯的芯片的不同之处在于,没有现成的外设配置(UART,SPI,I2S,PWM等),必须通过电路编辑器中的库元素并添加软件库来创建它。旨在提供一些灵活性。尽管它为开发人员增加了很多工作。可以通过以下工具链之一来编译已配置的项目:GCC,IAR,Keil。BLE有一个库。BLE堆栈作为预编译的整体库提供,而没有将BLE主机,BLE控制器和HCI结合在一起的源代码。但是,该公司发布了使用BLE的Android和iOS应用程序的源代码。基于支持蓝牙4.2规范的ARM Cortex-M4内核生产EFR32 Blue Gecko蓝牙智能SoC,EFR32BG1P332F256GMxx类型的芯片可提供高达19.5 dBm的功率,并结合了独立的868 MHz无线电信道,功率高达20 dBm,灵敏度为-121.4 dBm。 Silicon Labs芯片是多种可选的引脚功能以及一种称为外围反射系统的系统(PRS)。尽管不能像赛普拉斯芯片那样创建外设,但是其与引脚的连接几乎是任意的,但是PRS的存在使得无需处理器就可以相互交互。 Silicon Labs BLE堆栈能够接受Bluetooth Developer Studio的配置文件生成结果将在下面讨论。Silicon Labs提供了两个蓝牙堆栈。其中之一专为Bluegiga模块设计,除BLE外,还支持常规蓝牙。第二个堆栈符合规范4.2,仅符合LE。BLE堆栈作为无源的整体预编译库提供。对于带有外部微控制器的选件,源中提供了串行协议和API。GCC,IAR和Keil都可以编译。一切都在一个开发环境Simplicity Studio V4中完成。RTOS不支持随附的堆栈框架。但是在Simplicity Studio的源代码中,您可以找到诸如8 kbps的Speex之类的珍珠,适合通过BLE传输语音以及来自Segger的强大的窗口GUI。根据蓝牙4.1规范,制造包含BLE堆栈的基于Cortex-M0的BlueNRG网络控制器芯片。
这些芯片本身不是可编程的,但是具有串行应用命令接口(ACI),外部微控制器必须通过该接口与它们进行通信。已经为ACI开发了一个框架,该框架可以作为ST专有开发环境STM32Cube的一部分包含在内。并未在ARM Cortex上制造BLE芯片,但对在蓝牙模块上实现MESH网络感兴趣。视频在这里。列出了适用于Android和iOS的各种BLE应用程序的源代码。有一个SDK。在其16位RL78内核上制造BLE芯片。BLE堆栈仅颁发给高级用户。各自拥有-编译器,RTOS,主机微控制器。但是有一个用于Bluetooth Developer Studio的插件他们声称提供了最小的BLE芯片。但是,不能将带有闪存DA14583(其余仅用于ROM)的芯片称为最小芯片-5x5 mm。的核心了Cortex-M0的。最大功率0 dBm。支持蓝牙4.1规范。要从公司获得SDK,您需要注册并通过测试。但是有了这样的芯片参数,我什至没有尝试获得一个SDK。因此,MQTT,COAP,TLS,SPEEX,LwIP等的来源。那些使用不同SDK的开发人员对我们没什么兴趣,可以在Github上免费找到它们,而无需绑定到特定框架。由于无法在PC上使用蓝牙4.2规范,因此对其的支持很少。像TI-RTOS这样的小众RTOS或特殊的调度程序将使我们难以掌握,我们试图避免此类决定。我很高兴在Kinetis上选择了解决方案。Kinetis系列的NXP蓝牙LE堆栈有趣的是什么。
与其他版本一样,Kinetis的BLE堆栈采用预编译库的形式。在这些库的周围,建立了一个多任务框架,该框架在源代码中包括驱动程序和一层硬件抽象,而与操作系统无关。可以将框架配置为在没有操作系统的情况下工作,或者可以使用它。立即交付,该框架适用于FreeRTOS。但是它通过一组辅助功能与FreeRTOS交互,这些辅助功能被称为操作系统的抽象层(OS抽象,OSA)。借助OSA,您可以替代支持消息队列,抢占,标志和计时器的任何其他操作系统,而不是FreeRTOS。例如,RTOS MQX。奇怪的是,堆栈仅在IAR环境中编译。幸运的是,就我而言,这不是问题。更有意思的是,堆栈分为两个库-BLE主机和BLE控制器。BLE主机库可以在其他芯片上工作。在这种情况下,库通过HCI协议相互交互。即 在其他制造商提出另一种通信协议的情况下,恩智浦提供了标准解决方案,该协议用于将外部微控制器上的应用与BLE堆栈进行交互(请记住SimpleLink)。最重要的是,通过这种方法,将BLE主机移至功能更强大的外部微控制器,我们大大提高了GATT数据库和服务的功能。简要介绍BLE
的蓝牙规范版本4.2版本的开放可在这里。较低的BLE级别(控制器级别)的描述作为第2544页的“第6 卷核心系统软件包[低能耗控制器容量]”包括在内。具有ATT协议和GATT配置文件的较高级别(主机级别)位于“ vol.3”中第1693页上的文档的“核心系统软件包[主机卷]”。使用的频率范围
(单击放大)当在设备之间建立逻辑通信通道时,将三个频率(在上图中由通道号37.38.39表示)分配给广播无地址包裹,其余三个频率分配给包传输。蓝牙的一个众所周知的特征是,在传输数据包时,每个后续数据包都以不同的频率传输,该频率是从允许的数据包列表中伪随机选择的。BLE数据包中的所有数据都可以加密和认证。也使用设备地址的动态随机生成及其使用散列的标识,即空中截取了设备的地址后,我们将无法使用它超过15分钟的时间,因为在此期间,地址会根据我们未知的算法进行更改。BLE模块可以用作单向发送器,即无需建立双向连接,只需以广告包的形式广播一些数据,例如温度。广告包中指定为“ 制造商特定数据 ”的数据类型可用于此目的。一台计算机或平板电脑可以从数百个这样的发射机中接收数据,而无需进行不必要的搜索,建立连接,输入PIN码等预备步骤。无需安装通信通道即可传输数据的另一种可能性是在请求-响应模式下进行传输(请求是ScanRequest包,模块的响应是ScanResponce包)。此BLE与Wi-Fi明显不同,即使对于最简单的温度计,也必须建立占用路由器资源的连接。BLE协议栈
下图显示了BLE,就像微控制器程序员所看到的那样。 BLE堆栈由两个软件部分组成:Host和Controller。主机软件处理组织和管理数据,连接的高级功能,而Controller管理收发器的物理外围设备,使用秘密密钥并处理其他低级功能。命名的部件通过HCI(主机控制器接口)软件接口连接。在PC实现中,主机部分在计算机上运行,而控制器部分在硬件收发器上运行蓝牙和HCI协议最常通过USB传输。在微控制器上的实现中,两个部分都在同一芯片上运行,并且HCI接口直接变成了从主机任务(软件模块)到控制器任务(软件模块)的直接数据传输,反之亦然。实际上,程序员会看到几组在主机级别上工作的API :称为GATT,GAP,L2CA,SMP,HCI。使用GAP API可以设置设备的操作模式- 中央,外围设备,观察者,广播者,并在必要时建立连接。并使用GATT API进行有用数据的直接发送和接收及其分析。
(单击放大)尽管存在4.2版,但大多数现有设备当前都支持BLE 4.1。版本4.2与先前版本的所有差异都特别涉及BLE部分的改进:速度提高,传输IP协议和HTTP流量的能力,增强的密码保护和外部观察者无法识别的能力。与Wi-Fi相比,BLE的一个重要功能不仅是通信通道的规范,还包括使用它的应用程序本身的规范。这称为配置文件和服务。具有服务的配置文件描述了设备的角色,数据的用途,数据的组成和格式,数据保护,交换的顺序,类型和事件,而不仅仅是数据的传输方式。这样,在开发体温传感器或脉搏计时,您就不必根据协议重新发明轮子。已经给出了规格,仅在设备侧保留用于发送测量结果的必填字段。以智能手机,平板电脑,PC或厨房电器等形式的此类设备的客户将自动识别此数据并显示或相应地使用它们。非常感谢所有制造商都遵循相同的BLE规范,有关如何显示温度或心率数据以及如何使用它们。但是,由于配置文件具有扩展功能的机制,因此开发人员仍然可以发挥想象力。以下是BLE设备中的属性的粗略层次结构。
(单击放大)下面是稍微更详细的典型属性树。这不是一棵完整的树;大多数树都被省略了,因为它会占用太多空间。颜色突出显示树级别,每个属性都有一个唯一的编号-UUID。记录标准编号减少为16位。在此图中,所有数字均为标准数字。 GAP和GATT配置文件也以其标准功能作为服务提供。每个服务可以具有其自己的安全模型和授权。设备中的整个树都存储为称为GATT数据库的数据库,通常以带有交叉引用的简单表的形式存储。
(点击放大)服务特征具有许多特征,如下所示。在这里,您必须为重言而道歉,但是在BLE中,确实存在某种术语危机。总之,属于它的服务的特性可以指定读取,写入,通知,确认,签名等的需要。
(点击放大)BLE是一项严肃的技术,为了确保安全性和最大程度的形式化已做了很多工作,这反过来又有助于实现兼容性。BLE设备之间的数据交换是通过写入和读取特性值来进行的。TCP或UART等流通道不在这里。如果设备具有它们,则它们将由更高级别的软件附件进行组织。开发工具
与特殊利益集团的建议网站开发工具是蓝牙(蓝牙SIG的) - https://www.bluetooth.com/develop-with-bluetooth/developer-resources-tools该网站的标准化的主要组织- 蓝牙SIG将提供有用的工具:蓝牙开发者工作室
Bluetooth Developer Studio是一种工具,可让您正确地将配置文件,服务,特征和描述符形成并将其插入BLE设备的实现中,即创建一个数据库。如果您以99美元的价格购买额外的硬件蓝牙适配器,则该程序允许您拦截,解密和显示蓝牙协议数据包。该程序还具有调试和测试创建的服务的能力。因为在BLE中会详细描述已批准的配置文件,甚至包括格式,编号,可访问性等方面的小错误。这些配置文件中的内容将导致兼容性问题。但是对于非标准配置文件,如果没有一种工具来准确地构建符合所有规范的服务,特征,描述符树的工具,这将非常困难。服务名称,特征,描述符及其多字节唯一编号-UUID容易引起混淆。该工具的结果尤其是生成的XML文件描述了用户项目中的配置文件,服务,特征和描述符。这些XML文件由Silicon Labs Simplicity IDE直接使用,以集成到其芯片的嵌入式项目中。
(点击放大)该工具的另一个结果可能是使用BLE数据库的设备的源代码。但是为此,用户需要使用JavaScript编写其插件。该方案还通过特殊的提供了插件的用户访问数据库API来的JavaScript。有许多现成的插件可以生成各种源文本文件,这些文件适合在第三方环境和软件框架中进行编译。尚无基于恩智浦Kinetis KW40Z连接软件框架的解决方案插件。应用加速器
应用程序加速器2.1-一组演示项目,带有用于不同Android 6操作系统的源文本。0,Blackberry,iOS 9,Tizen 2。4 和Windows 10。对于Windows 10,项目仅适用于通用Windows平台(UWP)体系结构的Visual Studio开发环境。即这些项目不能在Windows窗体或WPF c .NET框架下进行编译。以及将常规Windows应用程序转换为UWP的桥梁刚刚被创建。应该注意的是,UWP使得可以将应用程序放置在Windows应用商店中,但是它没有创建简单的可执行.exe文件,您可以简单地复制并运行该文件。UWP应用程序的首次启动总是伴随着安装。所有这些给开发人员带来了困难。演示项目的功能还有很多不足之处。
(单击放大)上面是 Windows的唯一演示应用程序的屏幕截图 -BLEServiceBrowser。网关智能Smart刀套件
网关智能入门套件 - 到WEB 服务器的BLE 设备网关的项目,以及 实现BLE设备网络用户界面的WEB 服务器本身的项目。一切都在Node.js中实现。建议在具有Raspbian Jessie操作系统的Raspberry Pi 2 B型微型计算机上进行部署。将Raspberry Pi直接连接到BLE设备使用套接字的Bluetooth HCI接口到L2CAP级别和USB HCI适配器。要在Windows下运行,您需要为标准的蓝牙HCI驱动程序安装特殊的替代品。由于有限的HCI驱动程序,该解决方案只能在非常有限的几种类型的硬件适配器上运行。
佩里顿
在商业工具中,Perytons的一个有趣的BLE流量分析器是分析器程序,该分析器可在Windows PC上运行,从版本7开始。这一点很重要,因为Windows的本地BLE驱动程序仅从版本8开始工作。该分析仪仅可使用有限的硬件BLE适配器列表。使用适配器时,由于BLE中的流量加密而导致的分析限制也很有限。
(点击放大)但是,即使从该程序的试用版中,您也可以获得很多好处。该程序随附了交换真实设备的拦截的示范记录。这些记录在加载到程序中后,会给出整个BLE协议栈操作的详细信息。查看一个这样的拦截将替代探索整个蓝牙规范。巴士猎犬
如果您只需要监控计算机与BLE设备之间的活动,而无需对协议进行详细分析,则可以执行众所周知的Windows驱动程序流量拦截器Bus Hound。在下面的屏幕截图中,您可以看到收到的广告包的流。分组接收时间间隔的不均匀性清晰可见。这表明大量的数据包丢失。BLE设备的超时间隔设置为20 ms。
(单击放大)下面的屏幕快照显示了与PC配对后的“总线猎犬”窗口中BLE设备的图示。对于每个设备服务,在对等之后,会出现一个逻辑通信通道。在这里,您可以看到设备和服务的UUID。
BLE流量分析器(嗅探器)USB-KW40Z
这是Kinetis开发支持工具包中的工具。因此,我将更详细地介绍它。恩智浦嗅探器页面。
该嗅探器由NXP(或更确切地说是以前的飞思卡尔)开发,可以在流行的在线无线电组件商店中廉价购买:Mouser,Digi-Key,Farnell ... NXP提供它作为监视BLE设备发送的无线电数据包的工具。使用此设备,您可以研究数据包的结构,将其记录在日志中,并分析流量密度。嗅探器电路尚待研究,但微控制器程序以二进制文件形式提供。嗅探器允许您按地址值过滤数据包。下载PC软件嗅探器在下面的搜索查询在线www.nxp.com - Kinetis_Protocol_Analyzer_Adapter.exe因为嗅探器除了主要的功能可以更和调试平台的各种应用,附在其上的二进制文件基础固件与您可以在实验后还原嗅探器功能。这些文件都与包KW40Z连接软件,这是从网站上下载www.nxp.com搜索查询KW40Z_Connectivity_Software。这些文件将被称为Sniffer_processing_core_usbkw40z_k22f.bin(用于嗅探板上的MK22FN512微控制器)和Sniffer_radio_core_usbkw40z_kw40z.bin(用于嗅探板上的MKW40Z微控制器)。使用SWD调试器对文件进行编程:JLink,STLink,OpenSDA ...在PC端,根据规范,该设备被视为具有一个COM端口和一个调试端口的复合USB设备,带有CMSIS-DAP固件的OpenSDA。因此,在IAR环境中,您可以使用其他MK22FN512芯片作为调试适配器功能的载体,对MKW40Z嗅探器芯片进行自由编程和调试。但是板上的两个芯片都具有用于外部调试适配器的标准SWD连接器。嗅探器不能保证接收到所有在空中传输的数据包。泛洪很容易,然后它停止接受任何数据包,因此建议启用按地址过滤,以便仅从感兴趣的节点接收流量非常少的数据包。以下窗口显示了软件包分析器程序。该窗口包括在所有三个通道上的拦截:(
单击放大)在PC上安装分析仪软件时,它将创建一个虚拟以太网适配器,该适配器将通过虚拟嗅探器COM端口拍摄的数据包转换为以太网数据包。就我而言,这样的虚拟适配器会自动收到一个简单的名称-以太网。要查看数据包,您还需要安装Wireshark以太网数据包嗅探器程序。监视流量时,Wireshark程序主窗口的视图。Wireshark详细描述了链路层(LE LL)协议数据包的所有位字段,但是,在设备之间建立连接并启动L2CAP协议后,由于已加密传输数据包内容,因此无法识别该数据包内容。
(点击放大)欢迎对本文中的信息进行评论,添加,更正和反对。 Source: https://habr.com/ru/post/zh-CN394757/
All Articles