
固件层将外壳、电路板和少量传感器变成一个可以响应的设备。
典型的硬件原型始于物理部件:一个用CAD建模并3D打印的外壳、一块适配安装柱的PCB板,以及根据设计布置的一系列传感器、按钮和LED灯。组装完成后,原型看起来几乎与成品无异。然而,如果没有固件,设备就无法读取传感器数据、响应输入或与其他系统通信。
固件是运行在设备微控制器上的代码。有些团队自己编写芯片代码,而另一些团队则引入外部代码。 固件开发 公司只有在机械设计稳定后才会着手开发固件,因为要让微控制器与传感器、无线电模块和容量有限的电池可靠地协同工作,需要丰富的经验。固件定义了硬件执行哪些操作、操作顺序以及设备如何从错误中恢复。
以下各节解释了原型设计期间固件工作涉及哪些内容、通常需要哪些服务以及何时外包固件是合理的。
从硬件原型到可运行产品
外壳设计、机械组装和3D模型设计是产品开发的重要组成部分。经过充分测试的外壳可以检验设备握持是否舒适、通风口位置是否合理以及铰链等活动部件的耐用性。然而,仅仅外形正确的原型仍然只是一个物理模型。读取温度或向手机发送数据需要设备内部处理器上运行的软件才能实现。
运行在设备处理器上的软件称为固件。固件通常用 C 或 C++ 编写,它将物理电子元件与用户交互的功能连接起来。内存和功耗限制因平台而异,因此固件必须根据所选硬件及其运行模式进行设计。当团队更换传感器时,固件也必须更新。为了降低单位成本而改用更便宜的微控制器,可能需要更改驱动程序、工具链和应用程序,具体取决于软件架构。
由于硬件的变更通常需要固件的相应修改,因此硬件和固件最好并行开发,而不是先后开发。机械方面的决策会直接影响代码。例如,将天线放置在金属支架后面会导致固件接收到的信号较弱,需要处理更多的重传;而较小的电池仓则需要更严格的节能模式。如果机械工程师和固件工程师能够尽早协调合作,那么首批组装好的设备在测试过程中出现的问题就会更少。
固件开发公司为硬件原型做什么?
在原型开发阶段,固件开发公司负责确保电路板能够正常工作,并在硬件设计变更时保持电路板的正常运行。这项工作通常包括多个阶段。
第一阶段通常是选择芯片。大多数原型机都采用微控制器 (MCU),例如 STM32、ESP32 或 nRF52。而需要显示屏、更强大的处理能力或嵌入式 Linux 的设备则会使用片上系统 (SoC)。经验丰富的固件工程公司可以就芯片选择提供建议,因为芯片的选择决定了后续可用的开发工具和无线功能。
下一阶段是硬件调试,工程师会检查时钟是否稳定、电源轨是否提供正确的电压、调试器是否能够连接以及每个外设是否响应。此过程需要示波器和逻辑分析仪等工具。调试过程通常还会发现一些在设计评审阶段未被发现的原理图错误,例如引脚接反或缺少上拉电阻。

典型的原型固件堆栈,从芯片到用户看到的实际行为。
完成启动后,团队会为板上的传感器和外设编写驱动程序,包括加速度计、温度传感器、显示器、电机控制器和外部闪存。每个组件都通过总线(例如 I2C、SPI 或 UART)进行通信,每个组件都有其数据手册中的具体信息,这些信息只有在实际运行条件下才能体现出来。接下来是添加通信协议:与移动应用程序配合使用的设备通常使用低功耗蓝牙 (Bluetooth Low Energy),而云端报告则需要 Wi-Fi 或蜂窝网络。车辆通常使用 CAN 总线,而工业设备则通常依赖 Modbus 协议。
最后阶段是设备的基本逻辑,它定义了用户看到的行为。例如,按住电源按钮三秒钟即可将设备置于配对模式,电池电量低于 15% 时会触发警告并使 LED 指示灯变暗。诸如配对和低电量警报之类的规则,使一个工作电路变成了一个可用的产品。
原型开发阶段的关键固件开发服务
固件开发工作的范围取决于产品。单传感器数据记录器所需的固件远少于联网医疗可穿戴设备。然而,大多数原型开发阶段的固件开发服务都可归为以下几类:
- 嵌入式固件。它是MCU上的核心应用程序,包括启动代码、主循环和定义设备行为的状态机。
- 设备驱动程序。这是一种底层代码,它允许处理器读取和写入电路板上的每个组件。供应商会为常用部件提供驱动程序,但供应商提供的代码很少能涵盖所有使用场景,因此通常需要进行一些定制开发。
- 实时操作系统 (RTOS)。当设备需要同时对传感器进行采样、更新屏幕和监听无线电数据包时,像 FreeRTOS 或 Zephyr 这样的实时操作系统会按可预测的方式调度所有这三个任务。
- 连接性。集成 BLE、Wi-Fi、LoRaWAN、蜂窝网络或有线总线,以及配对、加密和空中 (OTA) 更新。
- 电源管理包括睡眠模式、时钟频率调节以及关闭不使用的外围设备。对于电池供电设备而言,电源管理决定了一次充电能持续一周还是一年。这项工作还包括测量实际电流消耗,而不是仅仅依赖数据手册中的数值。
- 调试。查找并修复崩溃、时序问题和硬件软件冲突,通常使用连接到电路板的 JTAG 或 SWD 调试器。
- 固件测试。单元测试、硬件在环测试以及低电压、高温或不稳定连接下的压力测试。
临近截止日期时,调试和测试时间往往会被缩短,这通常会导致后期成本增加。修复手工组装原型机上的一个缺陷可能只需几个小时,而同样的缺陷在生产数千台产品后才被发现,则需要现场更新,甚至在某些情况下需要召回。
为什么要在产品开发过程中与固件开发合作伙伴合作?
对于概念验证阶段,通常一名工程师就能完成原理图、外壳模型和代码编写。但如果设备需要可靠的无线连接、长电池续航时间和安全的现场固件更新,工作量就会显著增加。
可靠的无线连接和持久的电池续航是聘请固件开发合作伙伴的优势所在。经验丰富的工程师熟悉常见的芯片缺陷以及特定厂商SDK的局限性。他们还会优化代码结构,确保从开发套件到定制PCB的转换无需从头开始。大多数固件团队都拥有功率分析仪和射频测试工具等实验室设备,因此客户无需为单个项目购买昂贵的测试设备。
与合作伙伴协作还可以缩短开发周期。固件开发可以在使用相同芯片的评估板上开始,这样团队就不必等待最终硬件,固件和机械设计可以并行推进。
外部协助的成本取决于设备类型:固件开发机构会增加预算中的一项费用,而对于非常简单的设备,内部的通用技术人员可能就足够了。对于联网设备、电池供电设备或受控设备,外部专家通常可以减少电路板的修改次数,而每次电路板修改都会使工期延长数周,并增加直接成本。
选择合作伙伴时,要询问团队已在哪些MCU系列上发布过产品,如何处理OTA更新,以及工程师是否拥有针对您所在市场认证的设备经验(例如FCC、CE或医疗标准,如适用)。通常,为期一到两周的付费调研阶段,用于审查您的原理图和需求,比销售电话更能让您清楚地了解情况。
请记住,外部团队需要了解您产品的详细信息,而向工程师进行简报会占用您不少时间。务必在项目开始时就文档标准和源代码所有权达成一致,以确保项目结束后固件的所有权仍然属于您。
将硬件创意转化为功能性设备
假设我们需要一个用于温室的土壤湿度传感器。以下示例展示了一种可能的开发流程,并非实际的客户案例研究。第一个版本是一个内部装有开发板的3D打印外壳,固件仅通过USB接口向笔记本电脑发送湿度读数。第一个版本足以验证该概念的可行性。
第二版采用了一块定制的PCB板,该PCB板与外壳的安装柱完美契合。固件现在每十分钟读取一次探头数据,在两次读取之间保持睡眠模式,并将每次读取结果通过LoRaWAN协议发送到建筑物另一侧的网关。通过调整占空比和合适的无线电策略可以延长运行时间,但最终结果必须根据测量电流、电池容量和实际报告条件进行计算和验证。

固件开发工作介于第一个印刷外壳和试生产批次之间。
试生产阶段剩余的工作可能涵盖固件、电子元件、机械设计和生产验证。试生产阶段的固件工程服务重点在于确保代码稳定性、优化功耗、添加安全启动和OTA更新功能,以及编写每台设备出厂前运行的自检程序。早期版本只需在工程师的监督下在一台测试样机上运行即可,而量产版本则需要在数百台实际应用中稳定运行。
在这个示例性工作流程中,外壳和固件都会随着团队对设备的验证而不断迭代更新。许多硬件项目都遵循同样的模式,固件的版本更新次数通常比外壳的版本更新次数更多。在规划硬件项目时,应根据复杂性、集成和验证需求来分配固件开发预算,并在CAD文件最终定稿阶段就让固件工程师参与进来。

