所以有了这么优秀的资源我觉得就不需要非常详细地去解释了,不过为了解释如何理解ISO14229-1协议,系列文章的整体逻辑性考虑,以及后续的基于AUTOSAR架构的软件实现,目前文章还是会涉及一些内容。本文主要介绍数据传输功能单元的读/写数据服务($22和$2E)和不同数据长度处理方法(ISO15765-2协议)。
读取数据服务($22)是根据DataIdentifier(即DID)去请求读取数据,其请求格式为SID+DID。
注意DID表示存储数据的地方,一般存储整车厂和零件供应商定义的数据,包括模拟输入和输出信号(比如转速信号),数字输入和输出信号(比如车门信号),内部数据和系统状态信息等,这里请求的DID可以是一个,也可以是多个。
该服务的正响应格式为(SID+40)+DID+Data。下面看两个例子:
考虑上文已经介绍了相应服务支持的相应负响应,此处不再列出,但此处我们看一下服务响应执行的流程图,以此可了解到软件执行响应的大致逻辑,即先判断是什么SID,然后判断DID长度是否正确,再判断是否有多个DID......
注意这里一次只写一个DID的数据,不像读取数据服务($22)可以一次读取多个DID的数据。通过该服务可以:写入一些配置信息到ECU(比如VIN码),清除非易失性数据,重置学习值,设置一些可选内容。
注意:$2E要在ECU解锁了才能执行,,而回顾上篇文章可知,在默认会线服务,故先进非默认会话模式解锁,解锁后再写入数据。
以上就简单介绍了读取/写入数据服务($22和$2E),一般在请求这两个服务前,需要使用安全访问服务($27)解锁,处于解锁状态才能去读写数据。
另外通过这两个服务的使用发现数据长度有超过8个字节的情况,当使用CAN总线进行UDS通讯时,我们知道一帧数据只能包含8个字节的数据,那意味着无法一帧就传输完所有的数据,那么该怎么处理呢?ISO15765-2协议就被提出来解决该问题。
ISO15765-2协议提出了单帧传输和多帧传输的概念,通过之前请求-响应例子来理解:
,这里不管是请求还是响应都只要使用单帧传输就行,即用一条帧CAN信息就可传输完。其具体过程如下:
62 F1 90 57 30 4C 30 30 30 30 34 33 4D 42 35 34 31 33 32 36
,这里请求单帧传输即可,但响应的数据超过8个字节,显然无法通过单帧传输实现,所以就需要使用多帧传输。其具体过程如下:
怎么识别这三种帧类型?如上例中橙色字体(即N_PCItype,第一字节的bit 7-4):1表示首帧,2表示续帧,3表示流控帧。
为什么需要这三种类型?由于数据无法通过一帧CAN信息传输完,这时通讯就更复杂:一是客户端需要分多次发送数据,得让服务端明白是否接收数据完整,如何组合接收的数据;二是服务端需要根据自身接收的处理能力来要求客户端如何去发送,比如多长时间发送。因此:
先通过首帧会告诉客户端数据有多长,比如这里的 0x0 14,即数据长度有20个字节;
(0x00,表示只发一帧流控帧,服务端将一直发续帧直到全部数据发送完毕),
最后服务端根据客户端响应的流控帧信息,按规定的要求顺序发送数据给客户端(粉色字体1,2表示续帧的顺序)。
注意:本例涉及的更具体过程可参考下面结合ISO15765-2协议的解释。
ISO15765-2协议的逻辑是:先定义一个叫N_PCI的,通过它可知道是单帧还是多帧,是多帧的话,是首帧还是流控帧还是续帧;然后是单帧发送什么内容?是首帧又发送什么内容?....;
根据下图12左图的定义,服务端(作为发送方)响应时,发送方发送首帧后,接收方(客户端)接收到了将回复流控帧,即对发送方如何发送续帧做出一些要求,然后发送方再根据接收方的要求发送续帧。
对于流控帧,N_PCI包括N_PCI类型、FS、BS和STmin,这三个参数均是告诉发送方对续帧的要求,其示意如下图12的右图,其具体定义如图13所示。
当发送方收到流控帧后,将采用续帧发送剩余的数据。对于续帧,N_PCI包括N_PCI类型和SN,N_PCI类型为续帧,即2;SN(sequence number),表示续帧的顺序号,具体说明见图14。比如上面还剩余12个字节数据,那意味着还需要两帧续帧才能将数据发送完毕,这时就需要给续帧一个顺序号,让接收方知博亚体育 博亚体育app 在线道,接收方才能按规定和顺序去读取完整的数据。那么忽略N_AI,N_PDU包含N_P博亚体育 博亚体育app 在线CI和N_Data,这需要发送两帧续帧,第一帧为:21 30 30 34 33 4D 42 35,第二帧为:22 34 31 33 32 36。
以上就简单介绍了ISO14229-1协议的数据传输功能单元的读取/写入数据服务,对读取的数据长度问题,引出了ISO15765-2协议,重点介绍如何进行多帧传输,如下所示: