0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AUTOSAR通信之CanIf模块简介1

jf_78858299 来源:汽车控制与人工智能 作者:Demu 2023-02-13 14:29 次阅读

1 位置和作用

如图1所示,CAN接口模块(下文简“CanIf”)位于底层CAN驱动(CanDrv)、CAN收发器(CanTrcv)和上层通信服务层(CanSm、CanNm)、CAN传输协议(CanTp)、PDU路由器(PduR)之间。它表示上层通信层的CAN驱动程序服务接口。

图片

图1 CanIf的位置

CanIf提供了独特的接口来管理不同CAN硬件,如CAN控制器和CAN收发器。同时,基于物理CAN通道相关的CAN状态管理器模块(CanSm)可以控制多个底层内部和外部的CAN控制器或CAN收发器。

CanIf由与CAN硬件无关的任务组成,属于ECU CAN通信驱动程序。CanIf满足PduR和AUTOSAR COM栈上层通信模块的控制流和数据流要求:发送请求处理、发送确认、接收指示、错误通知和CAN控制器的启动/停止,从而唤醒或参与网络。它的数据处理和通知API基于CAN L-SDU,用于控制和模式处理的API提供了CAN控制器相关的视图。

图片

图2 CanIf模块和其他模块的关系

在发送请求时,CanIf用相应的参数完成L-PDU的传输,并通过对应CanDrv将CAN L-PDU转发给CAN控制器。在接收端,CanIf将接收到的I-PDU作为I-SDU分发到上层模块。接收L-SDU和上层之间的分配是静态配置的。在传输确认时,CanIf负责向上层发送传输成功的信息

CanIf提供对CAN驱动程序的通信抽象访问和CAN收发驱动程序服务,用于对CAN网络的控制和监视。CAN接口将CAN状态管理器的状态向下转发到底层CAN驱动程序,向上CAN接口模块将CAN驱动程序或 CAN收发器驱动程序传递到相应的NM模块。

2 上下层关系

上层

AUTOSAR BSW分层架构中,CanIf的上层可以是PduR,可以是CanNm,可以CanTp,可以CanSm,EcuM或复杂的驱动模块CDD,普遍标定协议模块XCP,全局时间同步模块CanTSyn ,J1939传输层模块 J1939Tp和J1939网络管理模块 J1939Nm。

CanIf使用的API由通知服务组成,它们将CAN相关数据传输到目标上层。这些服务的调用参数指向CanDrv中的缓冲信息,或者直接指向CAN硬件。另外,CanIf支持对总线镜像模块的调出,来报告接收和传输帧的内容。EcuM会初始化CanIf。

下层

CanIf的下层模块主要是CAN驱动程序CanDrv。由于CanIf在AUTOSAR BSW架构中的地位,它与CanDrv有着密切的关系。CanDrv只提供对CAN控制器的硬件抽象访问,但是CanDrv会检测和处理CAN控制器的事件,并将这些事件通知到CanIf。CanIf将CanSm的操作模式请求传递给相应的底层CAN控制器。

图片

CanDrv提供了标准化的L-PDU,以确保CanIf的硬件独立性。指向这个规范化的L-PDU的指针要么指向一个临时缓冲区,要么指向依赖于CAN硬件的CanDrv。CanDrv调用的回调服务是在CanIf中声明和实现的。由CanIf调用的回调服务被声明并放置在对应的上层通信服务层中,如PduR、CanNm、CanTp。

配置的CAN控制器的数量不一定是使用的CAN收发器的数量。如果多个不同类型的CAN控制器在同一个CAN网络上运行,一个CAN收发器是足够的,但是根据CAN控制器设备的类型,需要一个或两个不同的CanDrv。

第二个可用的底层CAN设备驱动程序是CAN收发器CanTrcv。

每个CanTrcv对CAN收发器进行操作模式的控制。CanIf只是将几个底层CanTrcv的API映射到一个惟一的API,因此,CanSm能够触发相应CAN收发模式的转换。CanIf中不执行属于CanTrcv所控制的功能。

CanIf将所有底层CanTrcv的下列服务映射到一个惟一的接口:

  • 唯一的CanTrcv模式请求和读取服务来管理每个底层CAN收发设备的操作模式;
  • 为CAN收发器读取服务,唤醒原因支持;
  • 模式请求服务启用、禁用、清除唤醒事件状态使用的每个CAN收发器(CanIf_SetTrcvMode)。

3 配置

CanIf的设计经过优化,以管理CAN协议的特定功能和用于底层CAN控制器的处理。

CanIf不需要重构就可以更改CAN配置。函数CanIf_Init()从配置容器和参数中获取所需的CAN配置信息。

图片

可以获取到的信息包括:

  • CAN控制器的数量。CAN控制器的数量对于发送和接收I-PDU的调度以及对可用CAN驱动程序状态的控制是非常必要的,如下图CanIfCtrlDrvCfg。

图片

  • 硬件对象句柄的数目。为了监督发送请求,CAN接口需要知道HTH的数量以及每个HTH与相应的CAN控制器之间的分配,如下图CanIfHthCanCtrlIdRef和CanIfHthIdSymRef。

图片

图片

  • 通过每个硬件对象的过滤器所接收到的CAN ID的范围。CAN接口使用HRH和L-PDU之间的固定分配,在相应的硬件对象中接收,进行搜索算法,见下图CanIfHrhSoftwareFilter,CanIfHrhCanCtrlIdRef和 CanIfHrhIdSymRef。

图片

图片

图片

CanIf需要所有已使用的上层通信服务层和L-SDU的信息来分配。为了在AUTOSAR COM栈中集成CanIf,必须在配置时设置以下信息:

  • 传递上层模块,并为每个传输L-SDU传输I-PDU,用于发送确认服务的调度,参见CanIfTxPduId。

图片

  • 接收上层模块并为每个L-SDU接收I-PDU。用于接收指示期间的L-SDU调度,参见 CanIfRxPduId。

图片

ECU连接到一个或多个CAN网络,CanIf需要控制器和ECU的描述。因此,以下信息是从AUTOSAR系统配置的一部分CAN通信矩阵中获取得到,见CanIfTxPduCfg和CanIfRxPduCfg:

  • ECU物理通道上接收的所有I-PDU,用于软件过滤和接收L-SDU调度;
  • 所有I-SDU应由ECU上的每个物理通道传递,用于发送请求和发送L-PDU调度;
  • L-PDU的属性,包括ID和数据长度,用于软件滤波,接收指示服务,数据长度检查;
  • 传输L-SDU的传递模块,即PduR、CanNm和CanTp,用于发送确认服务;
  • 接收L-SDU的接收器,即PduR、CanNm和CanTp,用于L-PDU的调度;
  • L-PDU和L-SDU名称,用于表示Rx/Tx数据缓冲区的地址;
图片

图片

4 功能服务

CanIf的服务可以分为以下几个主要内容:

  • 初始化
  • 发送请求服务
  • 发送确认服务
  • 接待指示服务
  • 控制器模式控制服务
  • PDU模式控制服务

CanIf的应用模式:

  • 中断模式:

CanDrv处理由CAN控制器触发的中断。CanIf在事件发生时得到触发,在这种情况下,在CanDrv中相应的ISR中调用相关的CanIf服务。

  • 轮询模式:

由SchM触发CanDrv,并执行后续进程。在这种情况下,必须在定义的时间间隔内,调用下列函数:

  • Can_MainFunction_Write
  • Can_MainFunction_Read
  • Can_MainFunction_BusOff
  • Can_MainFunction_Wakeup
  • Can_MainFunction_Transceiver

CanIf由CanDrv通知事件接收、发送、BusOff和超时),这些事件发生在一个CAN控制器中等同于中断驱动操作。CanDrv更新属于CAN控制器中发生事件的相应信息,如接收L-PDU。

  • 混合模式:

中断和轮询驱动CanDrv。根据所使用的CAN控制器,该功能可以分为中断驱动和轮询驱动两种操作模式。比如,轮询驱动的FullCAN接收和中断驱动的基本CAN接收,轮询驱动的传输和中断驱动的接收等。

AUTOSAR提供了独特的接口,对三种类型的操作模式都有效。无论是在中断、轮询还是混合处理事件时,CanIf都以相同的方式工作,区别是调用内容不同,还有通知中断的方式:抢占式或协作式。所有服务都是按照配置执行的。

初始化

EcuM调用CanIf的函数CanIf_Init()来初始化整个CanIf。在初始化过程,将对所有全局变量和数据结构初始化,包括标示和缓冲区。EcuM分别通过调用相应的初始化服务来执行CanDrv和CanTrcv的初始化。

在初始化完成后,CAN控制器保持在启动复位后的停止模式。在这种模式下,CanIf和CanDrv既不能发送也不能接收L-PDU。

如果在运行期间需要重新初始化整个CAN模块,EcuM会调用CanSm,通过调用CAN接口模块的API服务CanIf_SetControllerMode()来启动CAN控制器所需的状态转换,具体过程后续介绍CAN状态管理时会展开。CanIf将来自CanSm的调用映射到Candrv的调用上。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 收发器
    +关注

    关注

    10

    文章

    3054

    浏览量

    104921
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2491

    浏览量

    460203
  • 路由器
    +关注

    关注

    22

    文章

    3567

    浏览量

    111605
  • PDU
    PDU
    +关注

    关注

    0

    文章

    92

    浏览量

    16830
收藏 人收藏

    评论

    相关推荐

    AUTOSAR存储模块的基础知识

    AUTOSAR存储模块的解释文章很多,本文整理存储模块基础知识。
    发表于 10-08 09:30 5320次阅读

    AUTOSAR架构下的多核通信介绍

    随着汽车ECU迅速的往域控制器方向发展,ECU要处理的任务越来越多,单核CPU的负载越来越大,多核ECU势在必行。AUTOSAR架构下OS支持多核处理,本系列文章将详细介绍AUTOSAR架构下的多核机制。本文介绍AUTOSAR
    的头像 发表于 11-13 09:24 914次阅读
    <b class='flag-5'>AUTOSAR</b>架构下的多核<b class='flag-5'>通信</b>介绍

    AUTOSAR MCAL MCU模块的相关资料分享

    作者:Stephen Du免责声明: 本文为个人学习笔记及总结,仅代表个人观点,尽可能保证内容准确性。复制/转发请注明来源/作者。欢迎添加微信交流学习。AUTOSAR MCAL MCU模块解析1
    发表于 11-03 08:18

    为什么使用AUTOSAR

    文章目录一、总概述1 为什么使用AUTOSAR?1.1 AUTOSAR出现之前的行业现状1.2 AUTOSAR出现之后可以实现如下目标2、AUTOS
    发表于 12-09 07:50

    AUTOSAR的相关资料推荐

    AUTOSAR基础篇EcuM_wto9109的博客-CSDN博客【AutoSAR】【EcuM】ECU状态管理专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。07-08
    发表于 01-27 08:25

    AUTOSAR基础软件层是由哪些部分组成的

    基础软件层主要是用于提供基础软件服务,包括标准化的系统功能以及功能接口,并且由一系列的基础服务软件组成,包括系统服务、内存服务、通信服务等。一、基础软件层模块按照类型可以分为驱动模块、接口模块
    发表于 02-17 08:00

    AUTOSAR_MCAL_CAN_IM.pdf提示找不到 config/CanIf.xdm怎么解决?

    AUTOSAR_MCAL_CAN_IM.pdf 文件中声明还需要 CanIf 插件来实现 CAN 插件。但是,当我尝试在 Tresos 上添加 CanIf 模块时,它给出了一个错误
    发表于 03-30 08:48

    “E:\NXP\AUTOSAR\S32K_AUTOSAR_OS_4_0_98_RTM_1_0_0sample\standard\sc1”编译时无法生成sample1_cfg.o怎么解决?

    你好:我用例子“E:\NXP\AUTOSAR\S32K_AUTOSAR_OS_4_0_98_RTM_1_0_0sample\standard\sc1”编译时,总是出现无法生成
    发表于 04-06 07:42

    AUTOSAR通信CanIf模块简介2

    CAN接口模块(下文简“CanIf”)位于底层CAN驱动(CanDrv)、CAN收发器(CanTrcv)和上层通信服务层(CanSm、CanNm)、CAN传输协议(CanTp)、PDU路由器(PduR)之间。它表示上层
    的头像 发表于 02-13 14:29 1743次阅读
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>通信</b>之<b class='flag-5'>CanIf</b><b class='flag-5'>模块</b><b class='flag-5'>简介</b>2

    AUTOSAR通信CanIf模块简介3

    CAN接口模块(下文简“CanIf”)位于底层CAN驱动(CanDrv)、CAN收发器(CanTrcv)和上层通信服务层(CanSm、CanNm)、CAN传输协议(CanTp)、PDU路由器(PduR)之间。它表示上层
    的头像 发表于 02-13 14:29 2412次阅读
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>通信</b>之<b class='flag-5'>CanIf</b><b class='flag-5'>模块</b><b class='flag-5'>简介</b>3

    AUTOSAR是什么?AUTOSAR软件架构简介

    AUTOSAR的全称是AUTomotive Open System Architecture,直译为汽车开放系统架构
    的头像 发表于 07-08 17:26 1w次阅读
    <b class='flag-5'>AUTOSAR</b>是什么?<b class='flag-5'>AUTOSAR</b>软件架构<b class='flag-5'>简介</b>

    AUTOSAR通信协议栈配置详解

    通讯协议栈几乎是CP AUTOSAR中最庞杂的一块。由于其涉及的模块比较多(仅实现CAN信号的收发就需要ECUC/CAN/CANIF/CANTP/PDUR/COM/XCP这么多模块的协
    的头像 发表于 09-21 10:02 2662次阅读
    <b class='flag-5'>AUTOSAR</b>中<b class='flag-5'>通信</b>协议栈配置详解

    AUTOSAR SecOC:保障汽车通信的安全

    在现代汽车行业中,随着电子控制单元(ECUs)的普及以及车与车之间通信的不断增加,确保通信安全变得尤为关键。AUTOSAR (Automotive Open System Architecture) 的 SecOC (Secur
    的头像 发表于 10-09 16:37 638次阅读
    <b class='flag-5'>AUTOSAR</b> SecOC:保障汽车<b class='flag-5'>通信</b>的安全

    AUTOSAR经典平台介绍

    了汽车电子系统的软件组件、运行时环境和通信机制,以实现模块化、可重用和可扩展的系统开发。 在AUTOSAR CP中,软件组件被分为应用软件组件(SWC)和基础软件组件(BSW)。SWC是实现特定功能的软件
    的头像 发表于 10-27 15:30 981次阅读
    <b class='flag-5'>AUTOSAR</b>经典平台介绍

    AUTOSAR软件开发流程简介

    软件功能和性能要求。这包括确定软件组件、接口和模块的功能和规格要求。 架构设计:在这个阶段,根据需求分析的结果,设计AUTOSAR软件的整体架构。这包括定义软件组件的功能和接口,以及确定软件模块的分层结构和
    的头像 发表于 10-27 15:55 1882次阅读
    <b class='flag-5'>AUTOSAR</b>软件开发流程<b class='flag-5'>简介</b>