笔者最近一直在学习AUTOSAR 通信部分的相关知识,经过长时间的学习有了一个大概的了解。但一直感觉资料介绍的东西都很零散,不是很全面,这样子无法建立一个完整的知识体系。于是笔者查阅各种资料,加上自己的一点理解,制作了CAN通信部分从软件到硬件的一个流程图。
写的过程中发现这里面可以写的内容实在是太多了,所以本篇先简略介绍一下信号是如何传输的,以及主要模块的功能介绍,后续再更新每个模块信号传输的细节;

一图了解CAN通信硬件到软件

    • 1、CAN通信概略图和基本概念介绍
    • 2、通信模块介绍
    • 3、CAN通信从软件到硬件过程详解
      • 3.1、自上到下,数据的传递过程是:
      • 3.2、一些补充
    • 4、结尾:

1、CAN通信概略图和基本概念介绍

应用层APPL、RTE(实时运行环境 Runtime Environment)不太熟悉,这里不多赘述;

交互层:

  • IPDU multiplexer:协议数据单元复用模块
  • COM:COMMUNICATION 通信模块
  • DCM: 诊断通信管理模块(Diagnostic Comminication Manager)
  • PDUR:Protocol Data Unit Router -PDU路由器

网络层:

  • CAN TP: CAN Transport Layer
  • CAN TP提供的服务包括: 传输方向的数据分割、接收方向的数据重组、 数据流控制、检测分割会话中的错误、传输取消
    接收取消
  • J1939 TP:基于J1939协议的CAN TP,J1939Tp模块实现了SAEJ1939标准中的两种数据传输方式BAM和CMDT;

数据链路层:

  • CAN Interface:CAN 接口层(CanIf)是访问CAN总线的标准接口;

物理层:

  • CAN Driver: CAN 驱动;,可以实现对CAN控制器的初始化、发送/接收CAN报文、对接收报文的指示与对发送报文的确认、唤醒检测、溢出和错误处理等功能。
  • CAN Controller: CAN控制器;
  • CAN Transceiver Driver: CAN收发器驱动程序抽象了CAN收发器硬件。它为较高层提供了一个独立于硬件的接口。它利用MCAL层的api从ECU布局中抽象出来,访问CAN收发硬件。

硬件部分:

  • CANTransceiver:CAN收发器,是一种硬件设备,可将CAN总线上使用的信号电平调整为微控制器识别的逻辑(数字)信号电平。此外,收发器还能够检测电气故障,例如布线问题,接地偏移或长主导信号的传输。根据与微控制器的接口,它们会标记由单个端口引脚汇总的检测到的错误或由SPI非常详细地标记出来
  • CAN High: CAN总线高电平;
  • CAN Low: CAN总线低电平;
  • CAN network:AUTOSAR CAN网络管理是一个独立于硬件的协议,只能在CAN上使用。其主要目的是协调网络从正常运行到总线休眠模式的过渡。

传输数据类型:

  • signals:信号;
  • PDU:Protocol Data Unit 协议数据单元,PDU 由 SDU 和 PCI 组成
  • I-PDU:Interaction Layer PDU,由 data、length、I-PDU ID 组成。
  • N-PDU:Network Layer PDU,或 I-PDU Segment,由传输协议模块使用,对 I-PDU 进行分段
  • L-PDU:Data Link Layer PDU,或 Large PDU,一个或多个 I-PDU 被打包成 L-PDU,L-PDU
    是基于总线的,例如 CAN 总线的 L-PDU 就是 CAN 帧;
  • Message:报文;

2、通信模块介绍

首先,从AUTOSAR架构上来说,一个完整的CAN通信的过程涉及到了包括硬件、AUTOSAR中间件和上层应用层软件;在硬件部分来说,涉及到的是CAN 总线CAN的收发器;软件部分的话,涉及到的概念是MCAL(微控制器抽象层)BSW(基础软件层)RTE(实时运行环境)APPL(应用层)等;
其中MCAL部分用到了
通信驱动模块
,而BSW部分使用到了通信服务模块通信硬件抽象模块;由于笔者是做MCAL和BSW的,至于应用层部分的知识就暂且不具体介绍了;

3、CAN通信从软件到硬件过程详解

3.1、自上到下,数据的传递过程是:

应用层–>RTE–>COM–>PDUR–>CANTP–>CAN Interface–>CAN Driver–>CAN controller–>CAN transceiver–>CAN BUS Line

①Com模块获取应用层的信号(Signal),经一定处理封装为IPDU(Interaction Layer Protocol Data Unit)发送到PduR模块;

②PduR根据路由协议中所指定的I-PDU目标接收模块,将接收到的I-PDU经一定处理后发送给CanIf;PduR也可以将部分I-PDU发送给CAN TP模块,处理之后再发送给CANIf;

③CanIf将信号以L-PDU(Data Link Layer Protocol Data Unit)的形式发送给CAN驱动模块;

④ CAN 驱动模块将Message 报文发送给CAN controller;

⑤ CAN controller 与外部硬件的CAN transceiver(CAN收发器)进行CAN 报文的收发;

⑥外部硬件CAN收发器–CAN Transceiver Hardware主要工作内容为,接收CAN bus上的网络信息(通常叫做CAN Frame)相关的信号电平并将其转化为逻辑信息电平转发给CAN Controller,接收从CAN Controller传输过来的逻辑电平信息并将其转化为信号电平传从到CAN bus上。CAN Transceiver有两条线,一条连CAN总线的高电平,一条低电平;
123456

3.2、一些补充

  • CAN transceiver部分通过拉脚,部分通过SPI来控制CAN收发器;
    简单的判断方法是:脚多的使用SPI控制,传输模式命令。脚少的使用一根线来控制模式;
  • CAN transceiver driver 可以走SPI发送控制数据,但一般还是用CAN控制器和CAN收发器来通信的,不要搞不清主次!;如果芯片支持,SPI可以配置成DMA模式,使用DMA来搬运数据;
  • 收发器和控制器可以一对多,具体的情况有待研究;

4、结尾:

通信全流程的知识点真的相当的多,查阅了包括标准文档和其他优秀博主在内的相当多的文章。笔者后面准备在学习中将一个个模块之间的联系总结一下;等着我的更新吧;