Autosar Dcm模块之Vector Configurator Pro配置(DSP子模块)

背景

 

之前简单介绍了Autosar Dcm模块,接下来我们直接切入主题,如何通过Vector Configurator Pro工具配置DSD子模块,并实现客户的需求。


DSP子模块配置

1.DSP子模块整体配置

Dsp配置可以说是Dcm的核心,大部分的需求开发都是在这个子模块中进行。

DcmDspDidLookUpFilterEnabled:是否支持外部DID查找过滤。若支持,Dcm可以调用应用函数。

DcmDspDDDidCheckConditionReadPerSourceDid:Dcm在接收到0xF200-0xF3FF范围内的0x22和0x2A服务时会调用“CheckConditionRead”接口。

DcmDspDDDidCheckPerSourceDid:Dcm在接收到0xF200-0xF3FF范围内的0x22和0x2A服务时会执行DIDs和内存块检查等预条件检查。

DcmDspDDDidClearOnStateChange:Dcm在改变会话/安全权限改变时清除DID状态,条件不满足时不允许访问。

DcmDspMaxDidToRead: 在单个22服务中允许读取的最大DID数量。若读取的DID数量大于该值,发送否定响应。

DcmDspMaxPeriodicDidToRead: 在单个2A服务中允许读取的最大DID数量。若读取的DID数量大于该值,发送否定响应。

DcmDspPowerDownTime:指定在下点过程中待机的最短时间。若该值存在,在11 04服务肯定响应时回复该值;反之,在11 04服务肯定响应时回复0xFF。

DcmDspReadDIDReportsNODIByte:在读取OBD DID(0xF801-0xF8FF)时报告OBD VID的NODI字节。若该值存在,Dcm将完全镜像 OBD2 VID数据;反之,Dcm将省略NODI字节

DcmDspReadPagedDataPageSize:读操作时每页Buffer的大小

DcmDspRidLookUpFilterEnabled:是否支持外部RID查找过滤。若支持,Dcm可以调用应用函数

DcmDspRteImplicitComEnabled:建立一个专门的Buffer,用来拷贝RTE的数据。

2. DcmDspDataInfos

这个容器包含一个Data的配置

DcmDspDataFixedLength:如果设置为TRUE,Dcm 将直接从配置中使用数据长度参数值。一般都会勾上。

DcmDspDataScalingInfoSize:数据伸缩信息的长度。Dcm接收到0x24请求时输出该值。

3. DcmDspDatas

这个容器包含属于DID的Data的配置。

DcmDspDataBlockIdRef:DCM直接访问Nvm block。

DcmDspDataConditionCheckReadFnc:Did读取检测条件的函数名。若不为空,DCM接收到Did的读取会调用该函数;反之则不检测。

DcmDspDataConditionCheckReadFncUsed:决定是否使用条件检测

DcmDspDataEcuSignal:指定 Dcm 对某个 ECU 信号的控制访问的函数名称

DcmDspDataEndianness:定义DID的字节序

DcmDspDataFreezeCurrentStateFnc:指定Dcm冻结当前IO状态的函数名。一般用于0x2F服务(IOControlByDataIdentifier)。

DcmDspDataGetScalingInfoFnc:指定Dcm读取缩放信息的函数名。一般用于0x24服务(ReadScalingDataByIdentifier)。

DcmDspDataInfoRef:对DcmDspDataInfo的引用

DcmDspDataReadDataLengthFnc:指定Dcm读取DID数据的长度的函数名

DcmDspDataReadEcuSignal:指定Dcm读取某个ECU 信号的函数名

DcmDspDataReadFnc:指定Dcm读取数据内容的函数名

DcmDspDataResetToDefaultFnc:指定Dcm复位当前IO默认状态的函数名

DcmDspDataReturnControlToEcuFnc:指定Dcm返回IO状态给APP的函数名

DcmDspDataShortTermAdjustmentFnc:指定Dcm调整IO状态的函数名

DcmDspDataSize:DID数据的长度。若数据长度可变,该参数就是最大的数据长度

DcmDspDataSystemTemplateDiagnosticDataElementRef:定义被DcmDspData引用的诊断数据

DcmDspDataType:指定数据类型

DcmDspDataUsePort:访问数据的接口类型。

'USE_DATA_ASYNCH_CLIENT_SERVER' or 'USE_DATA_SYNCH_CLIENT_SERVER':Dcm调用RTE接口;

'USE_DATA_SYNCH_FNC' or 'USE_DATA_ASYNCH_FNC':Dcm会调用专用的接口(自己实现的接口)

DcmDspDataWriteFnc:指定Dcm写数据内容的函数名

4.DcmDspDidInfos

这个容器包含DID的Info的配置,是配置DID的会话、解锁等级。

DcmDspDidReadModeRuleRef:配置DID读取模式规则。

DcmDspDidReadSecurityLevelRef: 配置DID读写的安全解锁等级。一个服务允许多个引用。

DcmDspDidReadSeesionLevelRef: 配置DID读写的会话等级。一个服务允许多个引用。

5.DcmDspDids

这个容器包含DID的配置

DcmDspDidIdentifier:配置DID的ID号。

DcmDspDidInfoRef:指定DID的配置信息

DcmDspDidRef:

DcmDspDidRoeQueueEnabled:

DcmDspDidSystemTemplateDiagnosticDataIdentifierRef:

DcmDspDidUsePort:DID 的信号组合成一个 struct 数据类型。

USE_DATA_ELEMENT_SPECIFIC_INTERFACES:根据DspData配置,创建单独的Port。

USE_ATOMIC_SENDER_RECEIVER_INTERFACE:

USE_ATOMIC_NV_DATA_INTERFACE:

DcmDspDidUsed: 配置是否激活DID的使用,项目开发阶段可以使用,不用重复添加删除DID。

以上在配置Diagnostic->Diagnostic Data Identifiers时都会自动对应生成,所以在配置一个DID的时候关注最外层的配置界面即可。

6.DcmDspRoutineInfos

这个容器包含RID的Info的配置,与DID配置不同,配置RID例程没有最外层的配置界面,只能在Basic Editor中进行配置。

DcmDspRoutineAuthorization:例程权限设置,设置规则、安全访问等级、会话权限。

DcmDspStartRoutineIn:启动例程的参数输入容器

DcmDspStartRoutineOut:启动例程的参数输出容器

DcmDspRoutineStopIn:结束例程的参数输入容器

DcmDspRoutineStopOut:结束例程的参数输出容器

DcmDspRoutineRequestRspIn:请求例程结果的参数输入容器

DcmDspRoutineRequestRspOut:请求例程结果的参数输出容器

DcmDspRoutineSignalEndianness:例程信号的字节序

DcmDspRoutineSignalLength:例程信号数据的长度(bit)

DcmDspRoutineSignalPos:例程信号数据的位置(偏移量)(bit)

DcmDspRoutineSignalType:例程信号数据的类型

7.DcmDspRoutines

这个容器包含RID的配置

DcmDspRequestResultsRoutineFnc:指定例程请求结果的函数名。若不为空,Dcm会调用该接口,反之Dcm会调用RTE接口。

DcmDspRequestResultsRoutineSupported:该例程是否支持STOP操作。若设置false,Dcm接收例程请求结果(3103)操作时会返回NRC12。

DcmDspRoutineFixedLength:例程是否固定长度

DcmDspRoutineIdentifier:例程ID

DcmDspRoutineInfoByte:

DcmDspRoutineInfoRef:指定的例程信息

DcmDspRoutineSystemTemplateDiagnosticRoutineRef:

DcmDspRoutineUsePort:Dcm使用“RoutineServices_<ROUTINENAME>”函数端口

DcmDspRoutineUsed:是否使用该例程。若禁用,例程将不使用Dcm生成的代码

DcmDspStartRoutineFnc:启动例程时调用的函数名。若不为空,Dcm在启动例程时会调用该函数

DcmDspStopRoutineFnc:结束例程时调用的函数名。若不为空,Dcm在结束例程时会调用该函数

DcmDspStopRoutineSupported:该例程是否支持STOP操作。若设置false,Dcm接收stop操作(3102)时会返回NRC12。

8.ComControl

这个容器包含通信控制的配置

DcmDspAllComMChannelRef:配置引用CAN通道,根据需求,可配置多个通道。

(1)接下来我们介绍下DCM如何通知BSWM模块的通信控制的。

Autosar代码中有这12中通道配置。控制应用报文、网络管理,以及RX和TX。

Bswm模块制定相应的规则来控制CAN的收发功能。

举例:

上图中CANA应用报文的TX规则:接收到“DCM_DISABLE_RX_TX_NORMAL”和“DCM_DISABLE_RX_TX_NORM_NM”就关闭CANA应用报文的TX功能,反之开启CANA应用报文的TX功能。

9. DcmDspControlDTCSetting

这个容器包含DTC开关控制的配置

DcmDspControlDTCSettingReEnableModeRuleRef:控制重启DTC设置的规则。如果设置,Dcm会在DisableDTCSetting请求开始的时候监控,如果不满足规则,Dcm会自动启动DTC。

DcmSupportDTCSettingControlOptionRecord:指定是否支持DTC group参数。若设置false,Dcm接收带有DTC group参数的请求时直接拒绝;反之,Dcm接收85服务时可带DTC group参数。

例如IFC项目中默认配置下也可以支持85 01/02, 但是IDC项目中就必须加上DTC Group,所以IDC就需要将配置勾选取消。

10.DcmDspSecurity

这个容器包含安全访问的配置

DcmDspSecurityBypassEnabled:安全访问是否支持Bypass模式。

DcmDspSecurityResetAttemptCounterOnTimeout:延时计时器到期时Dcm是否复位安全尝试计数器。

DcmDspSecuritySingleInstanceAttemptMonitor:安全访问是否使用同一个尝试计数器。若位置true,所有的DcmDspSecurityRows共用一个安全尝试计数器;反之,每个DcmDspSecurityRows都单独使用一个安全尝试计数器。

DcmDspSecuritySingleInstanceDelayTimer:安全访问是否使用同一个计时器。同上。

DcmDspSecurityADRSize

DcmDspSecurityAttemptCounterEnabled:安全尝试计数是否支持外部存储。若设置true,Dcm调用读写尝试计数器的API接口;反之,Dcm在初始化的时候清空这个安全访问等级的尝试计数器

DcmDspSecurityCompareKeyFnc:秘钥比较函数。当DcmDspSecurityUsePort设置为USE_ASYNCH_FNC时,Dcm会调用该函数。

DcmDspSecurityDelayTime:安全访问延迟时间。在延迟期间,Dcm不会接收任何安全访问请求。Dcm只有在失败尝试次数达到设置次数之后才会配置该时间。

DcmDspSecurityDelayTimeOnBoot:Dcm在上电周期内的延迟时间。在延迟期间,Dcm不会接收任何安全访问请求。若设置非0,Dcm从初始化后的这段时间会拒绝任何安全访问请求。

DcmDspSecurityDelayTimeOnFailedGetAttemptCounter:设置获取尝试次数失败后的延迟时间。

若不设置,Dcm获取失败后直接将计数清0,接收安全访问请求;

若设置为0,Dcm会一直等待获取尝试次数的结果,在此期间拒绝任何安全访问请求;

若设置不为0,Dcm会在这段时间内等待获取尝试次数的结果,在此期间拒绝任何安全访问请求,若超时,回复NRC响应(商榷)。

DcmDspSecurityGetAttemptCounterFnc:获取尝试次数的函数名。Dcm初始化时重载尝试计数器。

DcmDspSecurityGetSeedFnc:获取种子函数。当DcmDspSecurityUsePort设置为USE_ASYNCH_FNC时,Dcm会调用该函数。

DcmDspSecurityKeySize:安全访问密钥长度。

DcmDspSecurityLevel:安全访问等级。

DcmDspSecurityNumAttDelay:安全访问尝试次数。若设置大于0,尝试失败的次数超过该值时返回NRC36;若设置等于0,不限失败尝试次数。

DcmDspSecuritySeedSize:安全访问种子长度。

DcmDspSecuritySetAttemptCounterFnc:修改安全访问尝试次数的函数。

DcmDspSecurityUsePort:安全访问类型。USE_ASYNCH_CLIENT_SERVER:Dcm使用P-port接口(SecurityAccess_{SecurityLevel}函数)访问;USE_ASYNCH_FNC:Dcm直接调用DcmDspSecurityGetSeedFnc和DcmDspSecurityCompareKeyFnc自定义函数访问。

对于每个安全级别,服务 0x27 应始终有一对对应的子服务:

- 一个用于“获取种子”操作,具有奇数的子服务标识符值(例如 0x01);

- 一个用于“发送密钥”操作,其偶数子服务标识符值等于“获取种子”+1(例如 0x02);

参数值应始终与服务 0x27 配置容器的DcmDsdSubServices 中“get seed/send-key”对的Subfunction Id匹配:SecurityLevel = (<sub-function id> + 1) / 2

比如内部安全解锁等级为27 61,那Subfunction Id为0x61(Hex), DcmDspSecurityLevel为49(Dec)。

11.DcmDspSession

这个容器包含会话控制的配置

DcmDspSessionForBoot:定义切换会话是否跳转到Boot。DCM_NO_BOOT:不跳转Boot;

DCM_SYS_BOOT:xxx; DCM_SYS_BOOT:xxx (有何区别)。

DcmDspSessionLevel:指定相应诊断会话的值

DcmDspSessionP2ServerMax:指定诊断会话的 P2 时间(以秒为单位)。

DcmDspSessionP2StarServerMax指定诊断会话的 P2* 时间(以秒为单位)。

总结

以上是DSP子模块通用容器配置,我们仅仅用到其中一部分配置,很多配置还需具体实践。

  • 10
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值