前言
AUTOSAR Dcm模块的分享分为Dcm模块概念详解和Dcm模块配置及代码分析,具体的项目实战请关注本号的后续文章,本篇为Dcm实例应用分析篇。
正文
7.1 DCM诊断处理流程示例
为了获得安全访问,DSD子模块必须调用DSP子模块来从应用程序获得种子值。如果没有检测到错误,则以积极响应的方式发送种子值。
在第二步中,DSP子模块得到测试器计算的密钥,并请求应用程序将该密钥与内部计算的密钥进行比较。如果没有发生错误,则在DSL子模块中设置新的访问类型,并发送一个正响应。
从上诉过程可以看出,我们在实际开发过程中需要做的是根据实际需求配置DCM模块(DSL, DSD, DSP),同时还需要设计一个Dcm_User模块来真正处理(processor)诊断请求。
下面我们就以最常用的诊断服务—读取软件版本号为例来说过整个开发流程。
7.2 开发案例分析
7.2.1 需求
服务:0x22
DID:0xF189读取ECU软件版本号
数据长度:17个字节
DID服务只有读的功能
也就是上位机机发送:22 F1 89(省略诊断ID和长度信息)
ECU需要回:52 F1 89 +17字节的软件版本号(14字节的零件号 + 3字节的软件版本号)
7.2.2 模块接口设计
Dcm模块:AUTOSAR静态模块,需要配置支持0x22服务下的0xF189服务
Dcm_User模块:所有Dcm服务的一个中转模块,Dcm模块通过Dcm_User模块提供的服务来完成诊断响应,Dcm_User模块和其他各个应用模块连接,使用各个APP模块提供的服务。
Vers模块:提供读取软件版本号的服务,Vers里面需要实现真正的软件版本记录。
Interfaces和R/P-Port设计:如下图所示。
7.2.3配置DCM模块
配置0x22服务
配置0xF189服务的数据信息
配置DidInfo,配置完之后,有这种读写属性的DID都可以引用这个DidInfo
配F189这个DID的信息
7.2.4配置Interface
配置Dcm和Dcm_User之间数据访问的Interface
配置Dcm_User和Ver模块之间的Interface
7.2.5配置Dcm模块的Port信息
Dcm模块相对Dcm_User模块是Client端,需要使用Dcm_User提供的服务(Server端),所以需要给Dcm配置数据访问的R-Port。
7.2.6配置Dcm_User模块的Port信息
Dcm_User模块相对Dcm模块是Server端,需要提供服务(Server端),所以需要给Dcm_User配置数据访问的P-Port。
Dcm_User模块相对Vers模块是Client端,需要使用Ver模块提供服务(Server端),所以需要给Dcm_User配置数据访问的R-Port。
7.2.7配置Vers模块的Port信息
Vers模块相对Dcm_User模块是Server端,需要提供服务(Server端),所以需要给Dcm_User配置数据访问的P-Port。
7.2.8生成的代码分析
7.2.9 小结
实际应用中,对DCM模块内部的机制不会太关注,一般是根据实际需求配置DCM模块,然后设计DCM_User等实现模块。而DCM_User等实现模块的设计包括端口Port设计,端口接口Interface的设计,已经具体功能的算法逻辑实现。
推荐阅读
Autosar架构下的模块详细设计及代码实现–基于配置的编程方法
CANoe工具使用(1)-实现CAN通道的收、发、录、回放报文
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号
原文始发于微信公众号(汽车电子嵌入式):AUTOSAR 通信服务-Dcm实例应用