每个产品经理都知道在时间复杂度上运送设备所涉及的复杂性,这导致 45% 的产品错过发布日期。而且协调机械工程、电气工程、制造、测试自动化、营销等是很困难的。每一项都具有挑战性,但都变得更加复杂,因为其中大多数都不会在同一时间线上前进。
遵循新产品推出 (NPI) 时间表,同时关注固件流程有助于简化开发并增加实现开发目标的可能性。NPI 包含六个里程碑和相关的时间框架,供旨在尽快发布易于理解的产品的团队使用。属于这一类的团队可以预期,从原型到发布的时间框架大约为 12-18 个月,具体取决于设备的复杂性。
在该模型中,固件开发中还有其他元素为优化 NPI 流程铺平了道路。为什么要关注固件?该固件动态支持我们的整体硬件路线图,通过确保最佳固件实践,我们可以减少每个开发阶段的生产挑战,并按时推出我们的产品。
初始阶段,12 周
在原型——第一个也是最长的阶段——工程师主要确定到底想要建造什么。有很多迭代,可能是 3D 打印原型或供电气和固件工程师工作的开发板。虽然这是具有最大自由度的阶段,但 12 周并不长,因为它需要做出许多决定,例如我们需要哪些传感器以及如何整合一切。目标是提出一个功能性的产品架构。
从固件的角度来看,在原型构建准备好之前,团队必须让软件达到一个里程碑。这个里程碑要求团队为每个主要子系统编写最少的驱动程序代码,以在命令行级别验证每个子系统都在工作,并且产品的软件能够与每个子系统进行清晰的通信。
到原型阶段结束时,团队可能最终会得到一些“像”和“看起来像”的原型。虽然不是最终的,但这些原型可以展示给执行团队和一些客户,以大致代表最终产品。
EVT(8周)
退出原型后,团队将拥有少量配置,EVT 是完成工程设计的时候了。EVT 是准时发货的关键阶段;成功退出 EVT 通常意味着准时发射。该产品在外观上不会完美——可能是用一些软工具制造的,测试站不是最终的,而且产量很低——但 EVT 设备的外观和感觉应该与最终的大致相同。它应该有几个配置来降低程序的主要子系统和一个配置工作的整体成功标准。
在退出 EVT 之前,固件需要完成 HW 测试,此时只有最少的固件可以让用户尝试设备的所有主要功能。它可能不会很好地工作,并且它没有所有的花里胡哨,但如果设备有显示器,用户可以查看显示器并看到一个简单的 UI。如果设备有音频,我们可以播放音频文件等。
请记住,在进行迭代时,可能必须再次迭代,从而导致 EVT 1、EVT 2、EVT 3 等。每次 EVT 设计迭代至少需要额外的 4 周,这可能会导致严重的延迟。
设计验证测试 (DVT),6-8 周
在 DVT 期间,团队不会以他们想要的速度运行生产或制造,但他们将拥有一个最终配置,使其通过所有制造站并通过所有测试。
在 EVT 和 DVT 之间,需要锁定制造软件。DVT 是指生产线将或多或少地在斜坡期间运行。因此,在设备上运行的任何软件都必须由 DVT 完成。
生产验证测试 (PVT),6-8 周
PVT 阶段用于优化制造。最终,目标是获得达到斜坡目标所需的产量和速度。
在 PVT 中,团队将为斜坡进行预运行,并且需要完成启动固件。PVT 装置具有“创收能力”,有时可以出售给市场,前提是它们没有重大问题。至关重要的是,他们拥有将在出售的设备上运行的固件。
爬坡量产,4+周
退出 EVT/DVT/PVT,团队将以理想的速度和产量进行制造。下一个阶段是进入爬坡量产——制造足够多的产品以供发布。
通常会有短暂的停顿来进行最后的调整并确保正确的零件在工厂中。在爬坡量产期间,将通过 24/7 全天候运行生产线并将设备运送给经销商来积累库存。
第 0 天固件是最后一个里程碑,这是设备发货后、客户开箱之前发布的版本。
发货
该产品是最终产品,在零售商和经销商处有库存,可供最终用户购买。
考虑到时序变量以及设计和工程的复杂性,有四种方法可以节省时间并创建比较合理的时间线。
- 部署测试驱动开发:针对软件测试工具而非真实硬件构建软件和固件。例如,可以使用 CppUTest 之类的单元测试框架或 Renodes 之类的模拟框架来模拟我们的硬件并针对它进行软件开发。这种方法有很多好处:即使硬件还没有准备好,它也可以让我们开始软件开发,它可以加速迭代,并且它创建了一组可用于支持开发的强大测试。
- 实施第 0 天更新:旨在准备在拆箱时应用于设备的软件更新的技术。第 0 天的更新改变了时间;它不是在制造阶段完成最终固件,而是将整个时间延长到客户拥有设备的时间。这种方法可以让我们解耦爬坡量产和软件 GM 之间的依赖关系,并将我们的软件开发计划延长四个星期或更长时间。
- 使用强大的硬件抽象层(HAL):使用跨平台操作系统以及可以轻松移植到新硬件的硬件抽象层。Zephyr Project 是一个出色的开源 RTOS 选项,得到了半导体和设备制造商的大力支持。虽然这是一个多一点的前期工作,但它提供了三个主要好处。首先,它允许我们将固件与底层硬件分离,从而更轻松地进行测试驱动开发和独立构建。其次,它创造了可选性,这是在供应链受限的情况下的一个关键特征。如果我们需要更换微控制器或其他组件,使用 HAL 可以让我们轻松地进行更改。最后,它允许我们为未来程序的代码重用奠定基础。能够将我们构建的软件从一个程序带到另一个程序是非常有价值的,
- 拆分制造和应用固件:在生产线上使用专门构建的固件,这种固件很少更改,并且与应用程序固件完全分开。虽然这是非常战术性的,但不应低估其影响。在校准和其他测试期间,制造固件在装配线上和设备上运行。直到生产线上的最后一个测试站才加载应用程序固件,让我们在不影响制造固件的情况下迭代应用程序固件。将两者分开可以让我们对 UI 显示等内容进行更改,而不会带来制造固件回归的风险。它还允许我们在 DVT 阶段锁定制造后继续处理应用程序固件。它允许我们节省代码空间,因为我们不需要 t 在我们的主要应用程序中携带我们的制造代码。一个警告是,我们可能会发现制造和应用固件之间的依赖关系,并且我们需要有一种方法来管理依赖关系,例如传感器配置。