UDS学习记录
这位前辈与我的路线比较重合(JawSoW) https://blog.csdn.net/Cheatscat?type=blog
还有这位前辈(taotao830) https://blog.csdn.net/tao475824827?type=blog
可以参考的前辈(Kevin的学习站) https://blog.csdn.net/qq_44705488?type=lately
S32K144入门笔记(taotao830) https://blog.csdn.net/tao475824827/article/details/102661370
某个突然看到的大佬 http://www.360doc.com/userhome/44422250
这篇是关于UDS的 http://www.360doc.com/content/17/1115/15/44422250_704055592.shtml
一、协议
1、ISO 15765 DoCAN
ISO15765---2(2004) https://www.docin.com/p-3176864014.html
2、ISO 14229 UDS
汽车控制器(ECU)网络诊断技术交流(张丁) https://www.zhihu.com/column/c_153808584
http://www.360doc.com/content/17/1115/15/44422250_704055592.shtml
UDS(ISO14229-2006) 理解(爱文) https://www.cnblogs.com/sam-snow-v/category/956163.html
3、ISO 15031 OBD
ISO 15031-5-2015
4、ISO 11898 CAN
如何学习CAN总线(心机之花]) https://zhuanlan.zhihu.com/p/30247549
5、SAE J1939
二、UDS前置概念
AUTOSAR
汽车电子嵌入式软件(养只喵叫天狼星) https://zhuanlan.zhihu.com/p/632821969
还是她,文章主页内容还有一些值得看的关于网络和算法的内容 https://www.zhihu.com/people/xbai921031
多了解的话可以看看B站、度盘视频啥的。
通信
SA源地址:发送节点(网络层节点);TA目标地址:接收节点(网络层节点)。
PDU协议数据单元:一组数据+信息的集合,包括PCI(协议控制信息)+DATA(数据)。
通信方式:物理通信:一对一,单播;功能通信:一对多,广播。
寻址方式:物理寻址、功能寻址。(1
会话模式:默认会话、编程会话、扩展会话。(2
(1寻址方式+(2会话模式 组合起来有六种模式:物理寻址+默认会话、物理寻址+编程会话、物理寻址+扩展会话、功能寻址+默认会话、功能寻址+编程会话、功能寻址+扩展会话。
服务
汽车UDS诊断深度学习专栏(心骗小白话)部分需付费订阅,但文章质量很高
https://blog.csdn.net/qq_40242571/article/details/124944392?spm=1001.2014.3001.5502
目前UDS中有26种服务,SID(Service Identification),这些诊断服务从逻辑来说分为以下几类:
1、诊断和通信管理(Diagnostic and Communication Management )10 11 27 28 3E 83 84 85 86 87
2、数据传输 (Data Transmission ) 22 23 24 2A 2C 2E 2D
3、存储数据传输 (Stored Data Transmission),用于操作DTC 14 19
4、输入输出控制 (InputOutput Control ) 2F
5、例行程序控制 (Routine Control) 31
6、上传下载 (Upload Download) 34 35 36 37 38
请求Request格式:
肯定回复Positive Response格式:
<SID+0x40> + +
<SID+0x40> +
否定回复Negative Response格式:
<0x7F> + +
其中NRC是错误响应码,指示具体错误响应的原因。
帧
单帧传输:长度<6/7字节;多帧传输:6/7字节<长度<4095字节。
帧类型:单帧SF、首帧FF、流控帧FC、连续帧CF。
DTC(diagnostic trouble code)
如果系统检测到了一个错误,它将存储为DTC。DTC可表现为:一个显而易见的故障;通讯信号的丢失(不会使故障灯亮起);排放相关的故障;安全相关的错误等。DTC可以揭示错误的位置和错误类型。通常DTC占用3个字节,OBD II占用两个字节。
三、服务详情
10服务:诊断会话控制(Diagnostic Session Control)
实现不同诊断会话(Session)之间的切换。
https://zhuanlan.zhihu.com/p/84609132
https://zhuanlan.zhihu.com/p/33742492
11服务:ECU重启(ECUReset)
通过诊断请求使ECU重启。
https://blog.csdn.net/qq_40242571/article/details/118461403?spm=1001.2014.3001.5502
https://zhuanlan.zhihu.com/p/33742492
27服务:安全访问(Security Access)
为一些显示访问的权限/数据提供访问权限,用于进行简单的身份验证及访问权限变化。
https://zhuanlan.zhihu.com/p/88651234
https://zhuanlan.zhihu.com/p/33742492
28服务:通信控制服务(Communication Control)
用于打开/关闭某些类别的报文的发送/接收,通常在刷写(BootLoader)或传输大量数据时使用。
https://zhuanlan.zhihu.com/p/89910197
https://blog.csdn.net/qq_40242571/article/details/119960743
https://zhuanlan.zhihu.com/p/33852614
3E服务:待机握手(TesterPresent)
这个服务的目的是确保诊断服务或者之前激活的通信还处在激活的状态,可以保持当前的非默认(Default Session)会话
https://zhuanlan.zhihu.com/p/92862336
https://blog.csdn.net/qq_40242571/article/details/120315618?spm=1001.2014.3001.5502
https://zhuanlan.zhihu.com/p/33852614
83服务:访问时间参数(Access Timing Parameter)不常用
84服务:安全数据传输(Secured Data Setting)不常用
85服务:控制诊断故障码设置(Control DTC Setting)
此服务可以让服务端停止或恢复DTC状态位更新,就是可以把ECU存储DTC的功能暂时性地禁止掉。
https://blog.csdn.net/qq_40242571/article/details/120362135?spm=1001.2014.3001.5502 这篇写的太好了
https://zhuanlan.zhihu.com/p/33852614
86服务:事件响应(Response On Event)不常用
诊断通信过程是问答式的,诊断仪发请求,ECU给响应。0x86服务算是一个例外,在ECU收到这条0x86服务之后,当DTC产生时,它会自动地上报DTC及相关环境数据,直到用另一条0x86服务来关闭ECU的这个行为。该功能主要用于ECU的前期开发阶段。
https://zhuanlan.zhihu.com/p/33852614
87服务:链路控制(Link Control)不常用
这个服务用于转化ECU数据链路层和物理层的状态,比如,在高速CAN上的ECU正常通信速率是500 kbit/s,但它同时也支持1M bit/s的波特率,如果需要刷写大量数据,便可以利用这条诊断服务让ECU以1M bit/s的波特率进行通信。
https://zhuanlan.zhihu.com/p/33852614
22服务:通过ID读数据(Read Data By Identifier)
客户端向服务端请求获取一个或多个DID标识的数据记录值。对于服务端来说,客户端可向服务端一次请求一个或多个数据标识符。
• 服务端可以限制请求数据标识符的数量,此数量由车辆制造商和系统供应商协商一致;
• 对于某些特定的DID,可以设置在某个安全等级下访问或某个诊断会话模式下访问;
• 数据记录值的格式和定义需要车辆制造商或系统供应商指定的。
https://zhuanlan.zhihu.com/p/97306828
https://blog.csdn.net/qq_40242571/article/details/120756736?spm=1001.2014.3001.5502
https://zhuanlan.zhihu.com/p/33995635
2E服务:通过ID写数据(Write Data By Identifier)
向对应的数据标识符写入数据记录值
• 该服务请求中只能有一个DID;
• 对于某些特定的DID,可以设置在某个安全等级下访问或某个诊断会话模式下访问;
• 使用此服务写入数据时,可以设置某些前提条件(譬如:车速为0km/h);
• 对于某些特定的DID,可以禁止写访问,所以这些DID不能使用此服务写入(譬如:动态定义的DID读写属性是只读)。
https://zhuanlan.zhihu.com/p/97306828
https://blog.csdn.net/qq_40242571/article/details/121007310?spm=1001.2014.3001.5502
23服务:通过地址读取内存(Read Memory By Identifier)不常用
https://zhuanlan.zhihu.com/p/33995635
3D服务:通过地址写入内存(Write Memory By Identifier)不常用
24服务:不常用
2A服务:不常用
2C服务:不常用
14服务:清除诊断信息(Clear Diagnostic Information)
清除DTC组或特定DTC
• 该服务可设置支持功能寻址,可控制单个服务端或多个服务端诊断信息的清除。
• 要清除哪个地方的诊断信息:如果服务端支持只存在RAM中,那么只要清掉RAM中的相关诊断信息就好了;如果服务端支持诊断信息在内存中有多个副本,则服务端应清除读取DTC信息状态报告服务(0x19)使用的副本,其他副本中的信息另行处理。
https://blog.csdn.net/qq_40242571/article/details/120737515?spm=1001.2014.3001.5502
https://zhuanlan.zhihu.com/p/34425737
19服务:读取DTC信息(Read DTC Information)
读取存储在ECU中的DTC。
https://zhuanlan.zhihu.com/p/37310388
https://zhuanlan.zhihu.com/p/34425737
2F服务:通过ID控制输入输出(Input Output Control By Identifier)
该服务可以通过DID(数据标识符)来进行输入信号的替换和控制零部件负载输出。
这是一个用在产线上较多的服务。该报文的请求至少由4个字节组成。第一个字节是2F,第二第三字节是DID,其中第二字节是高位。第四字节是input Output Control Parameter(并不算一个子功能),可以看做IO控制类型。另外,UDS定义可以用22服务读取2F服务中使用的dataIdentifier,返回值是状态信息,具体的状态信息是什么,则由使用者自定义。
https://zhuanlan.zhihu.com/p/37310388
https://zhuanlan.zhihu.com/p/34886986
31服务:例程控制(Routine Control)
调用ECU内置的一些操作序列的接口。
厂家可以根据自己的需要为ECU定义各种各样的内部操作,而要执行这些操作只需要调用31服务就好了。典型的用途包括检查边界条件、清除闪存、对数据进行较验、对软硬件依赖性进行校验等,甚至有需要的话可以进行恢复出厂设置的操作,还有很多与ECU自身逻辑功能相关的操作也可以定义。
https://zhuanlan.zhihu.com/p/99006507 这篇包括该服务答复Response
https://zhuanlan.zhihu.com/p/34886986
34服务:请求下载(Request Download)
这个服务用于启动下载传输,作用是告知ECU准备接受数据。主要是用来给ECU下载数据的,最常见的应用就是在bootloader中,程序下载工具会发起下载请求,以完成ECU程序的升级。
https://zhuanlan.zhihu.com/p/107889509
https://zhuanlan.zhihu.com/p/35143680
35服务:请求上传(Request Upload)不常用
36服务:数据传输(Transfer Data)
用来下载/上传数据。数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。
https://zhuanlan.zhihu.com/p/108100282
https://zhuanlan.zhihu.com/p/35143680
37服务:请求退出传输(Request Transfer Exit)
用来退出数据传输(上传/下载)。
https://zhuanlan.zhihu.com/p/108124762
https://zhuanlan.zhihu.com/p/35143680
38服务:请求文件传输(Request File Transfer)不常用
四、程序实现
开发协议栈时需要实现的部分(基于 ISO 15765-2:2004(E))(qq_28086637)
https://blog.csdn.net/qq_28086637/article/details/73699677
https://github.com/ukign/UDSDemo/tree/ukign
五、OBD