
聊一聊UDS
今天有个朋友问了我0x28 怎么操控多路CAN。也没解释好,就看了看,写了一下,记录一下
DCM 0x28
sub_function 对应的communication type
这里说一下具体的过程。
其实0x28 服务,就是 :动作 + 对象
动作:
- 打开通讯
- 关闭通讯
对象:
- 普通报文
- 网络报文
抽象成枚举 就是下面列出来的。
DCM 如何把用户的输入收进来
dcm本身和硬件通讯没有关系,这里为了方便,就以CAN 为例子来说明。
autosar的通讯和传统互联网类似,也是分层结构。这里DCM 属于我们的最上乘 presentation layer. 和com 是一样的。
从更直观点的链路如下,硬件接受用户通过 设备,或者是 上游控制器发送的 报文。
通过Autosar 协议栈 一路抽象,提取,到DCM 模块。
废话不多说,dcm收到了数据,然后呢?
DCM 怎么处理的呢
我们直接从配置代码入手。
所以在检查,调试的时候,在实现 开关对应的报文时候,只需要关注最下面这个Api. 即:
当然前提条件要满足也就是。
我们知道在控制软件相关的模式,其实是BswM 来统一管理的。
先说一下对应的函数,后面看一下怎么和配置相互对应。
在这里面要对哪些channel 进行操作呢?
其实这里面配置了记录channel。就会处理几路, 所以当系统有很多路CAN 的时候,这里和处理。
通过下面这个for 和 宏 逐一传递给BswM
在这下面BswM 就需要介入了。
也就是函数
那么这个函数是搞什么的呢?先有个处理的了解。
回归配置。
前面DCM 收到了 user 的命令。这个命令可以传入BswM。 也就是说 BswM 会经过一系列的处理来到达我们熟知的 action.
上面配置了两个channel在dcm 里面。对应的可能就是bswm的输入port. 也就是
在这里后面,就是对单一channel 进行处理了。for 循环处理 所有dcm输入的channel.
这个port 对应的是?
就是看dcm传入的参数是什么了。对应的bswm是
也就是说 dcm 的port 传入了 形参 来找bswm 配置的action list 以及 action
举个例子dcm 传入的是enable tx 那么 到了 bswm 的action 就是
很清晰,这里连接的是com 的 pdu group. 很熟悉是吧。在com 里面可以配置group。所以从这里可以区分 nm 报文 还是 普通报文。
好捋顺了,我们回头看一下上面的UML 图。从代码的角度再看一下。
BswM_Prv_RuleEval 干什么了呢?
这里终于到了action.
一目了然,通过下面函数来控制pdu group
逻辑如下
至此 BswM 的处理结束。
总结
上位机 发送0x28 来干活,下班!
文章转载自公众号:汽车与基础软件
