1. 概述
CAN通信栈是在CAN总线上完成Signal的接收/发送功能、Signal的路由转发以及报文的路由转发功能。
AUTOSAR中基于CAN的通信栈框架
2. CANDrv简介
2.1 概述
CAN Driv er处于通信最底层,与硬件进行交互,将不同类型硬件所进行的操作分装为统一的API接口提供给上层,隔离硬件与上层服务。
CAN Driver包含于硬件相关的各配置项,将物理层发生的事件通过回调函数的方式通知上层,控制CAN控制器的行为及状态,并提供与收发报文相关的服务。
2.2功能
CAN 驱动API命名规则
CAN驱动的状态机
CAN Controller状态机
CAN模块/Controller的初始化
L-PDU的发送/接收
CAN驱动唤醒
通知机制
错误分类
驱动状态机 Controller状态机
2.3 CanDrv初始化
Can_Init在CAN模块中别的API之前被调用(除Can_GetVersionInfo)。
初始化内容:
静态变量,包括各种flag;
整体硬件单元的一般寄存器设置;
每个CAN Controller的特定设置。
2.4 PDU的收发
发送时可选择多路发送Multiplexed Transmission(多对一,不止一对一);
确保收发数据的一致性。
2.5 驱动唤醒
两种方式:中断和轮询。
与EcuM模块交互:
EcuM_CheckWakeup;
EcuM_SetWakeupEvent;
2.6 通知机制
中断
轮询
与CanIf模块交互(除唤醒与EcuM交互外):
CanIf_ControllerBusOff;
CanIf_RxIndication;
CanIf_TxConfirmation.
3 CanIf概述
3.1 CanIf功能
➢lardware objeet huandles (IOII)
➢动态/静态IL-PDU以及Me taData概念
➢接收L-PDU的BasicCAN和Fu1 1CAN概念
➢L PDU的发送
➢L-PDU的接收
➢CAN Controller模式控制
➢PDU模式控制
➢软件滤波
➢DLC检测
➢对于多个CAN驱动的支持
➢错误分类
3.2 HOH
➢HOH为CAN邮箱的抽象,关联CAN Controller中1-n个具体邮箱。
➢HOH分为Hardware Receive Handle (HRH)和Hardware Transmit Handle(HTH) .
3.3 静态/动态L-PDU及MetaData概念
➢这里动态指的是L-PDU的CanId在运行时会改变。
➢对于发送1L-PDU改 变JtCanId的途径有两种:
①通过调用CanIf_ SetDynamicTxId接口来实现:
②通过NetaDeta来实现。
➢MetaData长度为0 4个byte,在I PDU数据域后面( 小端顺序)
➢发送L-PDU的真IE.CanId计算方式: .
(CanIfTxPduCanId &CanIfTxPduCanIdMaesk) | (MetaDatak (-CanIfTxPduCanIdMask) )
3.4 静态/动态L-PDU及MetaData概念
➢其中CanI fTxPduCanId由配置的CanId或者CanIf_ SetDynamicTxId决定。RxL-PDU配置了MetaData时,将接收到的CanId作为MetaData放在I-PDU数据域之后,传给上层模块,Pdu 长度为数据域长度+MetaData长度。
3.5 BasicCAN和FullCAN概念
➢FullCAN指接收邮箱只收-一个CanId,通过硬件滤波实现:
➢BasicCAN指接收邮箱能接收多个CanIds.
➢由CAN驱动中设置邮箱的滤波掩码决定。如果是BasieCAN,在CanIf中 需要进行软件滤波。
3.6 PDU模式控制
> PDU模式可看作为Cortrollet模式为STARTED时的细分。
➢分别对应4种模式:
CANIF ONLINE、CANIF OFFLINE、CANIF TX OFFLINE、CANIF_ TX OFFLINE_ ACTIVE。
➢其中,CANIF_ TX_ OFFLINE ACTIVE模式用作特殊情况(如diagnosis pasive mode ),该模式下不真正发送L-PDU,但会通i过TxCnfimatiou通知上层模块发送完成。
3.7 软件滤波
➢软件滤波分2部分:
①HRH滤波:因为一般硬件邮箱都足通过邮箱掩码按bit位来进行滤波,这里实现基于.上下限HRH滤波作为补充。
②通过HRH滤波之后,根据按收到的CanId找到匹配的Rx L-PDU ( 日前代码实现LINEAR滤波方式)。
3.8 DLC检测
➢对于Rx L PDU要实现DLC检测功能, 需要配置该PDU的最小长度。只有当接收到的PDU长度≥配置的最小长度时,DLC检测通过。