返回博客
嵌入式产品开发全流程 —— 带你入行嵌入式

嵌入式产品开发全流程 —— 带你入行嵌入式

引言

你每天都在和嵌入式产品打交道——手上的智能手环、桌上的路由器、口袋里的蓝牙耳机、车里的行车记录仪、家里的智能门锁。这些产品内部都有一颗或多颗芯片在运行着专门编写的程序,这就是嵌入式系统。

嵌入式系统(Embedded System)是指嵌入在更大系统中、为特定功能设计的计算机系统。和 PC、手机不同,嵌入式系统通常只做一件事(或一组相关的事),但要求做得可靠、省电、成本低

嵌入式工程师的工作远不止写代码。一个嵌入式产品从创意到量产,涉及需求分析、芯片选型、硬件设计、驱动开发、应用编程、测试联调、量产烧录等多个环节。本文将完整梳理这个流程,帮助你建立对嵌入式产品开发的全局认知。

嵌入式产品开发的完整生命周期

一个嵌入式产品从 0 到 1 的完整流程:

需求定义
   ↓
方案选型(MCU、传感器、通信模块、电源方案)
   ↓
硬件设计(原理图 → PCB Layout → 打样)
   ↓
硬件验证(焊接、基本功能测试)
   ↓
BSP / 驱动开发(启动代码、外设驱动)
   ↓
应用层开发(业务逻辑、协议栈、UI)
   ↓
软硬件联调(功能调试、性能优化、功耗调优)
   ↓
测试验证(功能测试、可靠性测试、EMC、认证)
   ↓
量产准备(产测固件、烧录方案、质检流程)
   ↓
批量生产
   ↓
售后维护 / OTA 升级 / 下一代迭代

实际项目中,这些阶段不是严格串行的——硬件设计阶段软件工程师就在基于评估板开发驱动,软件开发阶段硬件可能还在改版。敏捷迭代、并行推进是常态。

需求分析与方案选型

从产品需求到技术指标

产品经理说"做一个智能手环",嵌入式工程师需要把模糊的产品需求转化为明确的技术指标:

产品需求技术指标
显示时间和步数0.96 寸 OLED 显示屏,SPI/I2C 接口
计步和运动检测三轴加速度计(如 LIS2DH12),采样率 50Hz
蓝牙连手机BLE 5.0,支持 GATT Profile
续航 7 天电池 ≥ 120mAh,系统平均功耗 < 50μA
防水IP67,结构密封设计
零售价 ¥99BOM 成本控制在 ¥25 以内

MCU/SoC 选型

嵌入式的"大脑"是 MCU(微控制器)或 SoC(片上系统)。选型考虑因素:

处理器内核

  • ARM Cortex-M0/M0+:最低功耗,适合简单传感器节点
  • ARM Cortex-M4:主流选择,带 FPU 和 DSP 指令,适合中等复杂度产品
  • ARM Cortex-M33:带 TrustZone 安全特性,适合安全敏感场景
  • RISC-V:新兴架构,无授权费,国产芯片越来越多采用

常见 MCU 系列

厂商系列特点典型应用
NordicnRF52/nRF53BLE 一体化,低功耗可穿戴、IoT
STMicroelectronicsSTM32型号极多,生态完善工业控制、消费电子
EspressifESP32Wi-Fi + BLE,性价比高智能家居、IoT
兆易创新GD32STM32 兼容,国产替代各类应用

选型决策树

需要 BLE?
  ├─ 是 → 需要超低功耗?
  │        ├─ 是 → Nordic nRF52 系列
  │        └─ 否 → ESP32-C3 / 其他 BLE SoC
  └─ 否 → 需要 Wi-Fi?
           ├─ 是 → ESP32 系列
           └─ 否 → STM32 / GD32 通用 MCU

外设选型

MCU 确定后,围绕它选择外围器件:

  • 传感器:加速度计、陀螺仪、温湿度、心率、气压等。关注接口类型(I2C/SPI)、功耗、精度
  • 通信模块:如果 MCU 不自带无线,需要外挂模块(如 4G 模组、LoRa 模组)
  • 显示屏:OLED、TFT LCD、电子墨水屏。关注分辨率、接口、功耗
  • 电源管理:LDO 或 DC-DC 转换器、充电管理 IC(如 SGM41511)、电池保护电路
  • 存储:外部 Flash(SPI NOR Flash)用于存储固件、日志、配置数据

BOM 成本评估

嵌入式产品对成本极其敏感。一个 ¥99 零售价的手环,BOM(物料清单)通常要控制在 ¥25 左右。需要在功能和成本之间反复权衡——能用 MCU 内置 ADC 就不外挂 ADC 芯片,能用 SoC 集成的射频就不外挂通信模组。

硬件设计

原理图设计

硬件工程师使用 EDA 工具(如 Altium Designer、KiCad、立创 EDA)绘制原理图。原理图是产品的"电路蓝图",定义了所有器件之间的电气连接。

一个典型嵌入式产品的原理图包含以下模块:

┌─────────────────────────────────────────────┐
│                  电源模块                      │
│  USB/电池 → 充电 IC → LDO/DCDC → 各路电压      │
└─────────────┬───────────────────────────────┘
              ↓
┌─────────────────────────────────────────────┐
│                  MCU 核心                      │
│  晶振、复位电路、去耦电容、调试接口(SWD)        │
└──┬──────┬──────┬──────┬────────────────────┘
   ↓      ↓      ↓      ↓
 传感器  显示屏  Flash  通信模块
(I2C)   (SPI)  (SPI)   (UART/SPI)

关键电路设计要点

  • 电源:每个 IC 的 VCC 引脚附近需要去耦电容(通常 100nF + 10μF),电源轨之间需要适当隔离
  • 晶振:负载电容必须与晶振标称值匹配,走线尽量短,远离高频信号
  • 复位:RC 复位电路确保上电时序正确,有些 MCU 内置 POR(Power-On Reset)
  • 调试接口:保留 SWD(Serial Wire Debug)接口,至少引出 SWDIO、SWCLK、GND 三个引脚

PCB Layout

原理图完成后,进入 PCB 布局布线阶段。这是把电路从纸面变成实物的关键步骤:

  • 布局:电源模块集中放置,敏感信号(晶振、RF)远离干扰源,接口器件靠近板边
  • 布线:电源线加粗(通常 ≥ 0.3mm),高频信号控制阻抗(50Ω 微带线),差分对等长匹配
  • 铺铜:大面积铺地铜,降低地阻抗,改善 EMC 性能
  • 层叠:简单产品用 2 层板,复杂产品用 4 层或 6 层板(更好的信号完整性和 EMC)

打样与硬件验证

PCB 设计完成后发给板厂打样(通常 3-5 天),拿到裸板后焊接元器件,进行硬件基本验证:

  1. 电源验证:各路电压是否正确,纹波是否在允许范围内
  2. MCU 启动:能否通过 SWD 连接调试器,能否烧录测试固件
  3. 外设通信:I2C、SPI 总线波形是否正常,能否读到传感器 ID
  4. 射频测试(如有):BLE 广播是否正常,发射功率和频偏是否达标

硬件验证阶段发现的问题可能需要改版(修改原理图和 PCB),一个产品经历 2-3 次改版是常态。

BSP 与底层驱动开发

硬件板子到手后(甚至之前就在评估板上),软件工程师开始 BSP(Board Support Package)和底层驱动开发。

启动代码

每个 MCU 都需要启动代码(startup),负责:

  1. 设置中断向量表
  2. 初始化栈指针
  3. 从 Flash 拷贝 .data 段到 RAM
  4. 清零 .bss
  5. 调用 SystemInit()(配置时钟)
  6. 跳转到 main()

启动代码通常由芯片厂商在 SDK 中提供,但理解其工作原理对排查启动问题至关重要。

时钟配置

MCU 的时钟系统是整个芯片运行的基础:

  • HSE(High-Speed External):外部高速晶振,通常 8-32MHz,精度高
  • HSI(High-Speed Internal):内部 RC 振荡器,不需要外部器件,但精度差
  • PLL(Phase-Locked Loop):锁相环倍频,将低频时钟倍频到高频供 CPU 和外设使用
  • LSE(Low-Speed External):32.768kHz 晶振,用于 RTC 和低功耗定时

时钟配置错误会导致各种奇怪问题——串口乱码(波特率计算错误)、BLE 无法连接(频偏过大)、定时器不准等。

外设驱动

核心外设驱动包括:

GPIO:最基础的外设,控制引脚高低电平。LED 闪烁、按键检测、电源使能都靠它。

I2C:双线串行总线,低速(100kHz-400kHz)但节省引脚。传感器、小容量 EEPROM、PMIC 常用。一条 I2C 总线可挂多个从设备(通过不同地址区分)。

SPI:高速串行总线(可达几十 MHz),全双工。显示屏、外部 Flash、高速传感器常用。每个从设备需要独立的 CS(片选)引脚。

UART:异步串行通信,最简单的调试和通信接口。日志输出、外部模组(4G/GPS)通信常用。

定时器:产生精确的时间基准。用于 PWM 输出(电机控制、LED 调光)、输入捕获(测量脉冲宽度)、周期性任务触发。

ADC:模数转换器,将模拟电压转换为数字值。电池电压检测、模拟传感器读取常用。

厂商 SDK 的使用

现代 MCU 厂商都提供完善的 SDK:

  • Nordic:nRF5 SDK / nRF Connect SDK(基于 Zephyr RTOS)
  • ST:STM32 HAL / LL 库 + STM32CubeMX 图形化配置工具
  • Espressif:ESP-IDF(基于 FreeRTOS)

SDK 已经封装了底层寄存器操作,驱动开发主要是在 SDK 基础上做配置和适配。但遇到问题时,仍然需要看寄存器手册和时序图来定位。

应用层软件开发

裸机 vs RTOS

嵌入式软件架构的第一个选择:用不用操作系统?

裸机(Bare Metal)

int main(void)
{
    system_init();
    while (1) {
        task_sensor_read();
        task_display_update();
        task_ble_process();
        task_power_manage();
    }
}
  • 优点:简单、确定性强、无额外开销
  • 缺点:任务调度靠人工管理,复杂度增长后难以维护,阻塞操作影响整体响应

RTOS(实时操作系统)

int main(void)
{
    system_init();
    xTaskCreate(sensor_task,  "sensor",  256, NULL, 2, NULL);
    xTaskCreate(display_task, "display", 512, NULL, 1, NULL);
    xTaskCreate(ble_task,     "ble",     512, NULL, 3, NULL);
    vTaskStartScheduler();
}
  • 优点:任务隔离、优先级调度、同步机制(信号量、队列、互斥锁)、更好的可维护性
  • 缺点:额外的 RAM 占用(每个任务需要独立的栈)、需要理解并发和同步问题

选择建议:功能简单(< 3 个独立任务)用裸机;功能复杂或需要多任务并行用 RTOS。常用的 RTOS:FreeRTOS(最流行)、RT-Thread(国产,组件丰富)、Zephyr(Linux 基金会,Nordic 主推)。

通信协议栈

嵌入式产品很少独立工作,通常需要和手机、云端或其他设备通信:

BLE(低功耗蓝牙):可穿戴设备的标配。需要理解 GATT Profile、Service/Characteristic 模型、广播与连接、配对绑定。

Wi-Fi:智能家居设备常用。TCP/IP 协议栈、MQTT 协议(连接云端)、HTTP/HTTPS。

LoRa/LoRaWAN:远距离低功耗通信,适合农业、环境监测等场景。

Modbus:工业设备标准协议,RTU(串口)和 TCP 两种模式。

业务逻辑

业务逻辑是产品的核心价值——同样是手环,不同品牌的差异化就在业务逻辑上:

  • 计步算法(加速度数据 → 步数)
  • 睡眠监测算法
  • 心率检测算法
  • 消息通知管理
  • 手势控制(抬腕亮屏、翻腕切屏)
  • 表盘渲染引擎

OTA 升级机制

产品发布后总会有 Bug 要修、功能要加。OTA(Over-The-Air)升级让固件可以无线更新:

手机 App
   ↓ BLE/Wi-Fi 传输新固件
MCU 接收 → 写入备份区(Flash 的另一个区域)
   ↓ 校验通过
Bootloader 切换启动区域 → 运行新固件
   ↓ 如果新固件异常
回滚到旧固件(防变砖)

OTA 涉及 Bootloader 设计、Flash 分区规划、固件签名验证、断点续传等,是嵌入式中比较复杂的子系统。

联调与测试

软硬件联调

联调是嵌入式开发中最耗时也最有挑战的阶段。软件需要在真实硬件上运行,问题可能出在软件、硬件、或者两者的交互上:

  • 信号波形不对?用示波器或逻辑分析仪抓时序
  • I2C 读不到数据?检查上拉电阻、从机地址、时钟频率
  • 蓝牙连不上?测频偏、检查广播参数、抓 BLE 空口包
  • 功耗偏高?用电流探针测量各个模式下的电流

常用工具

工具用途价格区间
J-Link / ST-Link程序烧录、调试(断点、单步)¥50-¥2000
示波器观察模拟波形、测量时序¥300-¥10000+
逻辑分析仪抓取数字信号时序(I2C/SPI/UART)¥50-¥500
串口助手查看日志输出、发送调试命令免费软件
万用表测量电压、电阻、通断¥50-¥500
功耗分析仪精确测量系统各状态功耗¥1000-¥20000
BLE 抓包器抓取蓝牙空口数据包¥200-¥2000

测试类型

功能测试:每个功能是否按需求工作。通常由测试团队根据测试用例逐条验证。

可靠性测试

  • 高低温测试(-20°C ~ 60°C 工作范围)
  • 跌落测试(1.5m 跌落到水泥地)
  • 震动测试(模拟运输和使用场景)
  • 老化测试(长时间连续运行,检查稳定性)

功耗测试:测量各种工作模式下的电流消耗,计算理论续航时间。典型模式:活跃模式、空闲模式、低功耗睡眠、深度睡眠。

EMC 测试:电磁兼容性测试,包括传导发射、辐射发射、静电放电(ESD)抗扰度等。这是产品上市认证的必要条件。

量产与质量控制

从样品到量产

样品阶段手工焊接、逐个调试是可以的。但量产时要面对成千上万的产品,每一个环节都需要标准化。

产测固件

量产测试需要专门的产测固件,快速验证每个产品的硬件功能:

产测流程:
1. 烧录产测固件
2. 自动测试所有外设(传感器、显示屏、BLE、按键、马达)
3. 校准(加速度计零偏、ADC 偏差)
4. 写入产品序列号、MAC 地址
5. 烧录正式固件
6. 最终功能验证
7. 贴标签、包装

产测固件的设计原则是快速自动化——每个产品的测试时间控制在 30 秒到 2 分钟内,否则产线效率太低。

烧录方案

量产烧录常见方式:

  • SWD/JTAG 烧录:通过调试接口烧录,速度快,需要探针接触测试点
  • UART 烧录:通过串口下载,MCU 需要内置 Bootloader
  • USB DFU:通过 USB 接口下载,适合有 USB 接口的产品
  • 预烧录:芯片出厂前由芯片厂或代理商预先烧录固件

良率优化

量产初期良率可能只有 90%-95%,需要分析不良原因并持续优化:

  • 焊接不良:虚焊、短路、漏焊——优化回流焊温度曲线和钢网设计
  • 器件损坏:ESD 损伤、贴片机吸嘴压力过大——加强防静电措施
  • 校准失败:传感器精度超限——和供应商确认来料品质
  • 功能异常:软件 Bug 或硬件设计缺陷——需要工程团队定位修复

良率达到 99%+ 才算合格的量产水平。

嵌入式工程师的技能树

核心技能

嵌入式工程师技能树
├── 编程语言
│   ├── C 语言(必须精通)
│   ├── C++(常用,尤其是中大型项目)
│   ├── Python(工具脚本、测试自动化)
│   └── 汇编(了解即可,排查底层问题时用到)
├── 硬件基础
│   ├── 看懂原理图和 PCB
│   ├── 基本电路知识(欧姆定律、RC 电路、运放)
│   ├── 使用示波器、逻辑分析仪、万用表
│   └── 焊接技能(调试时经常需要飞线、换元件)
├── MCU 与外设
│   ├── GPIO、I2C、SPI、UART、定时器、ADC、DMA
│   ├── 中断系统与优先级管理
│   ├── 低功耗设计(睡眠模式、唤醒源)
│   └── Bootloader 与 OTA
├── 操作系统
│   ├── FreeRTOS / RT-Thread / Zephyr
│   ├── 任务调度、信号量、队列、互斥锁
│   └── 内存管理(堆、栈、内存池)
├── 通信协议
│   ├── BLE / Wi-Fi / LoRa
│   ├── TCP/IP / MQTT / HTTP
│   └── Modbus / CAN(工业/汽车领域)
└── 工具链
    ├── GCC / Keil / IAR(编译器)
    ├── Git(版本管理)
    ├── J-Link / GDB(调试)
    └── Make / CMake(构建系统)

学习路径建议

阶段 1:入门(1-3 个月)

  • 买一块开发板(推荐 STM32F103 或 ESP32)
  • 跑通 LED 闪烁、按键检测、串口打印
  • 学会用调试器单步调试
  • 理解 GPIO、中断、定时器的基本概念

阶段 2:进阶(3-6 个月)

  • 驱动各种外设:I2C 传感器、SPI 显示屏、UART 模组
  • 学习一个 RTOS(推荐 FreeRTOS)
  • 做一个小项目:温度采集器、蓝牙遥控车、简易气象站
  • 开始看芯片参考手册(Reference Manual),而不只是教程

阶段 3:实战(6-12 个月)

  • 参与或模拟一个完整的产品开发流程
  • 学习低功耗设计和优化
  • 理解编译链接过程、调试技巧(Hard Fault 分析、内存问题排查)
  • 阅读优秀开源项目源码(FreeRTOS 内核、RT-Thread 设备框架)

阶段 4:深入(持续)

  • 深入理解 C/C++ 编译原理和底层机制
  • 学习特定领域协议栈(BLE、Wi-Fi、USB)
  • 关注安全(安全启动、固件加密、TrustZone)
  • 了解硬件设计,能和硬件工程师顺畅沟通

总结

嵌入式产品开发是一个跨学科的系统工程——它需要你同时理解硬件和软件,在性能、功耗、成本、可靠性之间做出权衡。

嵌入式开发的独特魅力

  • 看得见摸得着:你写的代码驱动着真实的 LED 闪烁、马达转动、屏幕显示
  • 全栈能力:从寄存器操作到应用逻辑,从焊接调试到量产落地,什么都能接触到
  • 优化的艺术:在 64KB Flash、8KB RAM 的限制下做出完整的产品,这种约束反而激发创造力
  • 长生命周期:嵌入式知识迭代慢,ARM 架构、I2C 协议、RTOS 原理——十年前学的现在依然有用

入行建议

  • 不要只看教程,要做项目。从买一块开发板开始,给自己定一个小目标(做一个蓝牙温度计),在解决实际问题的过程中学习
  • 学会看数据手册。芯片的参考手册(Reference Manual)和数据手册(Datasheet)是最权威的资料,比任何中文教程都准确
  • 重视调试能力。嵌入式开发 50% 的时间在调试。学会用示波器、逻辑分析仪、GDB,这些技能比多学一门语言更有价值
  • 理解底层原理。知道编译器做了什么、链接器做了什么、芯片上电后发生了什么——这些知识会在关键时刻帮你解决别人解决不了的问题