第三十三篇技术笔记:郭大侠学UDS(10服务)- 桃花岛内规矩多,模式切换要会说
2026/5/4 21:26:40 网站建设 项目流程

写在开篇

上回说到,黄蓉读94 01(“谁是靖哥哥最爱的心上人”)被拒,郎中帮她“转了个身份”才读出来。具体怎么转的,正在气头上的蓉儿没顾得上细看。

第二天,等缓过神来,她直接拉着郭靖奔郎中店里。

“郎中!你昨天帮我转的那个‘身份’到底是啥?为啥一转就能读靖哥哥的私密柜子了?”

郎中捋着胡子笑了:

“今天咱们就好好唠唠UDS的另一个服务——10服务:诊断会话控制。说白了,就是ECU的‘岛上身份’。”

黄蓉眼珠一转:“岛上身份?就像我爹桃花岛那套——一般游客模式、亲信弟子模式、岛主本尊模式?”

郎中竖起大拇指:“对头!”

一、10服务:ECU的“桃花岛身份之谜”

10服务大名DiagnosticSessionControl,不读数据也不写数据,只做一件事:切换ECU的工作模式

身份会话模式能干啥像谁
游客默认会话(01)读VIN、读故障码岛上普通访客
弟子扩展会话(03)写数据、例程控制亲信弟子
岛主编程会话(02)刷固件、改底层黄岛主本尊

郎中在白板上写下这句口诀:

默认会话只能读,扩展会话可以写,编程会话才能刷

郭靖念了一遍:“读、写、刷……郎中,这句好记!”

黄蓉也点头:“比降龙十八掌的口诀好背多了!”

二、会话状态机:桃花岛的三重身份

郎中画了张状态机图:

郎中指着图,四条规矩——

规矩一:上岛默认是游客(默认会话状态)

ECU上电自动进入默认会话,想升级?自己发命令。

规矩二:游客不能直接变岛主

默认会话不能直切编程会话(10 01 → 10 02禁止)。必须先切扩展会话,再切编程会话。

黄蓉秒懂:“想见我爹?得先当弟子,不能从大门口直接闯密室。”

规矩三:就算同级身份,重新切一次,锁也会重置

从非默认会话切到非默认会话(包括10 0310 03),安全锁会重置

黄蓉扭头看郭靖:“所以你写94 01的时候,郎中帮你切扩展会话、对暗号、写进去——一气呵成。我后来自己也切了会话才读到。不是靖哥哥藏私,是ECU的规矩在保护我的好奇心。”

规矩四:在高级房里不说话,会被请回大厅

服务端超时被请回:进入非默认会话后,如果在超时时间内没收到任何诊断请求,ECU会自动退回默认会话。

“那不想被踢怎么办?”黄蓉问。

郎中捋着胡子:“这就是3E服务——Tester Present的活了。”

三、3E保活:告诉ECU“我还在”

“3E服务特别简单,就一个功能:保活。”

服务命令响应说明
Tester Present3E 007E 00“我还在,别踢我”

“进入扩展会话或编程会话后,ECU会启动一个S3定时器(通常5秒)。如果你在S3时间内没发任何诊断请求,ECU就当你走了,自动退回默认会话。”

黄蓉:“所以不想被踢,就得不停地跟ECU说‘还在还在’?”

郎中点头:“对!每2秒发一次3E 00,S3定时器不断重置,你就一直待在高级房间里。”

郭靖挠挠头:“那不发会咋样?”

“试试呗。”郎中切了扩展会话,然后故意不发3E。等了5秒,再发22 F1 90读VIN——

结果收到:7F 22 22

0x22——条件不满足。ECU已经把你踢回默认会话了,所以读VIN被拒。”

黄蓉咬了口糖葫芦:“哦~~就像在书房待太久不说话,管家会来问‘还在吗’,你要回一句‘在’,不然就被请回大厅了!”

郎中竖起大拇指:“就是这个理!”

四、切换身份不是你想切就能切

10 03,ECU会先查你有没有资格进书房(就是必须要满足定义的切换条件哦):

条件类型举例不满足时返回的NRC
车速条件车速必须为0才能进编程会话0x22(条件不满足)
发动机状态发动机不能运转0x22
安全条件车辆必须处于安全状态0x22
权限条件特定客户端ID才有资格切扩展会话0x7E
顺序条件默认会话不能直切编程会话0x7E

很多厂家还规定:想进扩展会话,必须先过27服务

这也是为什么先切会话、再对暗号——因为对暗号本身就需要扩展会话权限。

郭靖恍然大悟:“所以我写94 01的时候,郎中先让我从游客变弟子(10 03),然后才能对暗号(27服务),最后才写进去。顺序不对,ECU根本不认!默认会话只能读,扩展会话可以写,编程会话才能刷——顺序错了,啥也干不了。

五、武功高不高 且看数据包

1. 切扩展会话(10 03)

03 FC 80 01 00 00 00 0210 03
字段说明
Protocol Version0x03版本3
Inverse Version0xFC暗号
Payload Type0x80 0x01诊断消息
Payload Length0x00 00 00 022字节
UDS命令0x10 0x03切扩展会话

2. 切扩展会话成功(50 03)

03 FC 80 01 00 00 00 0850 0300 32 01 F4 00 00
字段说明
DoIP头部03 FC 80 01 00 00 00 08负载长度8字节
UDS响应50 03 00 32 01 F4 00 00正响应+参数,最后补0

响应里带两个时间参数:

  • 00 32(50ms):P2Server_max,ECU处理请求的最大时间

  • 01 F4(500ms):P2*Server_max,ECU返回NRC 0x78后的最大等待时间

3. 3E保活

请求:03 FC 80 01 00 00 00 023E 00响应:03 FC 80 01 00 00 00 027E 00

4. S3超时后,被踢回大厅

ECU不主动发消息,只是把你踢下线。你发下一个请求时,它直接回NRC 0x22——你才发现已经被赶回大厅了。

六、这些坑,靖哥哥替你先踩了

真相
以为只有27服务就能写必须先切扩展会话
以为切一次会话永久有效重新切同级会话,安全锁会重置
以为游客能直接变岛主必须经过扩展会话
以为S3超时ECU会喊你不会,下一脚直接踢
以为所有DID默认会话都能读94 01这种,游客就是看不了
以为3E是“心跳”必须一直发只要在S3时间内发一次就行,不用无脑狂刷

七、下步目标

郭靖感慨:“默认会话只能读,扩展会话可以写,编程会话才能刷——原来10服务就是ECU的‘桃花岛身份’,什么身份干什么活。3E保活就是告诉ECU‘我还在’,免得被踢出去。”

郎中笑着点头:“10服务和3E保活都讲完了。会话切换有顺序、有条件、有超时,3E续命,S3超时回退。

下一篇我们进入真正的硬仗——34/36/37刷写固件:换药方。”

黄蓉咬一口糖葫芦:

“桃花岛内规矩多,模式切换要会说。靖哥哥,你终于明白我为什么非得把94 01读出来了吧?”

郭靖老老实实:

“明白了。不是为了查岗,是想确认……有些话,你真的写进去了。”

黄蓉愣了一下,没接话,偷笑着把糖葫芦棍儿扔进垃圾桶。

写在最后

10服务 = ECU的“桃花岛身份”:默认会话只能读,扩展会话可以写,编程会话才能刷。
3E服务 = 保活续命:告诉ECU“我还在”,别踢我。

郭靖叹口气:“桃花岛内规矩多,学完10服务才敢说,真听懂了蓉儿的潜台词。”

打完收工,886。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询