在做正式的产品时候,经常我们的产品需要可以升级固件,这时候就需要bootloader引导,而在车载上,基于J1939的bootloader可靠性非常重要。要能够快速,有效且安全的更新固件。
一般来说我们需要将flash划分bootloader区和应用程序区,还有连接区来存放一些配置,如开始地址,CRC结果,版本等。这一部分通常叫Bootloader Configuration Area(BCA)这部分通常可以放在应用程序开始的一段地址上。bootloader开始的时候会初始.data和。bss段,读取配置信息等。对跑在J1939通信上的bootloader,跟我们以前做bootloader考虑的一样,只是换了个通信方式和接口,一般情况下,如果是自定义的PGN,一般放在PGN61184用专有A来作为bootloader的参数组。
通常我们在设备上电时候,bootloader需要检查是否存在有效的应用,如果有,那么跳转到应用程序,如果没有则开始尝试接收应用程序。并且应用程序要能够有启动bootloader的命令。
做基于J1939通信的bootloader,需要考虑三种帧来传输地址包,数据包,和命令包。通常基于其他通信的bootloader,我们也需要来考虑这几种传输,如果你对J1939协议比较清楚,应该是很容易实现的,最近我在电子发烧友学院做《带你跨越J1939通信开发之路》的直播,相信你学完后,一定可以自己做基于J1939的开发项目。有兴趣的可以去电子发烧友学院看看,微信,网页端,APP都可以。