车载ECU的Bootloader实现方法
概述
应用程序软件是汽车ECU中最重要的组成部分,ECU的功能和可靠性很大程度上取决于其应用软件部分。随着汽车电子技术不断发展,ECU电控系统代码复杂程度不断增长,ECU软件频繁地面临着变更、升级的问题。在研发初期,一般使用JTAG、BDM或Nexus等硬件物理接口下载程序,但是随着技术研发的深入及产品的生产和售后阶段,物理硬件接口下载的方式已经不能满足OEM和供应商的需求。
当前CAN总线已经广泛地应用于整车网络应用中,所以基于CAN总线的在线软件刷写功能也被广泛使用。在开发阶段,通过CAN总线在线刷写ECU代码可以方便软件开发人员设计、调试及测试软件代码等,提高工作效率和开发进度;在生产阶段,通过CAN总线在线刷写程序可以实现批量下载,方便软件版本的更新,也能免除JTAG、BDM等物理硬件接口的成本及繁杂度;在售后阶段,可以利用诊断仪等设备,通过CAN总线直接升级ECU中的软件,避免由于软件缺陷引起的产品召回事件所造成的巨大损失,也可以为ECU功能提供一个可升级的平台。
Flash Bootloader软件架构
CAN驱动(CAN Driver)
CAN驱动模块实现CAN报文的收发和CAN控制器硬件的操作;
CAN驱动主要由有下特点:
- 初始化CAN控制器
- CAN报文的接收和发送
- CAN报文事件反馈
Flash驱动(Flash Driver)
用于操作Flash的擦除、写入和读取功能,
Flash驱动主要有如下特点:
- Flash硬件初始化
- 擦除Flash扇区
- Flash块的数据写入
- Flash块的数据读取
- 数据校检
传输层(Transport Protocol Layer)
传输层可实现以下部分(根据方案不同使用不同的传输层协议):
- 基于ISO 15765-2的传输协议规范
- 基于CCP的传输协议规范
传输层主要是提供数据的组包和拆包功能服务,能够实现报文的分段传输(segmented transmission):长报文的分包发送,以及分包报文的组装接收。
传输层有如下特点:
- 分包和组装来自数据链路层的数据
- 长报文的流控制和定时参数的调整
- 数据传输过程中的错误检测和超时处理
诊断层(Diagnostics Layer)
当传输层采用基于ISO 15765协议规范时,诊断层作为可选项集成到Bootloader程序代码中。
诊断层实现ISO 15765-3/ISO 14229-1中定义的Bootloader程序刷写流程,包括:诊断会话切换、安全状态切换、标识符读写、程序刷写和ECU复位等。
诊断层主要有如下特点:
- 实现ISO 14229中刷写相关的诊断服务
- 调用Flash Driver
看门狗(Watch Dog)
为防止Bootloader出现超时操作,看门狗模块能够在超过一定时间后产生ECU复位操作,提高软件的可靠性。
看门狗定时有如下特点:
• 监控Bootloader超时或者死机,对ECU复位
• 定时参数可以任意配置
• 实时性有保证
加密算法
主要用以处理软件加密和安全访问相关的诊断服务内容,实现程序下载的合法性和完整性。
加密算法模块有如下特点:
• 根据用户需求不同,作为可选项
• 下载工具的合法性校检,Seed & Key诊断服务
• 程序下载的完整性校检,如CRC校检
FlashBootloader解决方案
实现CAN总线在线刷写功能,则需要开发针对目标ECU的Bootloader功能软件,包括必要的CAN驱动,Flash驱动,通信协议等组件。Bootloader软件一般具有如下要求:
• Bootloader与应用软件必须放于不同的ROM空间中
• 使用非易失性存储单元存放标志位等信息
• 需要支持不同的通信协议
• Bootloader与应用软件不能同时占有硬件资源
• 因ECU掉电等情况导致程序刷写故障的故障修复功能
• 对下载程序验证
• 安全访问模块和加密算法
• 看门狗
方案1
参照ISO 15765相关规范,将其中传输层协议精简后的FlashBootloader在线刷写方案,包括Flash刷写工具、Bootloader嵌入式源码、Flash驱动和Bootloader应用程序源码等。
方案2
完全满足ISO 15765规范的FlashBootloader在线刷写方案,Bootloader模块基于ISO 15765-2、ISO 15765-3标准开发,各功能模块软件架构如下图中所示:
方案3
基于CCP协议的FlashBootloader在线刷写方案,Bootloader模块基于CCP协议标准开发。