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 抓包软件
软件配置步骤简述:
-
python3.7及以上的环境
-
wireshark环境配置
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文件夹下
-
nRF52840驱动CP2102
2.3 nRF connect
参考资料
3. Nordic
nRF5 SDK
nrf5 sdk可以直接到nordic官网下载,该SDK是开箱即用的,但是我们仍然需要一些东西。
nrf5 sdk如何选择、使用,可以参考中国区原厂FAE的博客:
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 的黑盒子。这个“黑盒子”不是你随便能动的东西,但它又必须和你的应用协同工作。
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
4. Telink
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开发是极为重要的。
BDT Burning and Debugging Tools for all Series
Telink SDK(TLSR825X)
Telink的文档更新速度并不快,例如多连接文档是对4.0.1.x的SDK说明,目前的4.0.2.x并不适用。所以github/gitee仓库应该选择早些的发行版(4.0.1.x)。