跳转至

BLE

IoT(Internet of Things)——BLE(Bluetooth Low Energy)

BLE(蓝牙低能耗)是一种2.4G无线技术,始于蓝牙V4.0版本,旨在实现低功耗和短距离的通信。

入门:先读 The Bluetooth Low Energy Primer + 《Getting Started with BLE》,建立整体认知。

理论:研读 Bluetooth Core Specification 4.2/5.4,重点关注 LL/HCI/GAP/GATT/SMP。

实战:选择一款芯片(如 Nordic nRF52840),对照厂商协议栈文档做开发。

深化:研究开源栈(Zephyr/NimBLE)源码,理解协议栈实现细节

1. Bluetooth LE stack

Host Controller Interface (HCI),表示Host与Controller之间的逻辑接口,但不是物理组件。就底层物理传输而言,HCI可以以多种不同的方式实现,但逻辑或功能接口总是相同的。

值得注意的是,蓝牙LE栈跨越了OSI参考模型的所有层,而许多其他无线系统只跨越了OSI层的一个子集,例如物理层和数据链路层。作为全栈通信系统,蓝牙技术的一个优势是不依赖于其他标准体。这种依赖关系会限制技术的发展。

Host

  • Logical Link Control and Adaptation Protocol(L2CAP)

    充当主机内的协议多路复用器,确保协议由适当的主机组件提供服务。在L2CAP上、下两层之间对pdu / sdu进行分段和重组。

  • Security Manager Protocol(SMP)

    在执行安全过程(如配对)期间使用的一种协议。

  • Attribute Protocol(ATT)

    ATT客户端和ATT服务器使用的一种协议,它允许发现和使用服务器属性表中的数据。

  • Generic Attribute Profile(GATT)

    根据属性表中的基础属性定义称为服务、特征和描述符的高级数据类型。定义使用ATT处理属性表的高级过程。

  • Generic Access Profile(GAP)

    定义在非连接状态下可以使用的操作模式和过程,例如如何为无连接通信使用广告以及如何执行设备发现。定义安全级别和模式。定义一些用户界面标准。

参考资料

2. BLE 开发工具

2.1 Nordic nRF52840 sniffer

NORDIC 官方提供的蓝牙抓包方法,优点就是便宜!整套硬件成本不超过 100RMB,比公司 30W 的 ellisys 专业蓝牙分析仪要便宜得多了。缺点就是在嘈杂的蓝牙环境下,抓包比较困难,但是在家里蓝牙设备不多的情况下还是可以用用的。适合初学者入门学习蓝牙协议栈的数据流!

推荐购买亿佰特EByte的nRF52840 sniffer,比较稳定

如果买的nRF62840没有固件。NORDIC 官网有英文教程文档会介绍如何将你的开发板刷成蓝牙抓包器

2.2 Wireshark 抓包软件

wireshark

软件配置步骤简述:

  1. python3.7及以上的环境

  2. wireshark环境配置

    NORDIC 官网下载配置文件

    nrf_sniffer_for_bluetooth_le_4.1.0/extcap 目录运行命令: python -m pip install -r requirements.txt

    将 nrf_sniffer_for_bluetooth_le_4.1.0/extcap 目录里的内容原封不动的拷贝到 Wireshark 安装目录里的 extcap 下。

    将 Profile_nRF_Sniffer_Bluetooth_LE 拷贝到wireshark/profiles文件夹下

  3. nRF52840驱动CP2102

2.3 nRF connect

参考资料

3. Nordic

nRF5 SDK

nrf5 sdk可以直接到nordic官网下载,该SDK是开箱即用的,但是我们仍然需要一些东西。

nrf5 sdk如何选择、使用,可以参考中国区原厂FAE的博客:

Nordic nRF5 SDK和softdevice介绍

Nordic nRF5 SDK开发环境搭建(nRF51/nRF52芯片平台)

  • KEIL

    打开工程,会缺少Device family pack,并且提示我们应该安装的版本,直接通过keil的manage run-time environment跳转到Device family pack下载链接,并且下载对应版本并且手动安装pack即可。

  • IAR

    使用IAR开发时,只需要安装SDK内附带的nRF_MDK_8_40_3_IAR_BSDLicense就行了,另外需要注意的是,SDK是适配IAR7的,IAR8下编译会有些报错,需要做点修改,查看sdk documentation

    Note for IAR 8 users:

    When using IAR 8, you must apply the following workaround in the MDK:

    Apply a patch to modules/nrfx/mdk/compiler_abstraction.h at line 140 (fix the '__ALIGN()' macro definition): use the argument 'n' in the macro expansion instead of 'x'.

  • sxxx_nrf52_x.x.x_softdevice

    nRF5 SDK是Nordic nRF51/52系列产品软件开发环境,Softdevice是Nordic蓝牙协议栈的名称,为了方便用户的使用,每一个版本的SDK都包含了该版本支持的所有softdevice,请到SDK根目录\components\softdevice目录查看具体支持的softdevice类别和版本。

    你应该会遇到这样的情况——代码明明编译通过了,下载也没报错,但设备就是不广播、连不上手机,甚至调试器都连不上芯片?那很可能问题出在 —— 你没搞懂SoftDevice和应用程序是怎么“和平共处”的。

    Nordic的nRF52系列之所以强大,是因为它把复杂的蓝牙协议栈封装成了一个叫 SoftDevice 的黑盒子。这个“黑盒子”不是你随便能动的东西,但它又必须和你的应用协同工作。

    蓝牙例程《ble_app_uart》测试

nRF Connect SDK(NCS)

中国区原厂FAE的博客:开发你的第一个nRF Connect SDK(NCS)/Zephyr应用程序

  • nRF Connect SDK入手

    1 下载JLink

    2 下载nRFUtil,并且添加到环境变量

    3 VScode安装 nRF Connect VS Code Extension Pack

    4 在nRF Connect界面安装 toolchain 和 SDK

TelinkSDK是官方的,相比AiThinker这种模组代理商,代码更权威更完善。比如单连接SDK Demo,多连接SDK Demo都配有官方说明文档。能学得更深入。

AiThinker作为模组商,由于客户没有二次开发能力,会用MCU+模组的方法使用BLE。模组商一般会给客户提供AT指令的Demo,可以AT指令的代码顺藤摸瓜熟悉功能。—— Ai-Thinker-Open Telink_825X_SDK

IDE(TLSR825X)

Telink IDE和Telink Studio是有区别的,TelinkIDE针对TLSR8(例如TLSR8258),而TelinkStudio针对TLSR9

TLSR8不像TLSR9支持调试,所以TLSR8只能用print打印来交互调试,故编写UART交互对于TLSR8开发是极为重要的。

IDE for TLSR8 Chips

BDT Burning and Debugging Tools for all Series

Telink的文档更新速度并不快,例如多连接文档是对4.0.1.x的SDK说明,目前的4.0.2.x并不适用。所以github/gitee仓库应该选择早些的发行版(4.0.1.x)。

泰凌软件文档

TLSR825x Series - Telink wiki

多连接SDK 4.0.1.3 patch003