RequestDownload (0x34) service
Tester向目标ECU请求下载服务
请求格式
上述图片是AUTOSAR官方文档内容。
下面是解释:
dataFormatIdentifier :这是第二个字节的参数,其中高4个bit表示压缩方法,低4个bit表示加密方法,一般情况就是0x00
addressAndLengthFormatIdentifier:请求刷写地址和长度格式,高4个bit表示下面的memorySize参数占几个字节,低4个bit表示下面的memoryAddress参数占几个字节。常规就是0x44,就是memorySize和memoryAddress各占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