了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader)
欢迎咨询或定制bootloader(在线升级程序)。
上一篇博文介绍的NXP S32K116 serial bootloader, 由于上位机不是专门的bootloader上位机,没有通信协议,没有应答机制,所以严格意义上讲,只能用于学习或研发阶段使用,是不可以用于量产产品上。一些客户看到我的博文,联系上我,说他们也有产品用到NXP 这款芯片,让我做一个可靠性高的,可以用于量产产品上的S32K116 bootloader。为了响应客户的要求,我重写Bootloader程序并命名为S32Boot_S32K116, 并用C#写了专门的上位机。上位机和S32Boot之间交互有了通信协议。上位机按照通信协议发送指令和数据,S32Boot接收到数据后,解析数据,完成烧写,成功则返回ACK (0x15), 出错则返回NACK (0x51)。通信协议的指令如下:
0x6F: HAND_SHAKE (握手,或叫更新请求)
0x02: WR_MEM (Flash 烧写)
0x03: ER_MEM (Flash 擦除)
0x04: VF_MEM (Flash 验证)
0x1F: RUN_APP (跳转到application)
S32K116板子启动后运行在S32Boot模式,S32Boot初始化完成后,开始数秒,1秒内收到更新请求就停留在S32Boot, ACK 应答。 超时就检查Appilcation的有效性,成功就跳转到Application,出错就重启。接收擦除指令,完成擦除,成功就ACK应答,否则NACK应答。接收烧写指令,完成烧写,成功就ACK应答,否则NACK应答。最后是跳转指令,成功就跳转到Application,否则就重启。
S32Boot和Application的Memory map 和上一篇博文《