What is UDS Service 0x10 - Diagnostic Session Control ?

发布时间 2023-03-22 19:13:58作者: Mysticbinary

Why need the UDS Service 0x10?

ECU在正常工作时会处于某一个会话模式下,上电后会自动进入默认会话模式,所以ECU启动后我们不需要输入0x10 01来进入该会话模式。ECU的不同会话模式间存在一定的状态转换关系规则(特定逻辑)。

初次接触UDS的话,可能不太理解这个0x10服务的含义和用途,我们通过一个隐喻公司的大厅和两个私密的会议室的例子来进行类比。

例如:我们将ECU之间的通讯类比成两个员工之间的对话。两个人在公司的大厅随便畅所欲言,随意讨论非私密性的话题,这个场景类似默认会话,不会对安全性有要求,无需刻意寻找专门使用场所,即不需要专门会话控制进入此模式,上电即默认进入。

如果两人想讨论机密项目的话题,不想被其他不相关人员知道,于是换个环境,从公司大厅进入了单独的会议室,这个过程可以类比成从默认会话进入了扩展会话,进入会议室后为了确认对方是本人没被冒充,进行识别鉴权询问口令“天王盖地虎”,查看对方能不能答出“宝塔镇河妖”,认证鉴权的这个附加过程就属于跟0x10服务配合使用的安全访问服务0x27,沟通结束退出会议室回到大厅区域,这个过程就是从扩展会话退出到默认会话的过程。

而从默认会话进入了编程会话,也是类似从公司大厅进入了单独的会议室沟通,只是这个会议室的功能更高级一点比如可以写入文件到ECU等,功能更高级相对应的鉴权也得有所区别,在编程会话这个会议室里,就换一个询问口令“你知道今天下雨吗?”,如果对方能答上“今天不下明天下”就认为身份合法。

0x10 types

0x10 会话模式的三种模式:

  • 10 01 默认模式(default session)

    • 在默认会话模式下,一般情况下不允许支持写服务(Write Data By Identifier 0x2E),也不允许支持请求下载服务(Request Download 0x34)
  • 10 02 编程模式(Programming Session)

    • 在编程会话模式下,就可以支持(Request Download 0x34)
  • 10 03 扩展诊断模式(extended Diagnostic Session)

    • 在拓展诊断会话模式下,就允许支持写服务(Write Data By Identifier 0x2E)

Conversion between session modes

不同会话模式间的切换存在一定的逻辑关系。下图显示的就是一个不同会话间转换示例图,需要注意的是不同OEM对于进入编程会话通常会有不同的设计要求,具体项目中会话间跳转关系请依据OEM项目的规范文件为准。

  • 默认会话
    设备上电后自动进入默认会话模式,从图中我们可以看出在默认会话模式下的切换关系。

    本模式重新进入:可以通过0x10 01再次进入默认会话,或通过0x11 01、0x11 03复位服务重启进入默认会话。

    本模式进入其他模式:默认会话模式可以通过0x10 02进入编程会话模式,在有些项目中默认会话是不能直接进入编程会话模式,具体项目中是否能够支持需要查阅项目产品的诊断技术规范;默认会话模式下还可以通过0x10 03进入扩展会话模式。

  • 编程会话
    启动编程会话ECU会进入boot模式,进入boot模式后ECU可以进行固件的更新。boot的更新可以通过Jtag接口使用工具进行烧录,相对来说Jtag接口的权限等级比较高,可以通过工具直接修改存储空间中对应地址的数据信息。

    实际项目会使用CAN网络来软件刷写,商用阶段去除Jtag接口,这样处理的话安全性会得到一定保障。同样的在boot模式下可以刷写固件,那很多诊断服务在boot下也可以正常执行,如配合刷写的0x110x220x2E0x310x280x340x360x370x85等服务。

    本模式重新进入:处于编程会话模式下,可以通过0x10 02再次进入编程会话。

    本模式进入其他模式:编程会话状态下可以通过0x10 01进入默认会话,或通过0x11 01服务复位ECU来进入默认会话;编程会话不能进入扩展会话模式。

  • 扩展会话

    某些服务需要扩展会话的支持才能执行,扩展会话下如果不配合使用0x3E服务(保持会话服务),ECU会在数秒后自动退出扩展会话模式进入到默认会话模式。

    本模式重新进入:处于扩展会话模式下,可以通过0x10 03再次进入扩展会话。

    本模式进入其他模式:在不使用0x3E服务保持会话时,可以通过超时自动退出到默认会话模式,可以通过0x10 01进入默认会话,或通过0x11 01、0x11 03服务复位ECU来进入默认会话;在某些项目中仅支持在0x10 03扩展模式下,才能进入0x10 02编程会话。

UDS 0x10 Message format

Request Message format

  • SID
    就是0x10
  • Sub-Function
    子服务就是上文讲的01默认会话02编程会话03扩展会话
    当然规范中还存在00保留字段、04安全系统诊断会话、05-3F保留、40-5F主机厂自定义字段、60-7E零部件供应商自定义字段等等(了解即可)。
  • parameter
    Parameter项是对应到最详细子功能的属性参数配置项,属性参数的配置也是根据实际情况来进行配备。
    0x10服务没有参数。

Response Message format

  • SID
    SID的值为请求报文中SID + 0x40 , 为0x50
  • Sub-Function和Parameter
    这两部分的内容根据具体情况确定,在项目诊断规范中有明确规定。

Negative Response Code - NRC

负响应回复报文的格式同样可以分为3个部分:

  • 首先第一个字节是0x7F,表明请求失败;
  • 第二个字节为请求的服务SID ;
  • 第三个字节为失败原因代码NRC
    NRC代码具体对应的失败原因可以查阅NRC的表格来确定,在具体的项目中这部分内容可以查阅项目中的零部件网络诊断规范。
    注意:负响应NRC代码表一般在项目中是通用的。

负响应报文格式示例:

7F 10 7E
// 7F表明该相应失败
// 对应的失败服务是10
// 失败原因是7E,查阅NRC表知道7E的含义是“Sub-function not supported in active session”,提醒使用请求10 02子功能请求时不应该在当前会话模式下,当前的会话模式不支持10 02子功能请求使用。

UDS 0x10 and 0x27 Process

进入扩展模式编程模式通常是配合0x27服务一起使用的,所以把这两个服务一起来进行介绍,是因为通常0x27服务使用的前提就是先进入0x10服务的扩展会话,
反过来讲0x10服务很少单独使用,一般都是跟0x27服务配合先完成安全验证,然后其他服务才能在一定的会话模式和安全接入等级中正常使用。

主机厂和零部件厂商可以通过不同的UDS服务对ECU执行很多操作,这些操作有的会修改ECU配置,有的可以重启设备,有的可以读取信息等等。显而易见的是,不同的操作所造成的后果严重程度是不一样的,因此做敏感操作前需要通过安全认证就很有必要。

我们通常把默认状态下的ECU叫做锁定状态(Locked),成功执行完成$27服务后的状态叫做解锁(Unlock),只有在解锁状态下才能进行数据写入、修改等等操作。

上位机和ECU的大致交互流程如下:

//UDS or APP
10 03
50 03
27 01
67 xx xx xx xx
27 02 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 
67 02
2E xx xx
//BOOT
10 02
50 02
27 11
67 xx xx xx xx
...
34 xx xx

Reference

鉴源丨车载ECU嵌入式设备的诊断测试 - 会话和安全控制
https://www.freebuf.com/articles/ics-articles/346353.html

CAN诊断轻松入门第二讲-UDS服务讲解
https://zhuanlan.zhihu.com/p/348308023