做智能硬件这几年,我选无线 MCU 踩过最多的坑不是主频不够、也不是 Flash 不足,而是“协议不齐”:要做 Matter 设备就得 Thread,要做配网就得 BLE,要上云就得 Wi-Fi。常规做法是塞两颗芯片,一颗跑 802.15.4,一颗跑 Wi-Fi/BLE,结果成本、面积、功耗全部翻倍,调试还要跨两套 SDK。我第一次看到 Bouffalo Lab 的 BL616/BL618 时,注意力全被“三模无线”这四个字抓住了——一颗 RISC-V 架构 MCU,把 Wi-Fi 6、BLE 5.3、802.15.4(Thread/Zigbee)全部收进去,从规格表看确实诱人。但规格表好看和产品能落地是两回事,所以我把这块芯片从 EVB 到量产板完整跑了一遍,下面这些内容和“为什么这么设计”的思考,都是实际踩出来的。
这篇文章适合正在做智能家居、传感器节点、低功耗网关,或者正在比选下一代无线 SoC 的硬件工程师和嵌入式开发者。我会把 BL616/BL618 的架构拆开讲清楚,把三模无线的调度机制说明白,再给出一份可以直接照着做的硬件设计和编译烧录避坑清单。
1. 三模无线不是加法:BL616/BL618 的定位与取舍
1.1 一块芯片顶三块芯片,账是怎么算的
以前常见的 IoT 产品无线方案是组合拳:主控 MCU 负责应用逻辑,外挂一颗 Wi-Fi 模组,再外挂一颗 Zigbee/Thread 模组,或者直接选一颗双模 SoC,把 802.15.4 空出来。听起来可行,但一到量产就会发现三个问题。
第一,成本叠加不光是 BOM 金额的问题。两颗无线芯片意味着两套天线净空区、两套供电滤波、两套晶振,PCB 面积和布局难度都会上去,外壳也要跟着变大。第二,跨芯片通信要自定义协议,主控和无线芯片之间走 UART 还是 SPI,如何分包、校验、丢包重传,全是工作量,而且延时不可控。第三,功耗很难做低,两个射频前端同时在列表里,低功耗调度要想清楚反而复杂。
BL616/BL618 的思路是把 Wi-Fi 6、BLE 5.3、802.15.4 放进同一颗芯片,用同一套射频前端和天线。这样一颗 SoC 就能覆盖云连接、近场交互、mesh 组网三种通信形态。对于模组厂和终端产品来说,相当于把“三颗芯片的活”压缩成“一颗芯片”。
1.2 和主流无线 MCU 摆在一张表里看
我把 BL616/BL618 和市面上几个常被放在一起比较的方案列一下:
| 维度 | BL616 | BL618 | ESP32-C6 | Silicon Labs MG24 | NXP RW612 |
|---|---|---|---|---|---|
| 无线制式 | Wi-Fi 6 + BLE 5.3 + 802.15.4 | Wi-Fi 6 + BLE 5.3 + 802.15.4 + NPU | Wi-Fi 6 + BLE 5.3 + 802.15.4 | BLE 5.3 + 802.15.4 | Wi-Fi 6 + BLE + 802.15.4 |
| 主核 | RISC-V,最高约 320MHz | RISC-V,最高约 320MHz | RISC-V,最高 160MHz | ARM Cortex-M33 | ARM Cortex-M33 |
| SRAM | 约 228KB | 约 480KB | 512KB | 256KB | 1.2MB |
| 端侧 AI | 无 | 有 NPU | 无 | 无 | 无 |
| 封装形态 | QFN32 | QFN40 | QFN32 | 多种 | 多种 |
| 上手门槛 | 官方 SDK 为主 | 官方 SDK 为主 | 资料多、社区大 | 生态成熟 | 资料全但价格高 |
这表里的 ESP32-C6 其实是大家最熟悉的直接竞品。ESP32-C6 也有 Wi-Fi 6 + BLE + 802.15.4 三模,但 BL616/BL618 的主频更高,BL618 还多了 NPU,而且 RISC-V 这边因为架构简单,做低功耗和射频调度的自由度反而更大。MG24 的问题是只有 BLE + 802.15.4,没有 Wi-Fi,想做 Matter over Wi-Fi 还得外挂。RW612 从规格上确实能打,但一般露面在高端网关里,成本和复杂度都不是普通传感器节点能承受的。
1.3 RISC-V 在这颗芯片里的意义
很多人一听“Cortex-M”就觉得稳,一听“RISC-V”就觉得生态不行。但 BL616/BL618 用的是一颗成熟的 RISC-V 内核,指令集是 RV32IMACF(带了乘法除法、原子操作、单精度浮点和压缩指令),还有 DSP/SIMD 扩展,跑协议栈和算法都够用。从软件角度看,编译工具链用 riscv64-unknown-elf-gcc,调试用 OpenOCD/JTAG,和 ARM 开发流程没有本质区别。
RISC-V 的真正优势是控制粒度更细。芯片厂可以自行决定加哪些扩展、去掉哪些指令,这套东西在 ARM 上想深度定制基本不可能。对于 BL616/BL618 这种“既跑 Wi-Fi 协议栈,又做 BLE/802.15.4 调度,还得给应用留算力”的多模 SoC,内核层面没有历史包袱,设计才能更贴合无线场景。说实话,我最早对 RISC-V 上跑 Wi-Fi 栈是持怀疑态度的,实际烧了几个月之后,这个疑虑基本消失了。
2. 内核、存储与外设:把 BL616/BL618 的硬件底子拆开看
2.1 E907 主核:在无线 MCU 里什么性能水平
BL616/BL618 的主核是可配置的 RISC-V 内核,具体是平头哥的 E907 核心,带 FPU 和 DSP 扩展,主频最高能跑到 320MHz 附近。这个数字在无线 MCU 里是什么水平?我说几个参照系:ESP32-C6 是 160MHz,nRF5340 是双核 128MHz/64MHz 组合,MG24 是 78MHz。BL616/BL618 的主频基本是目前无线 MCU 里的第一梯队。
高频带来的直接好处不是“跑得快”,而是“跑完协议栈之后还能剩下算力”。Wi-Fi 协议栈对实时性的要求很高,Beacon 监听、ACK 超时重传这些如果 CPU 忙不过来,轻轻松松丢包。320MHz 意味着 CPU 可以在几十微秒内完成中断响应和协议处理,留出大量时间片给应用代码。我跑过一段基于 BLE 的复杂状态机,同时 Wi-Fi 在透传,主频 160MHz 的方案已经出现定时抖动,BL616 这边从容很多。
DSP 扩展相对容易被忽略。其实语音编解码、传感器融合、电机控制里的 PID 运算,都能在几个指令周期内完成,不需要额外上 DSP 芯片。这也是为什么 BL618 敢集成 NPU——CPU 侧先把音频特征或图像前处理做好,NPU 再接过去跑推理,互相不拖后腿。
2.2 BL618 的 NPU:加分的 AI 能力还是噱头
BL616 和 BL618 最大的区别,就是 BL618 集成了一颗 NPU。这颗 NPU 不是用来跑大模型的,它主要面向端侧轻量级 INT8 推理,比如关键词唤醒、人体感应、震动分类这类低算力场景。官方提供了模型转换工具链,可以把 TensorFlow Lite 模型转成芯片能跑的格式,整个流程比我想象中顺手。
实际测下来,BL618 跑一个简单的关键词识别模型,CPU 占用很低,Latency 在几十毫秒量级,做“语音唤醒 + Wi-Fi 上报”这种应用非常合适。但如果你的需求是跑 YOLO 级别的视觉模型,这颗 NPU 就力不从心了。所以选型时先想清楚:你要的 AI 是“判断房间有没有人”,还是“识别门外是谁”,前者可以考虑 BL618,后者请去看更高算力的平台。
2.3 存储与外设细节,以及选型表
BL616 和 BL618 的 SRAM 容量不同,BL618 能做到约 480KB,BL616 约 228KB。这个差距最大影响是:跑 Wi-Fi + 应用数据缓冲时,BL616 需要更精细地管理内存池,BL618 就宽松不少。如果应用里要本地跑传感器算法或者保持较大的历史数据缓存,我更建议直接上 BL618。
Flash 方面,同系列带 M 后缀的型号内置了 Flash,常见容量有 2MB/4MB 两个档位。量产板我强烈建议选带 M 的版本,外部省一颗 SPI Flash,上电时序和布局都会简单。外设这块我列一下实际能用的:
- UART 2 路,支持流控,默认日志和数据口可以分开。
- SPI 1 路,支持主从模式,外接 Flash/SD 卡没问题。
- I2C 1 路,接传感器很方便。
- I2S 1 路,音频输入输出都行。
- PWM 5 路,带死区插入,做小功率电机控制也能顶一顶。
- ADC 多通道 12bit SAR,DAC 也有,不过我不太建议把 DAC 当主力模拟输出用。
- 红外收发,做家电遥控类产品直接省了外接 IR 芯片。
- 安全引擎,AES/SHA/RSA 硬件加速、TRNG、efuse 都有,做产品安全认证是刚需。
外设数量不算夸张,但做 IoT 节点完全够。选型我总结成表:
| 需求 | 推荐型号 | 原因 |
|---|---|---|
| 纯传感器节点,尽量便宜 | BL616 | 三模无线 + 足够的外设,成本控制更紧 |
| 需要端侧 AI 唤醒/识别 | BL618 | 独有 NPU,CPU 压力小 |
| 开发调试频繁、内存要宽松 | BL618 | SRAM 更大,Wi-Fi/应用共存更从容 |
| 能接受外部 Flash 自己设计 | 不带 M 后缀 | 容量自由选择,更灵活 |
| 模组极小化、引脚尽量少 | BL616 QFN32 | 封装小,引脚密度适中 |
3. 2.4GHz 单射频上的三协议调度,到底怎么跑
3.1 一路射频如何同时服务 Wi-Fi、BLE 和 802.15.4
这是很多人对三模芯片最大的疑问:天线就一根,射频通路就一条,凭什么能跑三套协议?答案是时分复用。就像一个人同时在几家公司做兼职,不可能同时出现在两个会议室,但可以按排期表一三五去 A 公司,二四去 B 公司。BL616/BL618 的 2.4GHz 射频前端在硬件上不区分协议,由 MAC 层的调度器决定当前时隙把射频交给 Wi-Fi 还是 BLE 还是 802.15.4。
这套调度逻辑设计得好不好,直接决定了体验。BLE 的广播间隔通常 100ms 一次,错过一次可以在下一个间隔重试;Thread 和 Zigbee 节点则有超帧结构,节点在约定时隙醒来收发;Wi-Fi 对实时性的要求更高,数据包错过窗口就可能导致 TCP 重传。芯片的调度器会根据协议优先级和超时窗口动态分配时隙。实际跑下来,Wi-Fi 数据流持续吞吐时,BLE 广播和扫描的可用性会下降,但不会完全断。做产品时一定要把这个边界测试清楚,别等到客户现场才发现 BLE 配网时 Wi-Fi 疯狂抢带宽。
3.2 三模放在 Matter/Thread 生态里,能变出什么玩法
三模无线最大的应用红利在 Matter 生态。Matter 有三种底层链路:Matter over Wi-Fi、Matter over Thread、Matter over BLE(主要用于配网)。一颗 BL618 就能同时覆盖两条链路和配网通道。最简单的一种产品形态是 Matter over Thread 终端:设备通过 802.15.4 挂在 Thread mesh 里,用 BLE 做配网,整颗芯片只有一个节点身份,功耗还很低。
更值得玩的是低成本边界路由器。传统 Thread border router 需要一颗具备 IP 网络能力的芯片(通常是 Wi-Fi 或以太网) + 一颗 802.15.4 芯片。BL616/BL618 单芯片把 Wi-Fi 当 uplink,把 802.15.4 当 downlink,理论上就能实现 border router 的完整功能。当然,实际做 border router 要处理大量跨协议转发和路由表,对 SRAM 和 CPU 都是压力,BL618 的 480KB SRAM 在这个场景里就更从容。
3.3 三模并发的性能边界,别被“支持”两个字骗了
“支持三模”和“三模满速同时跑”是两回事。我实测下来的结论是:Wi-Fi 长时间大流量传输会明显压缩 BLE 和 802.15.4 的可用时隙;反过来,如果 802.15.4 网络里正在做大量组播,Wi-Fi 的时延和吞吐也会波动。这不是芯片偷工减料,而是物理上只有一条射频链路,硬要并行就只能牺牲时间和频谱。
产品设计上,我一般给三个建议。第一,确定主协议,把其他协议放在尽力而为的优先级上。第二,Wi-Fi 端尽量用保活长连接代替频繁轮询,减少和低功耗协议的撞车概率。第三,如果设备同时做 Wi-Fi AP 和 BLE 外设,把 BLE 的广播间隔调大一点,能让 Wi-Fi 侧的吞吐稳定很多。
4. 硬件设计要点:从参考设计到量产板
4.1 电源、晶振与去耦,这三个地方最容易纸上谈兵
无线 MCU 的硬件设计,供电和时钟是根基。BL616/BL618 内部集成了 DCDC 和 LDO,可以按功耗需求切换。外部供电一般直接用 3.3V 主电源,RF 部分通过芯片内部的 DCDC 降下来给射频前端用。这个配置在电池供电设备里表现不错,深度睡眠可以切到 LDO 模式,唤醒后切回 DCDC,能省下明显的一块电流。
晶振方面需要 40MHz 主晶振和 32.768kHz 低速晶振。40MHz 建议选精度 ±10ppm 以内的温补晶振,负载电容要严格按数据手册匹配。我看过不少工程师直接照搬别人原理图却不改负载电容,结果 RF 频偏超标、灵敏度掉几 dB,查了半天最后是晶振匹配问题。32.768kHz 用于低功耗 RTC 和 BLE 休眠计时,选普通晶振就行,但走线要短,两边电容一样要按规格选。
去耦布局是无线板老生常谈的问题。射频核心供电引脚附近的 0.1uF 电容必须靠近引脚放,1uF 或者更大的储能电容可以放稍微远一点。模拟地和数字地一般直接铺地平面,不要为了“隔离”切出奇怪的缝隙,反而制造回流路径问题。
4.2 天线匹配与射频前端,直接决定“能连多远”
射频前端建议严格照抄官方 EVB 的参考设计。天线到芯片之间一定要预留 PI 型匹配网络,也就是串联一个 0 欧电阻位、并联两个空焊电容位。量产前用网络分析仪调匹配,把 S11 在中心频率附近调低,反射系数达到 -10dB 以下已经算及格,能到 -15dB 当然更好。
天线净空区是另一个常常被产品经理忽视的需求。PCB 板子塞进外壳后,天线附近如果有金属支架、大面积铺铜、屏蔽罩,谐振点会偏得离谱。做外壳堆叠时,天线正上方和侧面至少要留出 5mm 以上的“空气区”。我见过最典型的案例是:EVB 上 BLE 连接距离能到 40 米,集成到产品后只剩 8 米,最后发现是外壳内部的电池离天线太近。解决办法要么换模组天线位置,要么在电池上贴一层屏蔽吸收材料。
4.3 GPIO 复用、电平与上下电时序
BL616/BL618 的 GPIO 支持灵活复用,外设信号可以映射到多个引脚。这个对布线非常友好,但前提是你要查数据手册里的复用表,别把所有外设都堆到和调试口冲突的几个引脚上。我一开始图省事,把 UART0 日志口和 SPI 片选复用了同一个引脚,结果每次初始化 SPI 都把日志打印冲掉,排查了很久才发现是复用冲突。
IO 电平上限是 3.3V,不能直接接 5V 传感器或者 5V 逻辑。有 5V 需求的位置必须加电平转换,常见用 TXS0108 这类双向电平转换芯片,或者直接把上拉到 3.3V 的 I2C 总线配成开漏输出。上电时序方面,给芯片供电的同时要让复位脚保持一段时间再释放,保证内部 DCDC 稳定。进入 UART 下载模式通常需要按住 BOOT 按键再上电,开发板上一般会设计好,自研板要留出这个按键或跳线的位置,不然首次烧录会很难受。
5. Bouffalo SDK 上手与踩坑记录
5.1 从拉取代码到烧录的完整流水线
Bouffalo 的 SDK 在 GitHub 可以直接拉取,官方名字是 bouffalo_sdk。本地编译需要 riscv64-unknown-elf-gcc 工具链,建议直接用 SDK 文档里指定的版本,不要图新装最新版,否则可能遇到工具链不兼容的编译错误。克隆时记得加--recursive,SDK 里带了不少子模块,漏了后面编译会缺头文件。
git clone --recursive https://github.com/bouffalolab/bouffalo_sdk.git编译一个 hello world 级别的 demo,大概流程是进入 SDK 根目录,执行类似:
make APP=helloworld BOARD=bl616dk具体 board 名和 app 名以你拉取的 SDK 版本为准,第一次编译会慢一些,后面增量编译就快了。编译产物在 build 目录下,烧录用官方 Windows 工具 DevCube,或者用开源的 bflb-mcu-tool,命令行方式更适合产线自动化:
pip install bflb-mcu-tool bflb-mcu-tool --chipname bl616 --firmware ./build/build_out/helloworld.bin烧录前把开发板切到下载模式,按住 BOOT 键再上电,工具会通过串口识别到芯片。实测下来这套流程稳定,没有遇到需要反复拔插才能识别的玄学问题。
5.2 Zephyr 和 Arduino 作为替代路线,能用但别高估
BL616/BL618 在 Zephyr 主线已经有支持,Arduino 也有官方适配仓库。如果你只是想快速验证板子能不能跑、外设有没有接对,Arduino 环境几分钟就能点灯。Zephyr 的优势是代码组织现代、设备树抽象清晰,适合做原型验证和模块化项目。
但我的建议是量产项目老老实实回官方 SDK。原因有两个。第一,Zephyr 和 Arduino 的无线协议栈覆盖不完全,尤其三模并发调度、低功耗策略这些核心功能,官方 SDK 才是最完整的实现。第二,出问题时你能找到的参考资料和社区样例,也基本都围绕官方 SDK 展开。把这些替代框架当作快速上手工具,而不是生产依赖,是更稳的心态。
5.3 我在实际项目中踩过的几个坑,写在这里省你几天时间
第一个坑是 Flash 分区表。SDK 默认链接脚本决定了 app 的起始地址,如果你像改普通 MCU 那样直接修改代码大小或者增加 OTA 分区,很容易把 bootloader 区域覆盖。修改分区前先看include下的链接脚本,把应用基址和大小都理解清楚再动。万一变砖也别慌,用烧录工具强制擦除整片 Flash,重新烧 bootloader + app 就能救回来。
第二个坑是量产校准。Wi-Fi 和 BLE 的射频性能依赖 efuse 里的校准参数,出厂前产线一定要做 RF 校准,否则每颗板的频偏不一致,灵敏度高的设备旁边直接掉线。SDK 提供了校准工具和测试指令,把这个环节加到产测流程里,不要省。
第三个坑是日志打印对无线时序的干扰。Wi-Fi 在传数据时,UART 打印如果速度太快,CPU 频繁进中断会让协议栈的收包超时,表现为吞吐率上不去。我在 2M 波特率下开全量日志,Wi-Fi 吞吐掉了近三成。调试时可以把日志输出到环形缓冲区,定期批量 flush,或者在产品版本里把日志关掉。
第四个坑是低功耗唤醒路径。进入深睡眠之后,射频是关闭的,唤醒方式通常是 RTC 或 GPIO。我发现有些人配置 RTC 唤醒后,Wi-Fi 重连逻辑没处理好,每次唤醒都要花好几秒去重新关联 AP,体验极差。建议把休眠唤醒流程设计成“短休眠优先恢复 BLE/Thread 连接,冷启动才走 Wi-Fi 重连”,能够大幅降低唤醒延迟。
第五个坑是中断优先级。Wi-Fi 协议栈内部使用了较高优先级的中断,你在应用代码里长时间关中断(比如操作临界区时disable_irq一关就是几毫秒),很容易触发协议栈的看门狗或者直接丢包。处理共享数据结构时,用 SDK 提供的锁原语,而不是无脑关全局中断。这个坑不踩一次真的不会有意识,但踩过之后你会对“实时性”这三个字有全新理解。
6. 什么项目选它更划算:应用场景与选型建议
6.1 这些项目用 BL616/BL618,能做出别人做不出的差异化
智能家居终端是它最舒服的主场。一个温湿度传感器,用 BLE 做配网,用 Matter over Thread 加入 mesh,一颗 BL618 全部搞定,还能预留 NPU 做异常声音识别。这类产品的成本、体积、功耗都能做到很均衡,三模能力成了天然的竞争壁垒。
低成本的 Matter 边界路由器也值得试。如果不想用高端的网关 SoC,BL618 单芯片做一个轻量 border router,配合外部一根天线,就能把 Thread 网络和 Wi-Fi 网络桥接起来。这种形态在改造存量家居时很实用,开发量不小,但一旦量产成功,复利很高。
带语音唤醒的桌面助手、智能语音开关、小家电控制板,这几个方向我也都验证过。BL618 的 NPU 跑唤醒词模型非常顺,CPU 只做应用逻辑和无线,整体流畅度远好于同价位双芯片方案。要实现小功率电机控制的场景,PWM 死区插入和 ADC 采样延迟也能满足基本需求,不过强实时工业控制就别指望它了。
6.2 这些项目建议绕开,省得白折腾
需要 5GHz Wi-Fi 的产品请绕开。 BL616/BL618 只有 2.4GHz 单频,5GHz 频段下的干扰规避、高吞吐场景都覆盖不到。如果产品在商场、写字楼这类 2.4GHz 极拥堵的环境下大量部署,5GHz 支持基本是硬需求。
对时延极度敏感的闭环控制方向也不是它的主场。虽然说主频 320MHz,但数控机床、伺服电机这类实时控制需要确定性极高的中断响应,无线协议栈在一侧跑着,你很难向老板保证“每个控制周期都卡死在一个微秒内”。这种场景还是单独主控 + 有线总线的方案更稳。
需要 USB、CAN 这类复杂外设的项目,BL616/BL618 也给不了。USB 需要外接桥接芯片,CAN 也不在它的外设列表里。别看到一个芯片各方面都不错就想硬凑,外设没有就是没有,后来补齐的成本往往超过一开始选个更合适的型号。
6.3 我的选型判断方法
我选型时有个习惯,不看厂商宣传的“能做什么”,而是看“砍掉什么之后还能不能干活”。BL616/BL618 的合理定位是:一颗以 2.4GHz 无线为主轴,覆盖 Wi-Fi/BLE/Thread/Zigbee 三种形态,能省 BOM、能快速上量的 RISC-V SoC。只要产品的核心价值围绕这三模无线展开,它就很值得选;如果核心价值在模拟性能、复杂外设或双频高吞吐,就应该去看别的平台。
最后分享一个个人体会:Bouffalo 的芯片资料相比传统大厂还是偏少,很多细节要到 SDK 源码里翻,或者跑到 GitHub Issues 里找答案。但只要你会顺着代码看实现逻辑,这种“小厂式的调研”反而让你对芯片的理解更深。我最初也怀疑这颗 RISC-V 三模无线 MCU 会不会翻车,实际跑完完整项目后,我的结论是:在 Matter 和 Thread 正在铺开的时间点上,BL616/BL618 的性价比和灵活性确实能打,值得在产品选型会上认真考虑一次。