目录
1、概述
2、上下层关系
2.1 上层
2.2 下层
3、链接
4、记录项
1、概述
下面主要是规范方面的描述:
参考文档《AUTOSAR_SWS_CANInterface.pdf》
CAN接口模块(下文简“CanIf”)位于底层CAN驱动(CanDrv)、CAN收发器(CanTrcv)和上层通信服务层(CanSm、CanNm)、CAN传输协议(CanTp)、PDU路由器(PduR)之间。它表示上层通信层的CAN驱动程序服务接口。
CanIf提供了独特的接口来管理不同CAN硬件,如CAN控制器和CAN收发器。同时,基于物理CAN通道相关的CAN状态管理器模块(CanSm)可以控制多个底层内部和外部的CAN控制器或CAN收发器。
CanIf由与CAN硬件无关的任务组成,属于ECU CAN通信驱动程序。CanIf满足PduR和AUTOSAR COM栈上层通信模块的控制流和数据流要求:发送请求处理、发送确认、接收指示、错误通知和CAN控制器的启动/停止,从而唤醒或参与网络。它的数据处理和通知API基于CAN L-SDU,用于控制和模式处理的API提供了CAN控制器相关的视图。
注意一下:
CanIf是需要使用CANSM的CANSM_cbk的。
见下图1:
TP/PDUR均和 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、上下层关系
2.1 上层
AUTOSAR BSW分层架构中,CanIf的上层可以是PduR,可以是CanNm,可以CanTp,可以CanSm,EcuM或复杂的驱动模块CDD,普遍标定协议模块XCP,全局时间同步模块CanTSyn ,J1939传输层模块 J1939Tp和J1939网络管理模块 J1939Nm。
CanIf使用的API由通知服务组成,它们将CAN相关数据传输到目标上层。这些服务的调用参数指向CanDrv中的缓冲信息,或者直接指向CAN硬件。另外,CanIf支持对总线镜像模块的调出,来报告接收和传输帧的内容。EcuM会初始化CanIf。
2.2 下层
CanIf的下层模块主要是CAN驱动程序CanDrv。由于CanIf在AUTOSAR BSW架构中的地位,它与CanDrv有着密切的关系。CanDrv只提供对CAN控制器的硬件抽象访问,但是CanDrv会检测和处理CAN控制器的事件,并将这些事件通知到CanIf。CanIf将CanSm的操作模式请求传递给相应的底层CAN控制器。
AUTOSAR图示2:
CanDrv提供了标准化的L-PDU,以确保CanIf的硬件独立性。指向这个规范化的L-PDU的指针要么指向一个临时缓冲区,要么指向依赖于CAN硬件的CanDrv。CanDrv调用的回调服务是在CanIf中声明和实现的。由CanIf调用的回调服务被声明并放置在对应的上层通信服务层中,如PduR、CanNm、CanTp。
回调服务函数举例如下
CanIf_TxConfirmation | 规范8.4.2章节 |
CanIf_RxConfirmation | 规范8.4.3章节 |
CanIf_ControllerBusOff | 规范8.4.4章节 |
回调服务函数的作用非常大,我们调试的时候,可以插入想要的功能,例如加个计数值,查看发送或者接收多少数据了。
配置的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、链接
侵权免责声明:如有冒犯,请联系,会删除此链接与文中引用图片
转自其他细节博主
4、记录项
1、规范的5.4章节描述
控制操作模式仅仅在CanSM里面才能更改
2、静态 L-PDU 用它们的 ID 定义,以后不能更改。动态 L-PDU 可以在运行时更改其 CanId。对于动态 L-PDU,您还需要启用 DynamicTx API,例如CanIf_SetDynamicTxId()
并使用它来设置实际的 CanId。
参考规范:7.3与7.4章节
3、物理通道的层次关系
4、CAN硬件单元图示