光
现场升级最怕的不是升级失败,而是失败之后板子起不来、还得派人去现场拆机。上周一块远程站点的板子就栽在这上面:新 bitstream 烧进去,配置到一半断电,再上电 DONE 脚一直拉不低,只能返厂。复盘之后我们把远程升级流程改成了双保险,今天把做法和踩过的坑记录下来。
第一,Golden Image 是底线。Flash 里至少留两份镜像:一份是出厂验证过的 Golden Image,一份是工作镜像。配置逻辑上电先加载工作镜像,失败自动回退到 Golden Image。关键点:Golden Image 分区要写保护,升级流程里任何一步都不能动它;回退逻辑要用硬件状态机做,别依赖 CPU 跑起来再判断——CPU 起不来的时候软件什么都做不了。
第二,配置看门狗必须独立于主逻辑。做法是上电启动一个硬件看门狗计数器,配置成功后由逻辑主动喂狗;超时未喂狗就触发重配置并切换镜像。看门狗的超时时间要留够余量:实测配置时间再乘 2~3 倍,太短会在正常配置还没完成时误触发,太长则回退太慢。
第三,升级包先校验再烧写。CRC 校验是最低要求,条件允许再加签名。烧写过程要做到断电安全:先写新镜像到备用区,校验通过后再切换启动指针,最后一步再擦旧区。最忌讳的是边擦边写同一块区域,断电就两头空。
第四,上电时序也要进检查清单。有一次回退到 Golden Image 还是起不来,最后发现是新镜像改了电源时序要求,Golden Image 的上电时序反而被新硬件改动拖累了。升级包里涉及电源、时钟的改动,一定要和镜像回退逻辑一起评审。
第五,远程升级前先在实验室断电演练。模拟几种断电点:烧写中、切换指针瞬间、首次启动配置中,逐一验证都能回退。演练通过的版本才能往现场推。
这套双保险上板之后,我们又做了两次带断电的远程升级,都顺利回退或成功,没再返厂过。大家做远程升级时,回退路径是靠硬件状态机还是靠软件判断?有没有遇到过 Golden Image 也救不回来的情况?
第一,Golden Image 是底线。Flash 里至少留两份镜像:一份是出厂验证过的 Golden Image,一份是工作镜像。配置逻辑上电先加载工作镜像,失败自动回退到 Golden Image。关键点:Golden Image 分区要写保护,升级流程里任何一步都不能动它;回退逻辑要用硬件状态机做,别依赖 CPU 跑起来再判断——CPU 起不来的时候软件什么都做不了。
第二,配置看门狗必须独立于主逻辑。做法是上电启动一个硬件看门狗计数器,配置成功后由逻辑主动喂狗;超时未喂狗就触发重配置并切换镜像。看门狗的超时时间要留够余量:实测配置时间再乘 2~3 倍,太短会在正常配置还没完成时误触发,太长则回退太慢。
第三,升级包先校验再烧写。CRC 校验是最低要求,条件允许再加签名。烧写过程要做到断电安全:先写新镜像到备用区,校验通过后再切换启动指针,最后一步再擦旧区。最忌讳的是边擦边写同一块区域,断电就两头空。
第四,上电时序也要进检查清单。有一次回退到 Golden Image 还是起不来,最后发现是新镜像改了电源时序要求,Golden Image 的上电时序反而被新硬件改动拖累了。升级包里涉及电源、时钟的改动,一定要和镜像回退逻辑一起评审。
第五,远程升级前先在实验室断电演练。模拟几种断电点:烧写中、切换指针瞬间、首次启动配置中,逐一验证都能回退。演练通过的版本才能往现场推。
这套双保险上板之后,我们又做了两次带断电的远程升级,都顺利回退或成功,没再返厂过。大家做远程升级时,回退路径是靠硬件状态机还是靠软件判断?有没有遇到过 Golden Image 也救不回来的情况?
