
本书主要介绍低功耗蓝牙5.x的开发技术,主要内容包括开发环境的搭建、最小硬件系统、广播的实现、双向通信的实现、电池电量服务的添加、私有服务的添加、配对和绑定功能的实现、主机扫描、主机连接、主从一体的实现、多主多从的实现、高速率通信的实现、长距离通信的实现、扩展广播数据包的实现、基于QSPI驱动LCD、基于FreeRTOS的复杂应用、FDS的实现、OTA的实现、基于串口的DFU实现、PTR9818模块的开发等内容。通过本书的学习,读者不仅可以掌握低功耗蓝牙5.x的开发技术,也可以学习物联网的知识、培养物联网的思维,还可以提高自身的动手能力和创新能力。
序言1 低功耗蓝牙5.x作为当前最新的蓝牙技术标准,具有更低的功耗、更快的通信速率、更远的通信距离、更高的数据广播包容量等优势,同时还具有Mesh组网、AoA/AoD精准定位、LE音频等技术特点,使得蓝牙技术的性能得到了大幅提升,功能也变得更加丰富,从而能更好地适用于可穿戴设备、智能家居、智能传感器、工业物联网等实际应用,有助于实现真正的“万物互联”。低功耗蓝牙技术已成为当前产业界和学术界关注的热点技术领域之一。 作为国内最早推广及应用低功耗蓝牙技术的团队之一,迅通科技一直走在低功耗蓝牙技术研发和应用的前列,并积累了丰富的经验。谭晖先生根据迅通科技在低功耗蓝牙技术领域的实践经验编写《21天入门低功耗蓝牙5.x开发》,本书循序渐进地介绍了低功耗蓝牙5.x的重要知识点,并将这些知识点深入浅出地总结为若干实验,可以使初学者快速入门并掌握相关的开发知识,有助于提升自身的技术水平和竞争能力,成为物联网技术开发应用的佼佼者。 全书围绕nRF52840这一兼具超低功耗、高性能等特性的智能蓝牙产品解决方案和开发平台,以21天速成实战为目标导向,精选了20个实验,通过对原理的探究、对框架的分析、对蓝牙规范的结合应用,以及对关键代码及函数接口的细致说明,实现了对低功耗蓝牙5.x关键知识点和技术开发应用重点的囊括。 本书具有涵盖面广、应用性高、通用性强等特色,从智能硬件设计的基础出发,理论和实践相结合,不仅聚焦低功耗蓝牙5.x的开发,还涉及RF测试、低功耗测试的方法等内容。本书提供的实验涵盖低功耗蓝牙应用的常用场景,结合例程进行详细说明,特别适合初学者一步步地掌握调试和开发方法。此外,本书以最典型的全功能SoC芯片作为开发模板,具有普适性,可以使读者获得的知识适用于Nordic全系列SoC芯片的开发应用。这本书不仅可作为高等学校学生科技创新实践的参考读本,也可作为企业工程技术人员的开发工具书。 张钦宇 国家“万人计划”科技创新领军人才 国家杰出青年科学基金获得者 序言2 Nordic Semiconductor从1983年在挪威起步到现在,在经历近40年的发展后,目前已经成长为一家跨国上市公司,并成为世界领先的无线通信集成电路供应商。Nordic Semiconductor是低功耗蓝牙(BLE)规范和标准开发的关键贡献者,并以40%以上的市场份额成为低功耗蓝牙的市场领导者,远远高于该市场的其他参与者。 Nordic Semiconductor并非只有低功耗蓝牙产品,凭借其独特且应用广泛的多协议无线片上系统(SoC)芯片,无论在中、短距离的点对点通信和Mesh网络,还是在5G低功耗蜂窝物联网,人们都可以在世界各地的无线连接产品中发现Nordic Semiconductor的解决方案。 我本人在刚刚到Nordic Semiconductor工作的前几周内,就有幸见到了谭晖先生,他是一位知识渊博的学者和技术娴熟的企业家,对自己的专业和Nordic Semiconductor的解决方案有着真诚而深厚的热情。几年前,谭晖先生出版了一系列关于Nordic Semiconductor解决方案的图书,因此当我们听到他计划出版涵盖最新低功耗蓝牙5.x及5G低功耗蜂窝物联网应用的nRF52、nRF53和nRF91等芯片的系列图书时,我们都非常感激和兴奋。 本书为该系列图书的第一本,将带领读者逐步了解基于多协议无线SoC芯片nRF52840开发低功耗蓝牙应用的过程,本书还深入介绍了低功耗分析和应用测试等更高级的内容,涵盖了在21天内完成低功耗蓝牙无线应用开发所需的知识点,如同从A到Z一样简单。 nRF52840是一款高度集成的超低功耗多协议无线SoC芯片,具有真正的并发多协议通信,不仅支持低功耗蓝牙,还支持Mesh网络、Thread、ZigBee、Matter、IEEE 802.15.4、ANT等协议和2.4 GHz私有协议。虽然这本书的重点是低功耗蓝牙5.x的开发,但书中介绍的开发工具、原则和方法也适用于其他无线协议的开发。 这本书向读者展示了如何在Nordic的SoC芯片上轻松地开始低功耗蓝牙的开发工作,希望读者能从中受益,并继续阅读本系列图书的其他书籍。 祝你好运,享受这本书吧! 鲍勃·布兰达尔 Nordic Semiconductor亚太区销售和营销副总裁 前 言 随着包括低功耗蓝牙在内的无线通信技术的不断发展,物联网的发展与应用驶上了快车道。低功耗蓝牙从4.0开始,就围绕着物联网的需求不断发展。事实上,基于低功耗蓝牙的物联网应用,已经渗透到了人们日常生活的多个方面。例如,改变短途出行生态、为低碳减排做出贡献的共享单车,就是典型的基于低功耗蓝牙技术的物联网应用,也是目前最大的移动物联网之一。我们每天都有可能接触到低功耗蓝牙技术的应用,如智能门锁、智能穿戴设备等,只是我们没有察觉到而已。 低功耗蓝牙发展到5.0以后,更是开启了物联网应用的大门。针对物联网的需求,低功耗蓝牙5.x增加了许多新特性,如长距离通信、高速率通信、扩展广播数据包、Mesh组网、AoA/AoD精准定位、LE Audio等。凭借日渐完善的协议和例程,低功耗蓝牙5.x开创了物联网应用的新时代。 低功耗蓝牙5.x的陆续发布,给物联网创新和智能硬件产品带来更多的应用场景和创新机会。例如,苹果公司发布了基于低功耗蓝牙5.x的AirTag和FindMy,元宇宙概念中基于虚拟现实的应用也需要大量与低功耗蓝牙5.x相关的技术和产品(Meta中的VR/AR头盔就采用了最新的低功耗蓝牙技术)。低功耗蓝牙5.x的诸多新特性为创新提供了丰富的例程基础及技术路线。创新与创造是企业发展的动力及源泉,当前的众多企业和研究机构都需要大量熟悉和掌握低功耗蓝牙5.x开发技术的人员。 与此同时,很多初学者(包括在校学生)和工程师希望掌握低功耗蓝牙5.x的开发技术,却不知如何更好更快地入门和提高。本书总结作者及其团队在低功耗蓝牙5.x开发方面的经验和积累,面向开发人员的关注点,可帮助读者快速掌握低功耗蓝牙5.x的开发技术。本书强调动手实践能力的培养,通过本书的学习,读者可以学习低功耗蓝牙5.x的原理知识,体验低功耗蓝牙5.x的产品开发过程,从而激发自身的学习兴趣和研究兴趣,实现“学习+创新+开发”的过程。 俗话说,实践出真知。本书的实践性强,从实际的开发来编排全书的内容,通过一个个经典的实验来详细介绍低功耗蓝牙5.x开发涉及的重要概念和知识点。读者通过学习、实践、理解、吸收、转化本书的知识点,就能有所收获,就能初步掌握低功耗蓝牙5.x的开发技术。假以时日,未来可期。 在学习本书的基础上,请开始你的第一个基于低功耗蓝牙5.x的项目设计与开发。 Nordic Semiconductor(Nordic)是一家专注于中、短距离无线技术和低功耗蜂窝物联网应用的半导体公司,是低功耗蓝牙解决方案的市场领导者,其产品占据了低功耗蓝牙市场的40%。作为与Nordic携手20多年的合作伙伴,深圳市蓝科迅通科技有限公司(迅通科技)是国内最早推广和应用低功耗蓝牙技术的机构之一,丰富并拓展了中、短距离无线通信技术和物联网技术在国内的应用与发展,也开创了很多成功的案例。迅通科技的研发团队在低功耗蓝牙技术领域的努力和积累奠定了本书的基础,他们的探索和经验可以帮助更多的人快速进入低功耗蓝牙领域。 本书由谭晖审定和统稿,参与本书实验设计和资料整理工作的有王荣静、战宇娟、苏金飞、张翔宇、王政华等。本书在编写过程中,Nordic首席执行官Svenn-Tore Larsen、Nordic全球市场总监Geir给予了大力的支持;Nordic亚太区市场及销售副总裁Bob、Nordic中国区团队Damien等给予了热心的帮助;Nordic中国区技术团队Kevin给予了支持与协助,并提供了很多建设性的意见,在此表示衷心的感谢! 由于作者水平有限,加之编写时间仓促,本书难免会有错误和疏漏之处,敬请广大读者及专家批评指正。 谭 晖 2022年1月5日
目 录 第1章 低功耗蓝牙5.x开发环境之搭建 (1) 1.1 基于Nordic nRF52840 DK开发环境之搭建 (1) 1.1.1 SES的搭建 (1) 1.1.2 Keil MDK的搭建 (8) 1.1.3 其他工具的安装 (9) 1.2 nRF52840 DK开发板上的烧写器介绍 (13) 1.2.1 简介 (13) 1.2.2 nRF52840 DK开发板简介 (13) 1.2.3 nRF52840 DK开发板的烧写方式 (13) 1.2.4 PTR9818介绍 (15) 1.2.5 PTR9818模块的固件烧写方式 (16) 1.2.6 APTR-xxxx-EVB低功耗蓝牙模块评估板 (18) 1.3 nRF5 SDK介绍和目录结构解读 (19) 1.4 SES集成开发环境的使用 (23) 1.5 如何将工程移植到不同的芯片 (26) 1.5.1 在SES中将nRF52832的工程移植到nRF52840 (26) 1.5.2 Softdevice协议栈介绍 (31) 1.5.3 Log打印功能 (36) 1.5.4 芯片选型表 (38) 第2章 实验1:低功耗蓝牙5.x SoC之nRF52840最小硬件系统 (41) 2.1 实验目标 (41) 2.2 nRF52840最小硬件系统电路 (41) 2.2.1 供电方式 (42) 2.2.2 内部电源稳压方式 (43) 2.2.3 时钟电路 (45) 2.2.4 匹配电路 (46) 2.2.5 去耦电容 (46) 2.2.6 USB电路 (46) 2.2.7 NFC电路 (47) 2.3 nRF52840硬件设计的注意事项 (48) 2.4 实验小结 (50) 第3章 实验2:低功耗蓝牙5.x广播的实现 (51) 3.1 实验目标 (51) 3.2 实验准备 (51) 3.3 背景知识 (51) 3.3.1 广播 (51) 3.3.2 广播数据包的格式 (52) 3.3.3 常见的广播内容 (52) 3.3.4 广播数据包的类型 (53) 3.4 实验步骤 (54) 3.4.1 低功耗蓝牙5.x广播的初始化 (54) 3.4.2 低功耗蓝牙5.x广播名称的修改 (55) 3.4.3 广播内容和广播参数的修改 (56) 3.4.4 代码实战 (60) 3.5 实验小结 (65) 第4章 实验3:低功耗蓝牙5.x双向通信的实现 (67) 4.1 实验目标 (67) 4.2 实验准备 (67) 4.3 背景知识 (67) 4.3.1 低功耗蓝牙5.x双向通信的基本概念 (67) 4.3.2 低功耗蓝牙5.x双向通信的连接建立过程 (70) 4.4 实验步骤 (70) 4.4.1 低功耗蓝牙5.x串口通信服务的实现 (71) 4.4.2 main函数的解析 (75) 4.4.3 协议栈初始化分析 (75) 4.5 低功耗蓝牙5.x的传输速率 (77) 4.5.1 传输速率的理论值 (77) 4.5.2 影响传输速率的主要因素 (79) 4.5.3 代码实例测试 (79) 4.5.4 实际测试 (81) 4.5.5 实验分析 (85) 4.6 开发调试工具 (85) 4.6.1 nrfjprog命令行工具 (85) 4.6.2 RTT打印Log (86) 4.7 资料学习 (87) 4.8 实验小结 (89) 第5章 实验4:添加电池电量服务 (91) 5.1 实验目标 (91) 5.2 实验准备 (91) 5.3 背景知识 (91) 5.4 实验步骤 (92) 5.5 应用固件的烧写和调试 (103) 5.5.1 编译和烧写 (103) 5.5.2 查看电池电量服务数据 (103) 5.5.3 添加电池电量服务的注意事项 (104) 5.5.4 实验观察 (104) 5.6 实验小结 (104) 第6章 实验5:添加私有服务 (105) 6.1 实验目标 (105) 6.2 实验准备 (105) 6.3 背景知识 (105) 6.4 实验步骤 (106) 6.4.1 移植库文件 (106) 6.4.2 修改sdk_config.h中相应的宏 (107) 6.4.3 初始化LBS (107) 6.4.4 修改LBS中LED的特性 (111) 6.4.5 修改按键的逻辑 (113) 6.5 应用的实验与测试 (114) 6.5.1 应用固件的烧写与测试 (114) 6.5.2 实验观察 (115) 6.6 实验小结 (115) 第7章 实验6:添加配对、绑定功能 (117) 7.1 实验目标 (117) 7.2 实验准备 (117) 7.3 背景知识 (117) 7.3.1 配对和绑定的定义 (117) 7.3.2 相关概念知识 (118) 7.3.3 绑定的流程 (119) 7.3.4 绑定的方式(等级) (120) 7.3.5 例程讲解 (120) 7.3.6 与绑定功能相关的常用API函数 (120) 7.4 实验步骤 (121) 7.4.1 绑定模块移植 (121) 7.4.2 在例程ble_app_hrs中添加NUS (122) 7.4.3 Passkey配对模式的实现 (124) 7.4.4 数字比较的实现 (125) 7.5 实验拓展 (127) 7.6 实验小结 (128) 第8章 实验7:低功耗蓝牙的主机扫描 (129) 8.1 实验目标 (129) 8.2 实验准备 (129) 8.3 背景知识 (129) 8.3.1 广播的概念 (129) 8.3.2 扫描的概念 (130) 8.3.3 主机扫描的原理 (130) 8.3.4 主动扫描和被动扫描 (131) 8.4 实验步骤 (131) 8.4.1 扫描例程讲解 (131) 8.4.2 扫描附近所有设备 (132) 8.4.3 筛选广播数据包中的数据 (134) 8.5 实验小结 (135) 第9章 实验8:低功耗蓝牙的主机连接 (137) 9.1 实验目标 (137) 9.2 实验准备 (137) 9.3 背景知识 (137) 9.3.1 连接的概念 (137) 9.3.2 连接的过程 (138) 9.3.3 连接的重要参数 (138) 9.3.4 连接参数的优化 (139) 9.3.5 iOS对连接参数的要求 (139) 9.4 实验步骤 (139) 9.5 实验小结 (141) 第10章 实验9:低功耗蓝牙主从一体的实现 (143) 10.1 实验目标 (143) 10.2 实验准备 (143) 10.3 背景知识 (143) 10.4 实验步骤 (144) 10.4.1 低功耗蓝牙主从一体功能的实现 (144) 10.4.2 低功耗蓝牙主从一体功能的演示 (149) 10.5 实验小结 (151) 第11章 实验10:低功耗蓝牙多主多从的实现 (153) 11.1 实验目标 (153) 11.2 实验准备 (153) 11.3 背景知识 (153) 11.4 实验步骤 (154) 11.4.1 低功耗蓝牙多主多从功能的实现 (154) 11.4.2 低功耗蓝牙多主多从功能的演示 (157) 11.5 实验小结 (158) 第12章 实验11:LE 2M PHY高速率通信的实现 (159) 12.1 实验目标 (159) 12.2 实验准备 (159) 12.3 背景知识 (159) 12.3.1 低功耗蓝牙LE 2M PHY高速率通信 (159) 12.3.2 低功耗蓝牙数据包的组成 (160) 12.3.3 低功耗蓝牙数据包的完整传输周期 (161) 12.3.4 低功耗蓝牙的数据吞吐率 (162) 12.3.5 低功耗蓝牙LE 2M PHY高速率通信的应用 (163) 12.4 实验步骤 (163) 12.4.1 SDK例程测试 (163) 12.4.2 LE 2M PHY高速率通信的实现 (166) 12.5 实验小结 (167) 第13章 实验12:低功耗蓝牙长距离通信的实现 (169) 13.1 实验目标 (169) 13.2 实验准备 (169) 13.3 背景知识 (169) 13.3.1 链路预算和无线电波传播损耗 (170) 13.3.2 长距离通信的编码 (171) 13.3.3 长距离通信的传输速率 (172) 13.3.4 长距离通信的应用创新 (173) 13.4 实验步骤 (173) 13.4.1 长距离通信的PHY配置和数据吞吐率测试 (173) 13.4.2 低功耗蓝牙5.x长距离通信的实现 (176) 13.4.3 长距离通信的测试 (177) 13.5 实验小结 (177) 第14章 实验13:低功耗蓝牙扩展广播数据包的实现 (179) 14.1 实验目标 (179) 14.2 实验准备 (179) 14.3 背景知识 (179) 14.3.1 低功耗蓝牙5.x扩展广播数据包的格式 (180) 14.3.2 低功耗蓝牙5.x扩展广播数据包的应用场景 (182) 14.4 实验步骤 (182) 14.5 实验小结 (184) 第15章 实验14:基于SPI驱动OLED (185) 15.1 实验目标 (185) 15.2 实验准备 (185) 15.3 背景知识 (185) 15.3.1 SPI简介 (185) 15.3.2 SPI的工作方式 (186) 15.3.3 OLED简介 (187) 15.4 实验步骤 (187) 15.5 实验小结 (193) 第16章 实验15:基于QSPI驱动LCD (195) 16.1 实验目标 (195) 16.2 实验准备 (195) 16.3 背景知识 (195) 16.3.1 QSPI简介 (195) 16.3.2 LCD模块简介 (196) 16.3.3 QSPI接口与LCD模块的连接 (196) 16.4 实验步骤 (198) 16.5 实验小结 (206) 第17章 实验16:基于FreeRTOS实现复杂应用 (207) 17.1 实验目标 (207) 17.2 实验准备 (207) 17.3 背景知识 (207) 17.3.1 FreeRTOS简介 (207) 17.3.2 在RTOS中自定义线程 (208) 17.3.3 RTOS的移植 (209) 17.4 实验步骤 (209) 17.5 实验小结 (214) 第18章 实验17:FDS的实现 (215) 18.1 实验目标 (215) 18.2 实验准备 (215) 18.3 背景知识 (215) 18.3.1 FDS简介 (215) 18.3.2 FDS的实现原理 (216) 18.3.3 FDS区域 (216) 18.3.4 FDS的操作类型 (217) 18.3.5 FDS的常用API函数简介 (217) 18.3.6 使用FDS的注意事项 (219) 18.4 实验步骤 (219) 18.4.1 FDS模块的移植 (219) 18.4.2 FDS存储功能的实现 (220) 18.5 实验小结 (225) 第19章 实验18:固件空中升级(OTA)的实现 (227) 19.1 实验目标 (227) 19.2 实验准备 (227) 19.3 背景知识 (227) 19.3.1 DFU简介 (227) 19.3.2 OTA简介 (229) 19.3.3 基于Nordic的SDK实现DFU的原理 (229) 19.4 实验步骤 (230) 19.5 实验关键代码与实验要点 (233) 19.5.1 ble_app_buttonless_dfu服务的关键代码 (233) 19.5.2 Bootloader程序的关键代码 (238) 19.5.3 实验要点 (241) 19.6 实验小结 (241) 第20章 实验19:基于串口的DFU实现 (243) 20.1 实验目标 (243) 20.2 实验准备 (243) 20.3 背景知识 (243) 20.4 实验步骤 (244) 20.5 实验要点 (247) 20.6 实验小结 (247) 第21章 实验20:基于低功耗蓝牙模块PTR9818的开发 (249) 21.1 实验目标 (249) 21.2 实验背景 (249) 21.3 实验配置 (250) 21.3.1 低频时钟源的配置 (250) 21.3.2 外设的配置 (251) 21.3.3 UART的配置 (253) 21.4 实验小结 (253) 参考文献 (255) 后记 (256)