DCM

为了定义DCM模块的功能,DCM SWS将DCM模块建模为由以下子模块组成:
1.诊断会话层(DSL)子模块:DSL子模块可确保与诊断请求和响应有关的数据流,监督和保证诊断协议计时并管理诊断状态(尤其是诊断会话和安全性)。
2.诊断服务分派器(DSD)子模块:DSD子模块处理诊断数据流。 子模块:
  1.通过网络接收新的诊断请求,并将其转发到数据处理器。
  2.由数据处理器(例如DSP子模块)触发时,通过网络传输诊断响应。
3.诊断服务处理(DSP)子模块:DSP子模块处理实际的诊断服务(分别为子服务)请求。下图概述了DCM模块中子模块DSP,DSD和DSL之间的接口。

注意:这些子模块及其之间的接口的实现是不是强制性的。 引入它们只是为了提高规格。

负面回应码(NRC)
定义UDS服务和OBD服务的标准定义了否定响应代码(NRCs)。
DCM SWS在DCM与其他BSW模块和SW-C之间的接口中使用这些NRC。 这些NRC在数据类型Dcm_NegativeResponseCodeType中定义。
[SWS_Dcm_01075]传输的NRC的顺序应符合ISO14229-1 [15]中所述的顺序。

非易失性信息:

Dcm的几个功能要求对非易失性信息进行初始化。
AUTOSAR没有描述在Dcm初始化时如何访问此信息或该信息是否可用。 因此,对非易失性信息的访问是特定于实现的,并且必须在集成期间确保。

[SWS_Dcm_00870] Dcm必须检查NvM是否被正确读出。如果非挥发性信息无法读出正确的DCM将启动默认的反应。 本章描述了默认的反应,并描述了非易失性数据的用法。
[SWS_Dcm_01048] 如果Dcm取消具有NvM访问权限的服务,则它将调用NvM_CancelJobs()。
通过达到RCRRP NRC的最大数量或通过协议抢占来取消该服务。

 

数据类型

[SWS_Dcm_00968] Dcm应支持以下数据类型:

  • boolean
  • uint8
  • uint16
  • uint32
  • sint8
  • sint16
  • sint32
  • uint8[n]

  uint8 [n]类型映射到固定或可变数据长度。
[SWS_Dcm_00969] Dcm应该像匹配大小的整数数据类型一样对待非整数数据类型(例如uint8 [n]),或者在DcmDspDataEndianness配置为OPAQUE的情况下不解释其内容。
[SWS_Dcm_00970] Dcm模块应将不透明数据解释为uint8 [n],并应始终将其映射到n字节大小的信号。

对于不透明的数据字节序,必须将DcmDspDataEndianness配置为OPAQUE。

[SWS_Dcm_00971] Dcm必须将在[21](第2.4章)中定义的字节序转换扩展到有符号数据类型。在[21](第2.4章)中,字节序转换是为无符号数据类型定义的。 可以在配置10.2.29 DcmDspData中找到相关的配置。

  • 原子类型概述

  •  数据数组类型概述

数据类型约束

[constr_6002]定义DcmDspDataSize参数的用法, DcmDspDataSize是数组和位类型所必需的。
注意:基本数据类型不需要DcmDspDataSize [constr_6003] 8位数组的大小参数限制如果值大于8并且DcmDspDataType为UINT8_N,SINT8_N或UINT8_DYN,则⌈DcmDspDataSize应为8的倍数。
[constr_6035]如果值大于16并且DcmDspDataType为UINT16_N或SINT16_N,则16位数组⌈DcmDspDataSizes的大小参数限制应为16的倍数。
[constr_6036]如果值大于32并且DcmDspDataType为UINT32_N或SINT32_N,则32位数组DcmDspDataSizes的大小参数限制应为32的倍数。

[constr_6004]如果DcmDspDataUsePort是类型,则UINT8将用作(实现)数据类型,其位长度在1到8之间。USE_DATA_SENDER_RECEIVER或USE_ECU_SIGNAL并且DcmDspDataSize大于1且小于8,DcmDspDataType应使用UINT8。
[constr_6005] UINT16将用作(实现)数据类型,用于8至16位之间的位长度。⌈如果DcmDspDataUsePort的类型为USE_DATA_SENDER_RECEIVER或USE_ECU_SIGNAL类型,并且DcmDspDataSize大于8且小于16,则DcmDspDataType应使用UINT16。
[constr_6006]如果DcmDspDataUsePort等于USE_BLOCK_ID ||,则按位访问的限制⌈DcmDspDataSize应为8的倍数。
  USE_DATA_SYNCH_CLIENT_SERVER ||
  USE_DATA_ASYNCH_CLIENT_SERVER ||
  USE_DATA_ASYNCH_CLIENT_SERVER_ERROR ||
  USE_DATA_ASYNCH_FNC_ERROR || USE_DATA_SYNCH_FNC ||
  USE_DATA_ASYNCH_FNC。
[constr_6033]可变长度的常规参数始终为8的倍数。如果DcmDspRoutineSignalType等于VARIABLE_LENGTH,则DcmDspRoutineSignalLength值应为8的倍数。
[constr_6007]对按位放置的限制DcmDspDidDataPos参数应始终寻址字节边界,但DcmDspDataType设置为BOOLEAN,UINT8或UINT16且DcmDspDataSize小于或等于16除外。
[constr_6008]仅在DcmDspRoutineSignalType设置为VARIABLE_LENGTH时,才需要定义DcmDspRoutineSignalLength参数的用法DcmDspRoutineSignalLength。
[constr_6009] DcmDspRoutineSignalPos参数的按位放置限制应始终寻址字节边界,但DcmDspRoutineSignalType设置为BOOLEAN或UINT8除外。
[constr_6010]如果DcmDspRoutineSignalType设置为UINT8,则按位访问DcmDspRoutineSignalLength的限制不得超过8的值。

[constr_6011]只有RID中的最后一个参数可以具有可变长度具有VARIABLE_LENGTH的⌈DcmDspRoutineSignalType仅对最后一个信号有效。
[constr_6012]定义DcmDspPidDataSize参数的用法arrayDcmDspPidDataSize是array-和bittype所必需的。注意:基本数据类型不需要DcmDspPidDataSize
[constr_6013]   8位数组的大小参数限制如果该值大于8并且DcmDspPidDataType为UINT8_N,SINT8_N或UINT8_DYN,则DcmDspPidDataSize应为8的倍数。
[constr_6040] 16位数组的大小参数限制如果值大于16并且DcmDspPIDDataType为UINT16_N或SINT16_N,则DcmDspPIDDataSize应为16的倍数。
[constr_6041] 32位数组的大小参数限制如果值大于32并且DcmDspPIDDataType为UINT32_N或SINT32_N,则DcmDspPIDDataSize应为32的倍数。
[constr_6014]如果DcmDspPidDataUsePort是类型,则UINT8将用作(实现)数据类型,其位长度在1到8之间USE_DATA_SENDER_RECEIVER和DcmDspPidDataSize大于1且小于8,DcmDspPidDataType应使用UINT8。
[constr_6015]如果DcmDspPidDataUsePort是类型,则UINT16将用作(实现)数据类型,用于8到16之间的比特长度USE_DATA_SENDER_RECEIVER并且DcmDspPidDataSize大于9且小于16,DcmDspPidDataType应使用UINT16。
[constr_6016]对按位访问的限制DcmDspPidDataSize为8的倍数,而DcmDspPidDataUsePort为USE_DATA_SYNCH_CLIENT_SERVER,使用USE_DATA_SYNCH_FNC。

[constr_6017]对按位放置的限制DcmDspPidDataPos参数应始终寻址字节边界,但DcmDspPidDataType设置为BOOLEAN,UINT8或UINT16且DcmDspPidDataSize小于或等于16除外。
[constr_6042] UINT8将用作客户端-服务器接口的(实现)数据类型。如果DcmDspPIDDataUsePort参数设置为{USE_DATA_SYNCH_CLIENT_SERVER},则DcmDspPIDDataType必须使用UINT8_N或UINT8_DYN。
[constr_6043]数据类型使用的限制:DcmDspPIDDataUsePort等于USE_DATA_SYNCH_FNC时,DcmDspPIDDataType必须为UINT8_N或UINT8_DYN。
[constr_6024]如果DcmDspDataUsePort参数设置为,则应将UINT8用作客户端-服务器接口的(实现)数据类型。{USE_DATA_SYNCH_CLIENT_SERVER,USE_DATA_ASYNCH_CLIENT_SERVER,USE_DATA_ASYNCH_CLIENT_SERVER_ERROR},DcmDspDataType必须使用UINT8_N或UINT8_DYN。
[constr_6037]数据类型使用的限制⌈如果DcmDspDataUsePort等于USE_DATA_ASYNCH_FNC_ERROR,则DcmDspDataType必须为UINT8_N或UINT8_DYN。 USE_DATA_SYNCH_FNC || USE_DATA_ASYNCH_FNC。
[constr_6038]在DcmDspDataUsePort等于USE_BLOCK_ID的情况下,数据类型使用DcmDspDataType的限制应为UINT8_N。
[constr_6026]在S / R通信,NvRam访问或ECU信号访问的情况下使用可变数据长度,如果DcmDspDataUsePort设置为{USE_DATA_SENDER_RECEIVER,USE_BLOCK_ID,USE_ECU_SIGNAL},则不允许使用可变数据长度。
注意:只有将DcmDspDataType设置为UINT8_DYN的UINT8阵列才可以使用可变数据长度。

原文地址:https://www.cnblogs.com/still-smile/p/12144583.html