【Autosar从入门到精通到进阶实战篇】79 0x36传输数据:刷写的高速公路

发布时间:2026/7/23 19:50:17
【Autosar从入门到精通到进阶实战篇】79 0x36传输数据:刷写的高速公路 79 0x36传输数据:刷写的高速公路开篇故事:卡在“数据发送中”的深夜去年冬天,我帮一家Tier1调试一个OTA刷写问题。ECU是恩智浦的S32K144,UDS刷写流程走到0x34请求下载时一切正常——ECU返回了正响应,给出了最大块长度(MaxNumberOfBlockLength)和块大小(BlockSize)。但到了0x36传输数据阶段,刷写工具刚发完第一个数据块,ECU就卡死了。工具侧显示“正在发送数据…”,但ECU那边没有响应,也没有超时。重启后,ECU进入了编程会话,但刷写进度永远停在1%。我盯着CANoe的Trace看了两小时,发现一个细节:工具发送的第一个0x36请求包含128字节数据,而ECU在0x34响应中明确说“块大小=64,最大块长度=1024”。128 64,ECU直接罢工了——不是拒绝,而是死机。后来查手册才知道,这个ECU的UDS栈有个隐藏bug:如果单帧数据超过块大小,接收缓冲区会溢出,导致看门狗无法喂狗,系统复位。这就是典型的“数据分片”和“流控管理”没做好。今天这篇,我们就把0x36传输数据这个“刷写的高速公路”彻底讲透——如何正确分片、如何管理流控、如何避免把ECU“撑死”。痛点拆解:分片与流控的三大误区误区1:把“块大小”当“最大包长”很多新手以为0x34响应中的BlockSize就是网络层(比如CAN TP)的单帧最大长度。这是大错特错。反例代码(伪代