第二章 开发环境搭建:选择合适的MCU与工具链
说实话,做蓝牙协议栈移植这件事,第一步往往就把人卡住了——开发环境没搭好。我见过太多朋友,兴致勃勃下载了SDK,结果编译报错一整天,最后连个LED都没点亮。嗯,这一章我们就来把这摊事理顺。
2.1 选MCU:nRF52还是CC26xx?
我个人习惯,先看项目需求再选芯片。不是越贵越好,也不是越便宜越合适。
| 对比项 | Nordic nRF52840 | TI CC2640R2F |
|---|---|---|
| 内核 | ARM Cortex-M4F (64MHz) | ARM Cortex-M3 (48MHz) |
| Flash/RAM | 1MB / 256KB | 352KB / 80KB |
| 蓝牙版本 | BLE 5.3 | BLE 5.1 |
| 协议栈 | SoftDevice / Zephyr | TI BLE-Stack |
| 典型价格 | ~$3.5 | ~$2.0 |
我在项目中遇到过一个问题:用CC2640做OTA升级,Flash空间差点不够用。后来换成nRF52840,空间宽裕多了。所以如果你要做复杂应用,比如同时跑蓝牙和Thread,我建议直接上nRF52系列。
2.2 IDE安装与配置:Keil、IAR、VS Code
IDE这东西,说白了就是个顺手的问题。我三种都用过,说说我的感受。
2.2.1 Keil MDK
Keil在ARM生态里是老大哥了。安装时注意两点:
- 版本选5.38以上,对Cortex-M4支持更好
- 记得装Device Family Pack,不然找不到芯片型号
我曾经因为没装nRF52的DFP,编译一直报"device not found",折腾了半小时才发现问题。
2.2.2 IAR Embedded Workbench
IAR的编译器优化确实强,代码体积能比Keil小10%-15%。但它的界面...嗯,有点复古。配置步骤:
- 安装IAR for ARM 9.40+
- 导入Nordic或TI的芯片支持包
- 设置Linker文件路径(这个容易忘)
2.2.3 VS Code + GCC
我个人现在最常用的是VS Code。免费、轻量、插件丰富。配置起来稍微麻烦点,但一劳永逸。
// 必要的VS Code插件
1. C/C++ (微软官方)
2. Cortex-Debug
3. Nordic Semiconductor (nRF Connect)
4. CMake Tools
// 编译工具链
arm-none-eabi-gcc (版本10.3以上)
2.3 SDK获取与编译:以Zephyr和Nordic SDK为例
SDK的选择,决定了你后续的开发效率。我两种都深度用过,给你讲讲区别。
2.3.1 Nordic SDK(nRF5 SDK)
这是Nordic官方的SDK,成熟稳定。获取方式:
- 官网下载:nRF5_SDK_17.1.0(最新稳定版)
- 或者用nRF Connect桌面版,一键下载
编译一个简单的BLE例子:
// 以Keil为例
1. 打开 examples/ble_peripheral/ble_app_uart/pca10056/s140/arm5_no_packs
2. 双击 .uvprojx 文件
3. 点击 Build (F7)
4. 如果报错,检查SoftDevice路径是否配置正确
我记得第一次编译nRF52的工程,报了一堆"undefined reference"。后来发现是SoftDevice的hex文件没烧进去。嗯,这里要注意:SoftDevice要先烧录,再烧应用固件。
2.3.2 Zephyr RTOS
Zephyr是Linux基金会维护的开源RTOS,对蓝牙协议栈支持很好。它的好处是:一次配置,多平台通用。
安装步骤:
# 1. 安装依赖(Ubuntu 22.04)
sudo apt install --no-install-recommends git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev
# 2. 获取Zephyr源码
west init ~/zephyrproject
cd ~/zephyrproject
west update
# 3. 安装Python依赖
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt
# 4. 编译nRF52840 DK的hello_world
cd ~/zephyrproject/zephyr
west build -b nrf52840dk_nrf52840 samples/basic/blinky
2.4 避坑指南:我踩过的那些坑
做开发环境搭建,说难不难,说简单也不简单。我总结几个常见问题:
- 路径不要有中文和空格——Keil和IAR对中文路径支持很差,我曾经因为桌面文件夹叫"蓝牙项目",编译死活过不去
- JLink驱动版本要匹配——新版JLink驱动可能不兼容旧版调试器,我遇到过V9调试器用V7.0驱动反而更稳定
- SDK版本别追新——nRF5 SDK 17.1.0比17.2.0更稳定,Zephyr 3.4 LTS比最新版bug少
最后说一句:环境搭建别急。我刚开始做蓝牙开发时,光搭环境就花了两天。但后面写代码、调试就顺畅多了。磨刀不误砍柴工,对吧?
下一章,我们开始真正动手——从零搭建一个BLE广播工程。