张家港网站设计建设,宿州外贸网站建设公司,南通通州住房和城乡建设网站,国家信息企业公示系统查询文章目录 前言内存分配UDS诊断协议需求CAN ID及时间参数UDS诊断服务Bootloader诊断服务APP诊断服务 DID22服务的DID:2E服务的DID:Routine Control DID#xff1a; 刷写流程预编程主编程后编程 总结 前言
之前做过一个STM32的UDS Bootloader#xff0c;协议栈主要是NXP官网下… 文章目录 前言内存分配UDS诊断协议需求CAN ID及时间参数UDS诊断服务Bootloader诊断服务APP诊断服务 DID22服务的DID:2E服务的DID:Routine Control DID 刷写流程预编程主编程后编程 总结 前言
之前做过一个STM32的UDS Bootloader协议栈主要是NXP官网下的最近在用NXP的S32K3开发官网也有Bootloader的demo工程本文记录S32K324 UDS Bootloader的开发过程有了之前的经验及方法论之后整个BootloaderAPP上位机调通只花了三天实际。现在整理下开发过程及遇到的一些问题。本篇是需求篇
内存分配
本次使用的单片机为S32K324,flash大小4M一个扇区8k,SRAM512KB flash起始地址为0x4000000
RAM起始地址为0x2000000 将flash划分为Bootloader和App两块 APP跳转到boot,这个标志放在ram中但要保证软复位时不清除. FlashDrive需要放到ram中每次下载APP时先下载FlashDriver APP有效标志放入Flash中每次刷写前清除标志刷写成功后写入标志。 flash分配如下 UDS诊断协议需求
CAN ID及时间参数
波特率500k 物理寻址ID0x714 功能寻址ID0x7FF ECU 响应ID: 0x614 P2 Server:50ms P2 *Server:5000ms P2 Client:50ms P2 *Client:5000ms S3server5000ms S3client:2000ms STmin:0ms 连续帧协议数据单元发送的最小时间间隔 BlockSize:0 每一块中包含连续帧的个数 UDS诊断服务
Bootloader诊断服务 1001Diagnostic Session ControlDefault SessionPhy ReqFun Req1002Diagnostic Session ControlECU Programming SessionPhy Req1003Diagnostic Session ControlECU Extended SessionPhy ReqFun Req1101ECU ResetHard ResetPhy ReqFun Req22Read Data By IdentifierPhy Req2EWrite Data By IdentifierPhy Req2701Security AccessRequest SeedPhy Req2702Security AccessSend keyPhy Req3101Routine ControlStart RoutinePhy Req34Request DownloadPhy Req36Transfer DataPhy Req37Request Transfer ExitPhy Req APP诊断服务 1001Diagnostic Session ControlDefault SessionPhy ReqFun Req1002Diagnostic Session ControlECU Programming SessionPhy Req1003Diagnostic Session ControlECU Extended SessionPhy ReqFun Req1101ECU ResetHard ResetPhy ReqFun Req14ClearDiagnosticInformationFF FF FF Clear allPhy Req22Read Data By IdentifierPhy Req2800CommunicationControlEnable Rx and TxPhy ReqFun Req2801CommunicationControlEnable Rx and DisableTxPhy ReqFun Req2802CommunicationControlDisable Rx and EnableTxPhy ReqFun Req2802CommunicationControlDisable Rx and TxPhy ReqFun Req3101Routine ControlStart RoutinePhy Req8501ControlDTCSettingOnPhy ReqFun Req8502ControlDTCSettingOff DID
22服务的DID:
F1AA:读取版本号
2E服务的DID:
F15A -写指纹
Routine Control DID
FF00擦除内存 0201检查预编程条件 0202:检查checksum FF01:检查编程完整性和兼容性
刷写流程
预编程
1.进入扩展模式功能寻址10 83 83表示不需要服务器应答 2.检查预编程条件物理寻址31 01 02 01针对要刷写的ECU。一般就是检查供电电压车速这些如果厂家没指定那么由ECU自己定义。如果ECU不满足预编程条件则收到10 02进入编程模式时返回0x22不满足条件否定响应。 3.停止DTC设置功能寻址85 8282表示不需要服务器应答 4.禁止无关通讯功能寻址28 83 0383表示发送和接收报文都禁止且不需要服务器应答第三位01表示是应用软件报文第三位03则表示应用软件和网络管理报文都禁止 5.读取版本号物理寻址22 F1 AA 诊断仪读取当前ECU版本信息。 主编程
1.进入编程会话10 02 此时在APP中应该执行复位然后进入boot中的编程模式 2.请求种子 27 01 3.发送密匙 27 02 key 4.解锁成功后2E服务写入指纹信息。一般就是时间和设备号这些 5.下载flash驱动程序34 36 37服务。因为bootloader里是不带驱动程序的防止意外操作导致flash改变程序出现异常所以只在刷写的时候才允许操作flash。下载完成后一般还需要例程控制31服务进行完整性检查CRC32校验和依赖性检查ecu指定DID为FF01-14229-1规定该步骤暂时不做 6.擦除内存由31服务执行具体的DID按14229-1应该为FF00需要给定擦除的起始地址和大小。实际一般擦除都是ECU自己判断的区域 7.下载APP程序343637服务。下载完成后也需要例程控制31服务中的完整性检查CRC32校验和依赖性检查ecu指定DID为FF01-14229-1规定 8.ECU复位一般发送11 01进行复位复位完成后Flash驱动程序将被清除。避免意外激活这些可能会进行非预期的内存擦除或程序操作的代码。 后编程
1.主编程完成后ECU复位诊断仪发送进入扩展模式10 83功能寻址不需要ECU回复 2.恢复通讯28 80 03功能寻址不需要ECU回复03表示网络管理报文和应用报文都恢复 3.开启DTC诊断85 81功能寻址不需要ECU回复 4.清除刷写ECU的故障信息物理寻址14 FF FF FF 5.进入默认会话模式10 81功能寻址 总结
刷写流程和UDS协议和之前的都差不多主要是需要弄清楚芯片的flash和ram区域以及分配合适的空间给Boot和APP。后面就是Boot和APP软件的开发了。将会在后面的文章中详细介绍。