分享

CP AUTOSAR CAN 协议栈简介

 新用户82165308 2022-08-14 发布于广东

前  言

在车载通信网络中,CAN通信作为目前主流的一种通信协议具有广泛的实际应用。同样,CP AUTOSAR 架构在一开始就把CAN通信作为通信架构中的一部分进行了标准化定义。下图展示了CAN协议栈在CP AUTOSAR通信中的基本架构:

图片

其中在MCAL部分主要是CAN的Driver,对于采用外部支持PN网络管理的Trcv的还会使用SPI Driver实现对Trcv的控制,对于非PN网络管理和不需要网络管理的Trcv,一般采用IO进行控制;

在抽象层主要包括了IF和TRCV模块;服务层包含了CAN的协议(TP/J1939等)模块/SM/NM等相关的状态切换和模式管理模块以及特殊的诊断通信管理DCM模块和处理通信的PDUR/COM等模块。

针对本次内容,主要介绍TC2xx这款芯片CAN功能、CP AUTOSAR CAN协议栈的各个模块、基于DBC如何在工具中配置CAN模块方法。


TC2xx CAN 概述

针对英飞凌芯片中的CAN模块,手册中已经比较详细,主要针对该芯片的整个架构做简单介绍,下图是TC2xx的CAN的基本架构:

图片

在该架构图对于CAN功能主要包含几大方面,Port、中断、系统总线接口、时钟、CAN核心模块(MultiCAN)。

其中,Port用于选择CAN Note的Tx/Rx引脚选择;时钟主要用于选择CAN时钟的来源,支持晶振时钟、PLL输出时钟等,可以根据实际需要进行选择;总线接口主要用于Core对CAN外设的控制;中断模块主要对CAN的收发数据、Error、BusOff等进行中断响应处理;MultiCAN是CAN通信的核上,实现了CAN通信的控制协议。

CAN Node中主要实现CAN协议中的主要功能,主要包括下面几个部分:

图片

Bit Timing Unit:
CAN的 Bit Timing定义到了整个CAN通信的位时间,CAN的一个Bit在通信中主要包括同步段、传播段、相位缓冲段1和相位缓冲段2四个部分,在实际中根据具体的情况选择相应的时间控制。

Bitstream Processor:
主要作用是对CAN信号控制CRC产生,在物理层上增加SOF和EOF标志,同时对ID进行仲裁,在总线空闲的时候,将CAN信号传输到总线上,同时监控总线的状态,一旦总线上的电压与自期望发送数据的电压不匹配的时候诊断出总线错误,填充到相应的寄存器,同时对CRC进行校验,如果CRC不匹配,也置位相应的错误寄存器。

Error Handling Unit:
两个错误计数器:REC & TEC,用于记录CAN报文的接收和发送的错误计数,实现主被动错误的切换以及Error汇报。

CAN Frame Counter :
主要实现:计算发送和接收的CAN消息的个数以及计算某个CAN节点开始发送和接收数据的时间两大功能。

Node Timing Functions:
主要用于诊断接收超时和通过GTM周期的发送CAN报文。

CAN Node Interrupts :
实现CAN节点中断管理,主要包括:CAN Frame发送接收成功中断、CAN协议错误中断、Frame Counter Overflow中断、节点计时器事件中断、相关条件改变的中断等。

Message Object就是CAN的消息的收发邮箱,每个Message Object分配一个List,总共16个List,每个List会跟一个CAN Node对应,用于管理CAN接收发送数据的Message Object。

主要分为Basic CAN和Full CAN两种类型,Basic类型支持基本的CAN信号产生和CAN位流操作,信号的滤波靠软件实现,CAN管理是靠软件实现,可以只用一个Message Object实现数据的接收,一般实现普通的CAN协议;

Full 类型在硬件上实现对CAN的信号滤波和管理,通过Message Object对CAN的ID、Data、Direction在硬件上处理,对于接收的信号可以分配到特定的Message Object通过中断实现接收,可以在硬件上减少CPU负载。

AUTOSAR CAN 协议栈模块概述


CAN

CAN模块的配置主要配置CAN的中断优先级(中断模式下使用)或者Polling模式下的周期处理函数;CAN消息在控制器中使用了多少个邮箱,进行收发数据;选择硬件上CAN消息的通道;唤醒功能的使能;CAN的滤波器;CAN通信的时钟;CANFD相关功能的配置等

CANTrcv


CANTrcv 模块主要配置CANTrcv外部芯片,一般CANTrcv芯片有两种模式,一种自带唤醒功能的CANTrcv和不带唤醒功能的CANTrcv。

CAN Trcv模块主要控制CAN外部收发器的模式,将MCU的CAN信号与CAN总线建立起数据交互。

不支持唤醒的TJA1040/1052等;支持任意帧唤醒的TJA1043;局部唤醒功能的TJA1145等。

带有唤醒CANTrcv模块主要的是选择和唤醒功能相关Pin脚,Pin脚要与硬件上与CANTrcv芯片相连的引脚一一对应。局部唤醒的一般通过SPI进行相关配置,如果是不带Wake功能的主要选择Rx的Pin即可。

图片


CANIF

CANIf模块主要定义了上/下层的CAN信号在发送和接收时候的标准接口。CP AUTOSAR 中CANIf模块一个重要的功能就是和WakeUp有密切的关系,要根据实际情况进行配置。

CANIf模块要对下层的CANDrv和CANTrcv进行定义,区分CANIf下层的交互模块。如果CANIf中对应的CAN通道配置了CANTrcv则要选择与之对应的CANTrcv通道,表明该CAN通道是通过CANTrcv发出去的,CANIf的状态变换也是与CANTrcv密切相关的。如果没有CANTrcv通道,那么该模块中不需要添加相应的CANTrcv。

CANIf中要定义数据接收和发送的Buffer, 对于CAN信号收发采用的邮箱也需要定义。同时支持回调函数功能;对于CAN信号在CANIf这一层对上面一层交互的模块(XCP、PDUR、CANNM、CANTP/J1939等)也要定义清楚。根据实际信号在使用的时候的路由进行选择即可,XCP的就选XCP,J1939协议的选择J939TP等等。

同时CANSM会对CANIf状态进行控制,达到对CAN信号的使能和禁用。

图片


CANSM

CANSM配置模块中对CANSM与CANIf之间进行modechange的时间做了限制,同时定义了BusOff处理的相关时间参数。定义相关CAN模块的BusOff段短恢复和长恢复机制。

COM

COM模块主要为应用层(或者RTE)模块提供信号传输的接口,提供的接口主要是以Signal的形式存在,同时也包含信号组的形式,信号组一般对应应用层的结构体变量,在COM层实现了Signal在I_PDU中的打包和解包;

定义了信号传输的权限;信号传输的模式和信号传输的过滤器设置;信号传输的延迟时间;超时的监控机制;与其他模块的调用和被调用函数等。在COM层可以实现信号的组管理,实现信号使能或者禁用的成组控制。

COM信号的发送过程,主要来自于RTE调用的接口或者COM的信号Gateway。所以的信号在COM层进行组包,然后根据DBC配置的发送属性(周期或者数据改变等)进行调用PDUR层的发送函数发送,同时数据发送完成后根据需要可以使用Confirmation机制,确认数据是否在CAN总线上发送成功与否,过程如下:

图片


CAN信号的接收过程主要是底层模块调用RxIndication功能将数据发送到PDU Buffer中,然后根据信号的接收方式(Gateway直接调用对应接口进行触发发送还是普通的信号放到Buffer,采用RecieveSignal将数据放到APP的RTE接口中),同时COM层支持信号的超时诊断等功能,接收过程如下:

图片

ComM

ComM模块的主要作用在于:实现对总线的管理和控制。如果网络管理功能使能的情况下,实现对网络管理模式的配置和选择。
COMM的详细介绍参考之前的文章

PduR


在PDUR配置中,主要建立COM层与下面具体的传输层(CANTP、J1939、CANIf等)之间的路由。也可以将PDUR作为一个网关使用,实现不同ECU在PDUR层的信息传递,不需要再往上传输在APP做信号传输转换的网关。主要支持1:1、1:n、Gateway功能

图片

XCP

将与XCP相关的PDU进行关联,XCP的信号可以直接被RTE调用,根据XCP相关的协议在XCP的配置中定义好具体的内容,定义XCP处理的时间相关的参数,时间周期、时间基准等。同时将XCP通信的处理放到特定的处理事件中;定义具体的XCP实现方式(DAQ、STIM等)。

J1939

在J1939模块中根据j1939协议的内容配置到具体的参数中即可。

CANNM & NM

CANNM中要关联到具体的CAN通道,同时特定帧唤醒的情况下要关联具体的CAN报文,定义周期的处理时间和超时时间等。根据实际的需求定义发送的网络管理报文的具体内容,发送的网络管理报文一般因OEM不同会有稍微的区别。

对于PN网络管理的相关参数根据具体的需求进行使能和不定义。

NM模块的主要适应ComM模块和各种总线的NM模块,实现函数的Call和Callback;定义是否使能总线网络管理的协调机制,参考的ComM的总线通道;定义ShutDown的时间,定义总线的同步机制等。

由于这个模块是所有的总线相关的,在实际的配置中主要采用了它的CAN的网络管理的请求和释放通信功能。

CANNM&NM详细的介绍之前有已经更新一篇专门的文章参考即可。

基于DBC文件配置CAN协议栈

目前主流的CP AUTOSAR 工具都会支持DBC导入的方式自动生成整个CAN协议栈的内容,通常而言DBC在导入后,CP AUTOSAR配置工具会将DBC文件转换成ARXML文件,然后自动生成CAN协议栈的配置,一般的操作流程如下:

图片

本期分享就到这里,下期见。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多