【AUTOSAR】UDS协议的代码分析与解读(七)----UDS读取数据和读取内存

该文详细描述了两种ECU诊断服务,包括ReadDataByIdentifier用于按数据标识符读取数据记录,支持模拟/数字信号和系统状态等信息。ReadMemoryByAddress服务则允许根据内存地址和大小读取ECU数据。服务涉及报文格式、响应码、参数定义和执行规定,强调了数据安全和访问控制。

8.7 读取数据 ReadDataByIdentifier (22h)

此服务允许诊断工具读取数据标识符对应的数据记录。

ECU肯定响应报文发送数据记录值。记录值的格式和定义需在零部件诊断规范中详细描述。记 录值要求包括模拟输入和输出信号, 数字输入和输出信号,ECU支持的内部数据和系统的状态等。

8.7.1 报文格式

 36 读取数据服务的请求报文

Byte

Name

Cvt

Value  (Hex)

#1

RequestServiceIdentifier

M

22

#2

#3

DataIdentifier[]=[

byte#1

byte#2]

M

00-FF

00-FF

 37 读取数据服务的肯定响应

Byte

Name

Cvt

Value  (Hex)

#1

PositiveResponseServiceID

M

62

#2

#3

DataIdentifier[]=[

byte#1

byte#2]

M

00-FF

00-FF

#4

DataRecord[]=[

data#1

data#n]

M

00-FF

00-FF

8.7.2 支持的否定响应码

38 读取数据服务的否定响应码

Hex

Cvt

ErrorText

13

M

报文长度错

如果报文长度错误或者诊断工具一次请求的DID个数超过允许的最大值,则 发送否定响应码。

31

M

请求超出范

下情况时,发送此否定响应码:

1.没有一个请求的DID值被ECU支持;

2.当前会话下没有一个请求的DID值被ECU支持。

22

U

条件未满足

如果ECU操作条件不满足执行相应动作的要求,发送此否定响应代码。

33

U

安全访问拒绝

如果与专用地相关的数据标识符处于保护状态并且ECU锁定, 发送此否定响应 

8.7.3 参数定义

附录B中定义了h业部强制要求的数据标识符,每个ECU都必须支持。其他与ECU功能相关的 据标识符h事业部及供应商的诊断工程师共同定义并在零部件诊断规范中详细描述。

8.7.4 执行规定

通过此诊断服务一次读取的数据标识符多为1个。

8.8 读取内存 Read Memory By Address (23h)

该服务允许诊断工具根据起始地址及定义的数据大小从ECU中读取数据。

8.8.1 报文格式

 39 读取内存服务的请求报文

Byte

Name

Cvt

Value  (Hex)

#1

Request Service Identifier

M

23

#2

Address And Length Format Identifier

M

24

#3

#6

Memory Address[]=[

byte#1(MSB)

byte#m]

M

M

00-FF

#7

#8

memorySize[]=[

byte#1(MSB)

byte#2]

M

M

00-FF

 40 读取内存服务的肯定响应

Byte

Name

Cvt

Value  (Hex)

#1

PositiveResponseServiceID

M

63

#2

#3

dataRecord[]=[

data#1

data#m]

M

U

00-FF

00-FF

8.8.2 支持的否定响应码

41 读取内存服务的否定响应码

Hex

Cvt

ErrorText

13

M

报文长度错

如果报文长度错误,发送此否定响应码

31

M

请求超出范

下情况时,发送此否定响应码:

1.[$MA,($MA+$MS-$1)]内的任意内存地址无效;

2.[$MA,($MA+$MS-$1)]内的任意内存地址受限;

3.请求报文中的参数memorySize大于ECU支持的最大值;

4.指定的addressAndLengthFormatIdentifier无效。

33

M

安全访问拒绝

如果[$MA,($MA+$MS-$1)]内的任意内存地址是受保护的且ECU没有处于解锁状 态,发送否定响应码。

22

U

条件未满足

如果ECU的操作条件不满足执行相应动作的要求,发送此否定响应码。

8.8.3 参数定义

内存地址”  (MemoryAddress)长度为4字节。

参数内存大小”  (MemorySize)长度为2字节。

8.8.4 执行规定

此服务的参数无特殊要求,但ECU需为直接读取内存的执行考虑适当的安全机制。

UDSDemo-内含协议栈源码.zip”是一个包含UDS(统一诊断服务)协议栈源码的压缩包,它为需要在项目中实现UDS通信功能的开发人员提供了便利。UDS是基于ISO 14229-1标准的车载诊断协议,主要用于汽车电子系统的故障诊断数据交换。该压缩包中的“UDSDemo-master”目录可能是项目的根目录,里面可能包含以下关键部分: TP层(传输层):作为UDS协议的底层,TP层主要负责数据传输。它通常基于ISO TP(ISO 15765-2)协议,用于对长消息进行分包重组,以确保数据在物理层的可靠传输。在UDSDemo中,该部分源码会涉及帧分包处理、重传机制以及错误检测等功能的实现。 网络层:网络层主要处理物理媒介的交互,比如CAN(控制器局域网)或LIN(局部互联网络)等总线协议。这部分源码会涉及如何将UDS报文转换为适合特定网络的帧格式,并进行发送接收。 诊断代码:UDS提供了多种诊断服务,例如读取DTC(诊断故障码)、执行控制单元测试、读取写入ECU(电子控制单元)内存等。这部分源码会实现这些服务的请求响应逻辑。 使用文档:压缩包中附带的使用文档是理解应用UDS协议栈的重要资料。它通常会介绍如何配置集成源码,如何调用不同服务,以及如何处理异常情况等内容。开发人员需要仔细阅读这份文档,以便将UDS功能正确地整合到自己的项目中。 示例测试用例:可能还会包含一些示例代码或测试用例,帮助用户快速上手验证UDS协议栈的功能。这些示例可能会展示如何发起诊断请求,或者如何处理来自ECU的响应等。 在实际开发中,将UDS源码移植到新项目时,需要注意以下几点: 适配网络配置:要确保源码中的网络参数(如CAN ID、波特率等)目标系统的网络配置相匹配。 错误处理:需要分析源码中的错误处理机制,以使其能够适应不同场景下的异常处理需求。 安全性稳定性:要检查源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值