第二章 开发环境搭建:硬件平台选型、IDE安装配置、SDK获取与结构解析、调试工具准备

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,很多初学者卡就卡在这一步——工具链没配好,后面全是白搭。我见过太多人拿着开发板却点不亮第一个LED,原因往往是IDE版本不对、SDK路径有中文、或者驱动没装全。

咱们这节课的目标很明确:选一块合适的硬件平台,装好IDE,拿到SDK并看懂它的结构,最后把调试工具准备妥当。走完这一套,你就能踏踏实实开始写代码了。

2.1 硬件平台选型:Nordic、Dialog、TI怎么选?

做低功耗蓝牙手环,市面上主流的方案就三家:Nordic、Dialog、TI。我三个平台都用过,给你说说我的真实感受。

厂商 代表芯片 优势 劣势 适合场景
Nordic nRF52832 / nRF52840 生态最好,文档全,社区活跃,SDK成熟 价格偏高,功耗略高于Dialog 新手入门、量产产品、需要丰富外设
Dialog DA14531 / DA14695 功耗极低,BOM成本低,适合小体积 开发工具链较封闭,调试不如Nordic方便 超低功耗手环、纽扣电池设备
TI CC2640R2F / CC2652 射频性能强,协议栈稳定,工业级 SDK结构复杂,学习曲线陡 工业物联网、对稳定性要求高的产品

我个人建议:如果你是第一次做蓝牙手环,选Nordic nRF52832。为什么?因为它的SDK最友好,网上教程最多,遇到问题随便一搜就有答案。我当年第一个蓝牙项目就是用nRF51822做的,虽然芯片老,但生态帮了大忙。

你可能会问:「那Dialog功耗更低,为什么不选它?」嗯,这里有个坑。Dialog的SDK叫SDK5/SDK6,它的代码风格和主流嵌入式开发差别挺大,回调机制嵌套很深。我曾经花了两周才把DA14531的蓝牙广播调通,换成Nordic的话,两天就够了。

TI的CC26xx系列呢?射频性能确实好,但它的协议栈是ROM化的,你要用TI的专有工具配置。说实话,不太适合课程教学。所以咱们这门课,我以Nordic nRF52832为主平台来讲。你如果手头有nRF52840或者nRF5340,也完全没问题,API基本一致。

2.2 IDE安装配置:从下载到第一个工程

Nordic官方推荐的IDE是Segger Embedded Studio,简称SES。为什么不用Keil或IAR?因为SES对Nordic的SDK支持最好,编译快,而且免费版就够用。

安装步骤其实很简单,但我还是把关键点列出来:

  1. 下载SES:去Segger官网下载最新版,注意选ARM版本。我建议用5.xx版本,太新的版本有时和旧SDK不兼容。
  2. 安装:一路Next就行。但注意——安装路径不要有中文。我见过有人把SES装到「D:\软件\」下面,结果编译报错找不到头文件,折腾了半天才发现是中文路径的问题。
  3. 安装nRF命令行工具:这个工具包包含JLink驱动、nrfjprog烧录工具等。去Nordic官网下载nRF Command Line Tools,安装后记得把路径加到系统环境变量里。
  4. 验证安装:打开命令行,输入nrfjprog --version,如果能显示版本号,说明装好了。

小技巧:我第一次装SES时,发现编译例程总是报错「cannot find system_nrf52.h」。后来发现是SDK路径没设置对。在SES里打开Tools -> Options -> Building,把SDK的根目录填进去就好了。

配置完成后,咱们来验证一下。打开SES,点击File -> Open Solution,找到SDK里的examples/ble_peripheral/ble_app_blinky,打开这个工程。然后按F7编译。如果一切顺利,你应该能看到「Build succeeded」的提示。

2.3 SDK获取与结构解析

Nordic的SDK叫nRF5 SDK,目前最新是17.1.0。你可能会问:「为什么不直接用nRF Connect SDK(NCS)?」NCS是基于Zephyr的,功能更强,但学习成本也高。咱们这门课用nRF5 SDK,它更贴近底层,适合理解蓝牙协议栈的原理。

下载地址在Nordic官网,注册个账号就能下。下载后解压,你会看到这样的目录结构:

nRF5_SDK_17.1.0_ddde560/
├── components/          # 核心组件库
│   ├── ble/             # 蓝牙协议栈相关
│   ├── boards/          # 板级支持包
│   ├── drivers/         # 外设驱动
│   ├── libraries/       # 通用库
│   └── softdevice/      # SoftDevice固件
├── examples/            # 示例工程
│   ├── ble_peripheral/  # 蓝牙外设例程
│   ├── ble_central/     # 蓝牙主机例程
│   └── peripheral/      # 纯外设例程
├── external/            # 第三方库
├── integration/         # 集成测试
└── documentation/       # 文档

这里我要重点说一下components/softdevice这个目录。SoftDevice是Nordic的蓝牙协议栈固件,它运行在芯片的M4内核上,和你的应用程序是分开的。你的代码通过API调用SoftDevice的功能。说白了,SoftDevice就是一个黑盒子,你只管调用它的接口就行。

避坑指南:我曾经犯过一个错误——把SoftDevice的hex文件烧录错了版本。nRF52832用的是S132 SoftDevice,nRF52840用的是S140。如果你烧错了,蓝牙根本跑不起来。所以每次烧录前,一定先确认芯片型号和SoftDevice版本是否匹配。

再看examples目录。这里面有几十个例程,咱们最常用的是ble_peripheral下面的。比如ble_app_blinky是一个简单的蓝牙LED控制例程,ble_app_uart是串口透传例程。我建议你从ble_app_blinky开始,它代码量少,逻辑清晰,适合理解蓝牙广播、连接、服务这些基本概念。

2.4 调试工具准备

做嵌入式开发,调试工具就是你的眼睛和耳朵。没有它们,你就是在盲写代码。

必备的调试工具有这么几样:

  • JLink调试器:Nordic开发板通常自带JLink OB,直接用USB线连电脑就行。如果你用自己画的板子,建议买一个独立的JLink V9或V10,稳定可靠。
  • 串口工具:推荐Putty或SecureCRT。手环的日志输出一般通过UART,波特率通常是115200。我习惯用Putty,轻量、免费、够用。
  • 蓝牙抓包工具:这个比较关键。推荐用nRF Sniffer,配合Wireshark使用。Nordic官方有专门的nRF Sniffer固件,烧录到另一块nRF52832开发板上,就能抓取空中的蓝牙数据包。
  • 逻辑分析仪:如果你要调试I2C、SPI这些外设,逻辑分析仪是必须的。入门级的Saleae Logic 8就够用,或者用国产的梦源逻辑分析仪也行。

我的经验:调试蓝牙连接问题时,nRF Sniffer + Wireshark是黄金组合。有一次我做的设备总是连接不稳定,查了两天代码都没找到原因。最后用Sniffer抓包一看,发现是连接间隔参数设置不合理,导致手机端频繁丢包。改了一个参数就解决了。所以,抓包工具一定要学会用。

调试工具的连接方式也很简单。开发板通过USB连电脑,JLink会自动识别。串口的话,开发板上通常有VCP(虚拟串口),插上USB后电脑会多出一个COM口。在设备管理器里找到它,记下端口号,然后在Putty里设置好波特率就能用了。

注意:如果你用的是Windows 10或11,JLink驱动可能会被系统自动安装,但有时会装成通用驱动导致无法识别。这时候需要手动安装Segger官方的JLink驱动。我遇到过好几次,插上开发板后设备管理器里显示的是「未知设备」,重装驱动就好了。

好了,开发环境搭建这部分就讲到这里。你跟着步骤走一遍,把SES装好、SDK解压、调试工具连上,然后试着编译一下ble_app_blinky。如果一切顺利,下一章咱们就开始写第一个蓝牙程序——让手环发出广播信号。

嗯,对了,如果你在搭建过程中遇到任何问题,别急着放弃。蓝牙开发就是这样,环境配置往往比写代码更磨人。但只要你把这一步走通了,后面的路就顺了。