来源 | 最后一个bug
最近招来一位新同事维护我们的linux平台部分功能维护与需求开发,当时给了他一块裸板,并给了他一份USB烧录镜像的文档,然而他操作的时候USB烧录镜像比较慢,我看了他用了个hub,确实比我平时用USB烧录慢了不少,估计是USB2.0的协议,。
于是他苦着脸来问我怎么这个平台早期不留一个SD卡卡槽呢?以前我们用SD卡制作好镜像后升级,老快了,既然你诚心诚意的问了,我就在这里聊聊为什么设计上选择了USB烧录方式,而没有采用传统的SD卡烧录:
1
SD卡量产升级
SD卡量产升级算是老牌方案了,确实小批量效率挺高的,特别是在早期研发调试的时候,插上SD卡自动就把镜像部署了。
通常我们需要准备一张比系统镜像体积稍大一些SD卡,并且最好是选用优质的高速卡,然后把SD启动的系统镜像与要烧录到裸板的完整镜像预先打包做好,通常为sdcard.img,什么uboot、kernel、设备树、rootfs等都要打包好了。
然后通过读卡器把制作好的镜像(启动镜像+裸板完整镜像)写入到SD卡,如果你的主力平台是linux就用相关的命令如dd,win的话就用Win32 Disk Imager之类的软件写入。
然后我们把SD卡插入嵌入式裸板平台启动自己写的烧录脚本,把裸板的完整镜像烧录到裸板的存储介质中比如emmc或者nand等,这样整个烧录过程就算完成了。
那么每升级一个单板就得插拔一下SD卡,看起来也挺快的,其实量大的话还挺繁琐的,在生产线上还容易漏烧录,多个SD卡混淆烧错了系统也是常有的事,更重要镜像变更,烧录过程没办法追溯版本是否正确等。
2
USB量产升级
USB的方案其实相对就没有SD卡那么繁琐了,USB方案更多的是依赖于芯片原厂或第三方提供的PC端工具,或者他们提供的驱动API,本质上就是调用芯片内部的BootROM/USB下载协议来直接擦写裸板上的存储器,比如Rockchip:RKDevTool,NXP i.MX:MFGTool (UUU)等等。
连接好进入USB烧录模式,便可以把制作好的镜像烧录到裸板中了,有些朋友估计会像我这位新同事一样吐槽USB可比SD卡烧录慢多了~
但从大批量生产的角度,USB烧录原厂都会提供命令行版本(如RKDevTool CLI, UUU脚本)这样你就可以集成到上位机中实现自动化的调用这些工具来完成烧录,那么上位机也可以从服务器平台拿到对应版本的镜像、建立完整的日志系统,记录每块板的烧录时间、操作员、软件版本、序列号、烧录结果(成功/失败及原因),如果烧录失败还可以自动化的重试,这不就有活干了吗?
如果你的镜像系统经过了团队深度优化,不想被人剽窃,在自动化的流程中还可以进行加密。
所以这种方式更加适合更大批量的烧录,而SD卡烧录仅仅只是研发调试、制作第一版样板的时候比较方便,即使USB单次烧录的速度不如SD卡,但批量整体的速度远超SD卡,而且还更加流程化、正规化。
研发成功很多时候才只是产品或者工程的第一步,从实验室到生产线的落地,需更看重方案的自动化适配性和大规模量产的稳定性。
------------END------------
单片机可以用 Python 开发吗?
2025电子工程师薪资实探:硬件、嵌入式软件、芯片研发,销售谁赚最多?(投票)
单片机SPI也能实现单线半双工模式?