UDS的CAN刷新软件
http://www.gzweix.com/article/sort0253/sort0487/info-260414_3.html
1. UDS相关服务
ISO 14229用于刷新方面的主要诊断服务见表1。
根据ISO 14229协议的诊断服务及ISO 15765-3的通信建议, 刷新通信主要分为3个部分: 刷新前准备工作, 刷新过程, 刷新后的处理过程。 刷新前准备工作和刷新后的处理过程在application软件中,而刷新过程在bootloader中。 刷新的主导过程由上位机根据ISO 14229及ISO 15765标准中规定的流程来进行, 相关通信服务在下文中详细说明。
2. 软件内存映射及跳转
2.1 内存映射
智能前照灯软件设计中, 控制器软件分为两个独立的软件, 即为两个独立的软件部分, 主要为bootloader software启动加载软件 (内含启动加载和刷新功能, 一般简称bootloader软件) 和applicationsoftware应用软件 (也即应用软件 , 简称application软件)。 两个软件之间相互独立, 从软件内容和功能方面来说, bootloader软件主要用于刷新的主流程以及系统总体的启动加载功能, 而application软件侧重于智能前照灯的策略和系统运行, 以及故障诊断和刷新前准备、 刷新后系统恢复工作。 从刷新服务来说, bootloader软件主要使用刷新相关及最为紧要的下载服务, 而应用软件服务大多为准备工作服务。 从CAN驱动以及CAN诊断传输层来说, 两个软件可以共享驱动, 也可以各自设置各自的驱动。
图1为智能前照灯的内存映射 (memory map)及中断跳转 (ISR Jump) 图。 图1中智能前照灯控制器flash内存映射含有两个独立的存储区域, 即bootloader软件区域 (灰色阴影) 和应用软件区域,分别用于存放两个独立的软件。
2.2 软件跳转
两个软件主要通过诊断服务进行跳转, 在设计的软件中通过函数指针来进行跳转。 对于智能前照灯的中断来说, 其跳转如图1所示。 Jump_1为appli-cation软件收到诊断仪器命令后跳入bootloader软件进行刷新的跳转。 Jump_2为bootloader软件复位检查效验区后, 当效验成功也即application应用软件正确后, 跳转到application区域运行。 Jump_3为bootload-er软件进行刷新完毕后复位中断的跳转过程。
3. application中刷新准备的设计
刷新前的准备工作主要用于刷新的各种数据读取和验证, 安全检查工作和各种条件使能工作。 刷新准备工作流程如图2所示, 主要过程为, 用读取诊断信息服务0x22读取当前软件版本和主要信息; 用开始诊断会话服务0x10切换当前诊断模式到扩展模式; 用故障码设置服务0x85禁止设置DTC以便于刷新; 用通信控制服务0x28禁止当前网络管理及通信信息, 以便于刷新可以获得最大的流量, 以及阻止其他网络信号的干扰, 保证刷新的顺利进行。 之后用软件控制服务进行刷新前的条件检查, 如电源电压、 数据和软件稳定等检查。
4. 启动加载设计
bootloader软件有两大功能: 启动加载跳转功能和刷新功能。一般启动加载安排在bootloader软件的死循环前面, 用于上电自启, 并检查应用软件是否正确与完备。 如果应用软件效验成功, 则跳入应用软件区域; 否则留在bootloader中, 等待软件刷新。 boot-loader启动加载流程如图3所示。
bootloader跳入application软件中主要跳转语句如下, 主要用了函数指针功能: if (temp_checksum== CHECK_CRC_16) ((void (code *) (void)) APP_START_ADD) ()。上述C语句中, CHECK_CRC_16值即为magicword效验值 (magic word效验区的映射见图1), 当计算得到的temp_checksum和magic word保持一致,即 可 跳 入 application 软 件 。 APP_START_ADD 为application入口地址, 在应用软件的内存映射入口处。
5 bootloader中刷新部分设计
bootloader 中含有刷新主体部分诊断服务的设计。 而application软件含有刷新准备部分的诊断软件设计。bootloader是一个完整的软件, 它用CAN进行刷新, 底层驱动包括CAN驱动的接收和发送部分, 并含有传输层数据处理部分。 如何处理传输层一直是诊断设计的重点。 本设计中主要采用switch case的分支处理方法来进行传输层的处理, 处理完毕后即可进入诊断服务的通信。 如图4所示, 当收到CAN信息时首先判断信息ID是否为需要ID, 然后对数据进 行 接 收 , 接 收 的 同 时 根 据 ISO 14229 及 ISO15765-2标准对传输层进行处理, 尤其是多帧的处理和管理。
6. bootloaer中刷新通信主要流程
刷新的主要流程如图5所示。 本流程图中, 用开始诊断会话服务切换到刷新模式, 也即从appli-cation软件跳入bootloader软件 ; 用安全加密及算法服务来进行控制器的解密; 用软件控制服务对待更新软件进行存储区域擦除, 之后进入刷新的数据传递过程。 数据传递采用块、 包的形式, 对数据进行整体打包发送, 当本包完成时继续进行下一个包的传递。 主要用请求下载服务, 服务中含有待更新软件的首地址和传输字节数; 传递数据服务含有控制器和诊断设备之间的数据传递; 请求传递数据退出服务, 本服务用于对每块进行效验和的效验, 检查通过后才可以进行下一个数据包的传递。 这3个服务不断地循环进行, 把各个数据块给刷入。 全部数据刷入后, 用软件控制服务对所有的软件区进行CRC_16效验。
7. 刷新后的处理工作
最简单直接的方法为控制器复位。 对于非动力方面的控制器, 在不需要进行写数据如VIN等信息的时候, 可以直接复位, 并建议钥匙断电并重新打到IGN ON , 恢复CAN网络上所有控制器模块的网络管理信息和数据通信功能, 及各控制器故障码设置功能。