S32Kxxx bootloader之CAN FD UDS bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。
六年前, 汽车内ECU CAN 网络 还有低速CAN 网络, 速度是250kbps,不用接终端电阻就可以组网。但是很快ECU CAN网络都转为高速CAN 网络,速度为500kbps或以上. 最近2年,ECU CAN 网络越来越多的采用CAN FD。ECU 越来越多,交互数据也越来越多,所以再过2,3年,估计ECU 高速CAN 网络也不多见,绝大多数都会转为CAN FD网络。通过CAN FD 总线接口bootloader升级ECU应用程序也会越来越常见,今天想给大家介绍的就是最近刚完成的S32K1xxx系列的CAN FD UDS bootloader。
CAN FD bootloader 烧写到ECU 的主芯片后,后续ECU 的应用程序需要升级,通过CAN FD 总线即可实现升级,不需要把ECU 拆出来,也不需要烧写口,只需一台电脑通过CAN FD bus和ECU相连,即可给汽车内的ECU 完成应用程序更新。
此UDS bootloader 是基于NXP芯片S32K116的CAN FD总线接口bootloader. 软件架构如下图:
CAN FD UDS bootloader 是放置在芯片S32K116 pflash 的0x00000000 ~ 0x0000EFFF,memory map 如图:
ECU 上电后运行进入bootloader程序,判断是否有更新请求,没有更新请求且应用程序有效则跳转到应用程序,有更新请求或应用程序无效则停留在bootloader, flash driver 可以由上位机下载到RAM, Erase 和Program pflash的动作是通过调用RAM中的flash driver API 完成的。 flash driver 也可以固化在ROM中,此时,Erase 和Program pflash的动作是通过调用ROM中的flash driver API 完成的。上电流程如下图:
CAN FD UDS Bootloader 升级应用程序的整个流程主要使用了ISO 14229-1 标准中定义的以下UDS Services:
上位机是我使用C#开发GUI host 程序zFlash, 使用zFlash时有一个地方需要注意,比特率的选择,如果选择405002,代表CAN FD 盒子主芯片工作时钟频率40M,仲裁段比特率500K,数据段比特率2M。如果选择4010002,代表CAN FD 盒子主芯片工作时钟频率40M,仲裁段比特率1000K,数据段比特率2M。目前只支持这两种选择,后续会增加更多的选择项。
此CAN FD bootloader 遵从UDS 协议,比起之前我做的自定义协议的CAN bootloader 效率要高很多,更新应用程序花的时间要少一半多。更新应用程序的log 如下截图。