很多硬件项目,硬件原理图检查无误,元器件参数全部匹配规格书,软件代码单独仿真运行正常,可是烧录进板子之后设备工作异常,问题往往就出在软硬件协同层面。硬件工程师专注电路设计,软件工程师聚焦代码逻辑,双方各自模块都没有问题,交互对接环节出现漏洞,是研发过程当中非常高频的故障来源。
时序匹配是软硬件冲突最常见的点。硬件电路实际信号存在延时、抖动,软件代码仿真环境往往是理想信号,当软件按照理论时序去读写外设,现实硬件信号还没有完成稳定,就会出现读取数据错乱、通信偶发失败。像 SPI、I2C 这类通用通信接口,规格书定义了标准时序,但是不同器件实际响应速度存在差异,硬件走线带来信号延迟,软件如果直接套用通用示例代码,不针对硬件实际情况做适配,就会出现间歇性故障,故障复现条件飘忽不定,排查耗费大量时间。
上电复位也是协同故障高发场景。芯片上电之后电源电压缓慢抬升,复位电路释放时机,如果软件初始化节奏和硬件上电节奏不匹配,就会出现随机启动失败。有时候板子手动重启一切正常,整机上电开机概率性无法启动,根源大多来自上电时序配合问题。IO 口配置、电平匹配同样不容忽视,硬件引脚电平域,和软件设置的输入输出模式不匹配,会造成信号异常甚至器件损坏。
软硬件团队沟通壁垒也会放大问题。硬件修改电路之后,没有同步给到软件团队关键变更信息;软件调整驱动逻辑,没有告知硬件人员。文档更新不及时,版本混乱,研发后期,原理图、代码版本来回切换,进一步增加调试难度。很多团队会等到硬件打板回来之后才开始对接调试,问题集中爆发。
想要减少这类问题,在设计阶段就要建立协同意识,硬件设计时充分考虑软件驱动的适配难度,软件开发早期参考真实硬件时序参数,而不是完全依赖仿真模型。完善版本变更记录,重要修改同步跨团队告知,提前做好接口定义文档,软硬件协同,才是整机项目顺利推进的关键。