UDS $34服务,学习笔记

本文详细解读了AUTOSAR中的RequestDownload服务请求格式,包括数据格式标识符、内存地址和长度的定义,以及Dcm_ProcessRequestDownload函数的使用。同时介绍了正负响应格式和可能遇到的错误码情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RequestDownload (0x34) service

Tester向目标ECU请求下载服务

请求格式

上述图片是AUTOSAR官方文档内容。

下面是解释:

dataFormatIdentifier :这是第二个字节的参数,其中高4个bit表示压缩方法,低4个bit表示加密方法,一般情况就是0x00
addressAndLengthFormatIdentifier:请求刷写地址和长度格式,高4个bit表示下面的memorySize参数占几个字节,低4个bit表示下面的memoryAddress参数占几个字节。常规就是0x44,就是memorySizememoryAddress各占4个字节。
memoryAddress :请求刷写的首地址,这个参数占几个字节由addressAndLengthFormatIdentifier参数的低4个bit决定的
memorySize : 请求刷写的字节长度,这个参数占几个字节由addressAndLengthFormatIdentifier参数的高4个bit决定的

/**********************************************************************************************************************
 *  Dcm_ProcessRequestDownload()
 *********************************************************************************************************************/
/*!\简短地启动了一个软件下载序列。
*\详细信息:如果配置了请求下载,则在软件下载处理过程中使用此调用。
*\参数[in]    OpStatus                操作状态
*\参数[in]    DataFormatIdentifier    数据格式的标识符
*\参数[in]    MemoryIdentifier        内存标识符
*\参数[in]    MemoryAddress           要从中检索数据的服务器内存的开始地址
*\参数[in]    MemorySize              内存数据中的字节数
*\参数[in,out]  BlockLength          一个Dcm_ProcessTransferDataWrite的最大字节数
*\参数[out]   ErrorCode               负响应代码,如果返回值为DCM_E_NOT_OK
*\返回        DCM_E_OK                请求成功
*\返回        DCM_E_NOT_OK            请求不成功
*\返回        DCM_E_PENDING           请求尚未完成
*\上下文任务
*\重入错误
*\同步错误
*\配置此函数仅在DCM_FBLMGR_SUPPORT_ENABLED = STD_ON时可用。
 *  \pre            -
 *********************************************************************************************************************/
FUNC(Std_ReturnType, DCM_CALLOUT_CODE) Dcm_ProcessRequestDownload(
  Dcm_OpStatusType OpStatus,
  uint8  DataFormatIdentifier,
  uint8  MemoryIdentifier,
  uint32 MemoryAddress,
  uint32 MemorySize,
  uint32 *BlockLength,
  Dcm_NegativeResponseCodePtrType ErrorCode
  );

如下图的实例Trace : 34  00  44  52  80 90 00 00  00  16  00

正响应格式:

lengthFormatIdentifier:高4个bit表示下面的maxNumberOfBlockLength参数占几个字节,低4个bit默认0
maxNumberOfBlockLength : 目标ECU允许Tester传输最大的字节数
比如下面34服务响应的 maxNumberOfBlockLength等于0x0802,下面36服务就传输了0x0802个字节(包括36 01)
0x1802的解释:CAN TP层的第一个字节的高4bit表示帧类型,1就表示是首帧,2是连续帧,3是流控帧,0是单帧。
实际上,36服务传输可以小于maxNumberOfBlockLength,但不能大于

负响应格式:

  • 0x13 :36服务传输字节大于maxNumberOfBlockLength
  • 0x22 :当目标ECU正在接受数据,发送S34服务请求,ECU应该响应CNC(0x22)
  • 0x31 :请求参数中,参数不对
  • 0x33 :没有进入指定的安全会话
  • 0x70: 没事先擦除内存会报这个NRC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值