草庐IT

What is UDS Service 0x10 - Diagnostic Session Control ?

Mysticbinary 2023-03-28 原文

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

有关What is UDS Service 0x10 - Diagnostic Session Control ?的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 由于 libgmp.10.dylib 的问题,Ruby 2.2.0 无法运行 - 2

    我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro

  3. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  4. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  5. ruby - 安装 tiny_tds 在 mac os 10.10.5 上出现错误 - 2

    我正在使用macos,我想使用ruby​​驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System

  6. ruby - rails 3.2.2(或 3.2.1)+ Postgresql 9.1.3 + Ubuntu 11.10 连接错误 - 2

    我正在使用PostgreSQL9.1.3(x86_64-pc-linux-gnu上的PostgreSQL9.1.3,由gcc-4.6.real(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1,64位编译)和在ubuntu11.10上运行3.2.2或3.2.1。现在,我可以使用以下命令连接PostgreSQLsupostgres输入密码我可以看到postgres=#我将以下详细信息放在我的config/database.yml中并执行“railsdb”,它工作正常。开发:adapter:postgresqlencoding:utf8reconnect:falsedat

  7. ruby-on-rails - 在 osx 10.9.3 上使用 RVM 安装 ruby​​-1.9.3-p547 时出错 - 2

    如何解决这个错误:$rvminstall1.9.3Searchingforbinaryrubies,thismighttakesometime.Nobinaryrubiesavailablefor:osx/10.9/x86_64/ruby-1.9.3-p547.Continuingwithcompilation.Pleaseread'rvmhelpmount'togetmoreinformationonbinaryrubies.Checkingrequirementsforosx.Certificatesin'/usr/local/etc/openssl/cert.pem'arealr

  8. u盘安装系统(win10为例) - 2

    下载微PE工具箱进入官网下载微PE工具箱-下载 安装好后,打开微PE工具箱客户端,选择安装PE到U盘 PE壁纸可选择自己喜欢的壁纸,勾选上包含DOS工具箱,个性化盘符图标 下载原版系统进入网站下载镜像NEXT,ITELLYOU如果没有账号,注册一下就好进入选择开始使用选择win10 这里我们选择消费者版,用迅雷把BT种子下载下来 下面的两个盘符,是PE工具箱安装进U盘后,分成的盘符,注意EFI的盘符,这里面不能删东西,也不能添东西,另一个盘符可以当做正常的U盘空间使用,我们现在需要把下载下来的景象文件复制到正常的U盘空间中去 这个时候我们的系统U盘就只做好了 安装系统我们将U盘插入电脑,开机,

  9. ruby-on-rails - OSX 10.7.5 - Ruby on Rails LoadError : Could not open library 'sodium' : dlopen(sodium, 5) - 2

    输入rakedb:create后我得到:LoadError:Couldnotopenlibrary'sodium':dlopen(sodium,5):imagenotfound.Couldnotopenlibrary'libsodium.dylib':dlopen(libsodium.dylib,5):imagenotfound这里还有一些输出。/Users/Mao/.rvm/gems/ruby-2.0.0-p451/gems/ffi-1.9.3/lib/ffi/library.rb:133:in`blockinffi_lib'/Users/Mao/.rvm/gems/ruby-2.0

  10. ruby-on-rails - 如何使用 Xcode 4.5.1 在 OSX Lion 10.8.2 上编译 EventMachine gem - 2

    我找遍了所有我能找到的地方,但似乎找不到解决这个问题的办法。我在Lion10.8.2上使用Xcode4.5.1,并尝试为Rails项目运行bundle,但它一直卡在这上面。我正在为Heroku使用Thingem。Bolanos@Jeremys-Mac-mini⦿-1.9.3fishfarm$sudogeminstalleventmachinePassword:Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingeventmachine:ERROR:Failedtobuildgemnativeextens

随机推荐