news 2026/9/25 2:36:25

一条报文在CanIf模块中都经历了什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一条报文在CanIf模块中都经历了什么

写在前面:
入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!!


CanIf模块是 AUTOSAR 基础软件(BSW)的一部分,位于 CAN 驱动程序(CanDrv)、CAN 收发器(CanTrcv)和上层通信服务层(如 CanSm、CanNm、CanTp、PduR)之间。它提供了一个标准化的接口,用于管理不同类型的 CAN 硬件设备,如 CAN 控制器和 CAN 收发器,并确保硬件独立性。

1.一条Rx报文都在CanIf模块中经历了什么?

回答这个问题前,先来看几个参数表。对于一条报文,它存在若干属性,比如ID,比如CANFD/CAN报文类型,比如Full/BasicCAN。当我在接收一条报文时,我需要去验证这条报文是不是我要接收的,它的属性是不是和我期望是一致的。那么我就需要几个参数表,表中会存储报文信息。

1.1CanIf_MailBoxConfig

从上到下依次表示为:

  • 该报文属于哪个通道
  • First PduId
  • Last PduId
  • Tx报文配置参数
  • Buffer配置参数
  • Buffer Id
  • MailBox类型,即FullCAN or Basic CAN
1.2CanIf_RxPduConfig

从上到下依次表示为:

  • PduID
  • MASK
  • 下游模块Pdu名称
  • 是否为NM报文
  • 下游回调函数
  • Dlc
  • Message Type:CAN or CANFD
1.3Rx报文进入CANIF模块

当控制器收到一条Rx报文,且CAN层会调用CanIf_RxIndication将PDU传入CANIF模块

会传入接收这条报文的Mailbox等。

1.4Rx报文属性校验

在CanIf_RxIndication中,首先会基于CanId来判断MsgType是否为CANFD报文

Remove FD-flag from CAN identifier

通过MailBox索引号找到CanIf_MailBoxConfig中记录的PDUID,比较报文属性与本地属性表中记录的信息是否一致,若不一致则丢掉该报文。

这里对于FullCAN和BasicCAN会调用不同的函数来判断,主要原因是BasicCAN的MaiBox能够接收一定范围ID的报文,对于RxID,需要进行计算来判断是否能够接收。

1.5报文传递给下游模块

上述属性校验通过后,调用CanIf_HlIndication向下传递,在这里还有校验DLC长度。最终将pduinfo传递给下游的回调函数,有可能是PduR_CanIfRxIndication,也有可能是CanTp_RxIndication,或者CanNm_RxIndication。需要调用哪个,查找表CanIf_RxPduConfig。

2.一条Tx报文都在CanIf模块中经历了什么?

如果CANNM模块或者PDUR模块想发送一条CAN报文,首先会调用CanIf_Transmit函数将PduInfo传入CANIF模块中,基于传入的PduId,查找CanIf_TxPduConfig,获取报文属性。包括通道,MailBoxConfigIdx,TxPduLength等。

和Rx报文类型,会依次检查报文长度是否正确,该通道是否正常工作等。

之后将报文加入到对应队列等待发送。发送成功后查找表格CanIf_TxConfirmationFctList判断应该调用哪个函数上报发送成功的消息。常用的有:CanNm_TxConfirmation,CanTSyn_TxConfirmation,PduR_CanIfTxConfirmation等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 2:36:04

招聘系统权限管理实战:RBAC模型与Spring Security JWT落地

企业招聘系统的权限管理,看着是个老生常谈的话题,但真到自己从零搭建一套,才发现坑远比想象的多。尤其招聘系统这种角色多、数据敏感的业务——HR、部门主管、面试官、求职者、管理员,每个角色能看什么、能改什么、能审批什么&…

作者头像 李华
网站建设 2026/9/25 2:36:03

微信小程序汉字笔顺动画组件:Canvas渲染与避坑指南

简介:这是一份面向微信小程序开发者的 Hanzi Writer 组件源码包,用于在小程序内快速集成汉字书写器,实现笔画顺序动画、写法演示与问答交互等教学功能。组件原仓库虽已停止维护,但作者提供了 npm 的 beta 安装方式,适合…

作者头像 李华
网站建设 2026/9/25 2:32:21

Docker Swarm Mode 深度解析:企业级容器编排实战

Docker Swarm Mode 深度解析:企业级容器编排实战 本文深入解析Docker Swarm Mode的企业级容器编排能力,涵盖其分布式架构设计、服务发现与负载均衡机制、多节点集群部署管理实践,以及滚动更新与故障恢复策略。通过详细的架构分析和实战配置示…

作者头像 李华