英飞凌AURIX 2G系列MCU外设模块MCMCAN的实现原理及配置项详解

目录

一、版本控制

二、功能概述

三、主要模块及涉及EB配置项

(一)通用时钟方案与控制

(二)波特率产生与位定时

(三)轮询与中断

(四)Port输入输出接口

(五)CAN FD实现

控制器延迟补偿

(六)报文接收处理

Acceptance Filtering

Rx FIFO 0 and 1

Dedicated Rx Buffers

(七)报文发送处理

Dedicated Tx Buffers

Tx FIFO

Tx Queue

Tx Event Handling

四、其他EB配置项

五、重要寄存器

六、参考文档

一、版本控制

版本

撰写日期

撰写记录

字体颜色

V1.0

2023.08.28

以当前时间点对MCMCAN模块的认识,撰写了此文档,旨在阐述AURIX 2G系列MCU关于MCMCAN模块的实现原理及对应MCAL配置工具EB的重要配置项。

黑色(有部分红色字体仅为辨识突出)

二、功能概述

  • MCMCAN将Bosch(博世)的M_CAN IP作为CAN节点实现,M_CAN根据国际标准ISO 11898-1和ISO 11898-4(Time-triggered Communication on CAN)执行通信,其中根据ISO 11898-1支持了经典CAN和CAN FD通信,根据ISO 11898-4支持了时间触发通信(TTCAN)的所有特性,包括事件时间触发通信、全局系统时间和时钟漂移补偿。
  • 本文档主要讲述的是AURIX 2G系列MCU关于经典CAN和CAN FD的通信实现原理,对TTCAN的实现原理不具体阐述。对于经典的CAN总线协议网络中如果多个节点同时发送数据帧,那么根据总线仲裁规则具有最高优先级的数据帧才能被发送出去,这样最低优先级的节点的数据可能很长一段时间都无法发送出去,因此经典的CAN总线协议网络很难保证信息的实时性,正是为看保证消息的实时性要求,TTCAN出现了。实时性要求就是当某个节点发生某个事件,该节点必须在一定的时间范围内通过消息帧将该状态发送出去,而TTCAN就可以实现此需求。
  • 本文档针对的是AURIX 2G系列TC38x MCU,MCU内有3个MCMCAN模块,每个MCMCAN模块最多支持4个CAN节点,即最多支持12个节点,针对具体项目需求,可将不同的报文分配到不同的节点上。
  • 每个MCMCAN模块都有一段自己的报文RAM,主机CPU可快速寻址这段RAM,每个模块里的4个节点共用这段报文RAM,因为CAN模块0还实现了TTCAN,所以模块0的报文RAM相较于其他两个模块要大,具体的报文RAM的地址及大小如下图所示:
  • 每个模块的报文RAM是可配置的,其内容取决于分配到这个模块上的CAN报文的内容,后面会具体阐述报文RAM的具体结构及其在CAN报文的接受与发送中的作用。
  • 三、主要模块及涉及EB配置项

    (一)通用时钟方案与控制

  • CAN模块的时钟来源是CCU(Clock Control Unit)中的 fMCANH 和 fMCAN,每个CAN模块都可以独立选择是否接受这两个时钟,若选择接受,则 fMCANH提供给了fSYN,fMCAN提供给了 fASYN,fSYN和 fASYN在CAN模块中有不同的用途,fSYN是模块内寄存器接口和RAM接口的时钟源,fASYN用来产生CAN通讯和CAN FD通讯的波特率,芯片推荐fASYN的频率为80, 40, 20 MHz。因为fSYN是CAN模块工作的时钟来源,fSYN>=fASYN是模块内部能正常工作的必要条件。
  • 一个CAN模块有4个CAN节点,每个节点都有权利选择自己是否接受CAN模块的fSYN和fASYN,这通过寄存器MCR.CLKSELi进行控制,因此,若想要关闭某个节点,可以通过控制此寄存器来关闭其时钟源。
  • 关于上述时钟的具体细节可如下图所示:
  • 涉及EB配置项

    (二)波特率产生与位定时

            波特率和位定时是CAN通讯中比较基础的概念,也是需要注意的点,关于这两个概念的详细说明可参考博文《控制器局域网络(CAN)协议详解》。

            AURIX的MCMCAN模块关于波特率产生和位定时的设置在寄存器NBTP和寄存器DBTP中,每个CAN模块的4个节点都有独立的NBTP寄存器和DBTP寄存器,用来控制每个节点波特率和位定时,NBTP寄存器是针对经典CAN通讯的波特率控制和CAN FD中仲裁段的波特率控制,DBTP寄存器是针对CAN FD通讯中数据段的波特率控制,寄存器NBTP的具体内容如下图所示(寄存器DBTP内容雷同,不展示):

            波特率的时钟来源是fASYN,CAN的位时间量子Tq等于(NBRP+1)个fASYN时钟周期,NSJW的数值再加上1是CAN再同步时支持的最大补偿宽度,位域NTSEG1的数值再加上1是传播时间段、相位缓冲段1的Tq之和,位域NTSEG2的数值再加上1是相位缓冲段2的Tq数量,因此一个比特的总时间长度为 [NTSEG1 + NTSEG2 + 3] Tq(还包括1个Tq的硬同步段)。

            综上,若fASYN的频率为8MHZ,那么这个寄存器复位值 0x06000A03所对应的CAN节点的波特率是500kbps,最大补偿宽度是7Tq。1/(1/8 * (10+3+3)) =  500kbit/s。

            在CAN通讯工程实践中,还有对CAN网络采样率的需求,CAN通讯时是在相位缓冲段1的结尾出采样的,因此采样率的计算方式为(NTSEG1 + 2)/ (NTSEG1 + NTSEG2 + 3) * 100%,那么寄存器复位值 0x06000A03的采样率为75%。当然,不同波特率下的CAN网络采样率需求不同,具体应用时满足对应需求即可。

    涉及EB配置项

    注:框柱的红色部分控制着CAN FD的比特率切换位(BRS)的显隐性。

    (三)轮询与中断

            每个CAN模块的每个节点都能轮询或中断地实现CAN报文发送、CAN报文接收,Busoff、WakeUp等功能,轮询方式或中断方式的选择,决定了实现对应功能的API是在中断中调用,还是周期轮询调用。考虑到不同CAN网络的不同功能,会给其匹配不同的实现方式,比如只在特殊场景下才会通讯的功能,如XCP,就可以不需要轮询地实现CAN报文的发送和接收,仅在需要标定ECU时才会使用此CAN网络,因此,对应这种功能的CAN网络,可以使用中断方式来实现CAN报文的发送和接收,以减小CPU的负载。

            CAN模块的中断控制主要涉及的寄存器有IR/IE/GRINT1/GRINT2/ISREG,IR为中断标志寄存器,其各个位置位时表示相应的事件发生,IE为中断使能寄存器,其位域与IR寄存器的位域一一对应,仅有事件发生是不能触发中断的,还需要对应的使能为置位。寄存器ISREG表征的是最终每个节点链接到服务请求节点SRN的中断信号状态,IR中的多个中断标志位都满足条件才会使能中断信号的置位,具体的使能对应关系如下图所示:

    就拿中断信号Tx Event FIFO incident(TEFIFO)来说,其需要IR寄存器的第12位和第14位都置位才会置位,而置位是否会真的产生中断请求还取决于IE寄存器对应的第12位和第14位是否被使能。

            若IE寄存器使能后,中断请求会链接至中断服务请求节点SRN,每个CAN模块都有16个SRN,如下图所示:

    每个中断信号会链接至哪个中断服务请求节点可是可控的,其控制寄存器就是GRINT1和GRINT2,通过将不同的中断信号链接至不同的中断服务请求节点,从而知道了不同信号的中断服入口,然后将要实现此信号的功能的API放入此中断入口即可实现中断。

    拿CAN报文发送的中断信号TEFIFO举例,若将此信号链接至中断服务请求节点SR8,即GRINT1的位域TEFIFO的值为8,然后再在中断控制模块(ICU)中配置对应服务请求节点的使能与否,服务提供商(不同的CPU或DMA),中断优先级,中断类型(一类中断/二类中断)即可。

    CAN模块的中断服务请求节点的寄存器为SRC_CANiINTj(i代表CAN模块索引,j代表请求节点索引)。

    涉及EB配置项

    (四)Port输入输出接口

            每个CAN模块的每个节点都有寄存器控制这个节点所内部链接的Port,所以这里会和Port模块的配置形成配合,以实现CAN模块和Port模块的正确链接,下表展示了CAN模块0的节点0的链接Port情况,确定RXD就是再确定内部链接Port。

            每个CAN节点都有一个基地址来表征是这个节点,这个在MCAL的配置工具EB中给特定名称的CAN节点链接到芯片物理CAN节点很重要,AURIX 2G系列MCU选择每个节点的ACCENNODEi0(i = 0-3)寄存器地址作为这个节点的基地址,例如CAN00的基地址是0xF0208100,CAN01的基地址是0xF0208500,CAN10的基地址是0xF0218100,其他节点依次类推。

    涉及EB配置项

    (五)CAN FD实现

            了解CAN FD协议可知,CAN FD可以理解为经典CAN协议的升级版,只升级了协议,但物理层未改变,所有CAN模块的每个节点都支持经典CAN 通讯和CAN FD通讯,决定节点是处于哪种通讯模式是通过寄存器CCCR的位域FDOE确定的。位域FDOE在置位时,代表此节点支持CAN FD通讯,在此种情况下,此节点也是支持经典CAN通讯的,具体在通讯时是经典CAN通讯或CAN FD通讯取决于接收到的报文或要发送的报文的FDF位的显隐性。位域FDOE在未置位时,代表此节点不支持CAN FD 通讯,此条件下发送和接收CAN FD都是不被允许的。

            CAN FD在控制段、数据段和CRC校验段是可以和仲裁段不同的传输速率的,这也是CAN FD能提高通讯速率的原因,对于有不同的通讯速率的一帧CAN FD报文,需要有速率切换位BRS的置位,以来实现不同的通讯速率。所以,对于有速率切换的CAN FD报文,都需要使能寄存器CCCR的位域BRSE以来使能对应节点的速率切换功能。

    控制器延迟补偿

            在 CAN FD的高通讯速率下,是很有必要引入控制器的延迟补偿的。理解CAN通讯基础知识可知,CAN控制器的Rx的回环检测是保证CAN总线可靠性的基础技术,然而,CAN收发器的信号转换都是有时延的,也就是说从CAN控制器的TX出发到达CAN bus,以及从CAN bus返回RX都是延时的。

           不同的CAN收发器的延时参数略有差异,但都差别不大,按照最大的延时时间200ns来计算。首先看看,CAN2.0最高1Mb/s的情况。一个bit时间Tb=1000ns。200ns的延时会导致RX采样的波形落后20%。 按典型的87%的采样率计算,实际上RX loop采样的位置是在67%,所以整个RX采样的裕度还是比较大的,顺便也解释了工程上为什么要选取75%~87%这样靠后的采样位置。这样TX->RX信号延时后,对保证让控制器能够采样到正确的数据非常有帮助。

            然后来到CANFD,事情发生了变化。以10Mb/s的数据段高速波特率计算,一个bit位周期Tb=100ns。最高200ns的RX delay将会带来毁灭性的采样错误,TX->RX收到的波形可能已经落后超过一个Tb,无论如何设置采样位置都无返挽回如此大的信号延时。所以CAN FD的标准给出了一个解决办法,即控制器的延迟补偿。具体实现方式是给Rx定义了一个新的采样点SSP(Secondary Sample Point)。要求控制器需要在仲裁段(<=1Mb/s)段测量FDF下降沿的RX delay时间,然后在数据段对RX采样时,对RX采样点进行延时。AURIX 2G系列MCU关于控制器延迟补偿的实现如下:

    在寄存器DBTPi(i=0-3)的位域TDC置位后,控制器的延迟补偿功能就会被使能,在进行CAN FD 通讯时,控制器就会自动对每一帧的传输延迟进行测量,测量的时钟基准是 fASYN,单位是mTq。当然,还可以在此测量的延迟的基础上再加上可配置的延迟时间,其可通过寄存器TDCRi(0-3).TDCO配置。

    涉及EB配置项:

    (六)报文接收处理

             AURIX 2G系列MCU的MCMCAN模块的Rx Handler控制接收过滤,接收到的消息传输到Rx缓冲区或两个Rx FIFO之一,以及Rx FIFO的Put和Get索引。报文RAM关于Rx Hander的部分如下图所示:

    报文RAM部分的地址偏移索引是以字(4个字节,32位)来索引的,这里需要注意。上图中左边各寄存器的相应位域记录的是各部分的偏移地址(相对报文RAM的起始地址偏移),右边所呈现的是各部分所能支持存储的最大元素数量,拿Rx Buffer来说,最大支持1152个字,而每一个发送的报文,最大所占的字数是18个字(CAN FD,数据段有64个字节,占16个字,再包括报文信息的2个字),所以,Rx Buffer部分最多支持1152/18 = 64个报文的缓冲存储。对于11-bit Filter,其内容如下图所示,每个11-bit Filter占用1个字,所以最多支持128个11-bit Filter的缓冲存储。

    Rx Buffer and FIFO Element 

       

    11-bit Filter

            在Rx Handler中,涉及到五个主要RAM区域,分别是11-bit Filter、29-bit Filter、Rx FIFO 0、Rx FIFO 1,Rx Buffer。现就这五个进行详细介绍。

    Acceptance Filtering

            标准帧和扩展帧的接受过滤信息是分开的,但过滤原理都相同。MCMCAN模块针对接受过滤提供了3种方式,分别是特定的ID过滤,区域性ID过滤(一段ID区间),经典位掩码(Mask)过滤(掩码置1的位才进行过滤检查)。具体的方式选择体现在11-bit Filter和29-bit Filter的一些位域上。注意:只有存放在FIFO中的Rx 报文才能实现区域性ID过滤和经典为掩码过滤。

    Rx FIFO 0 and 1

            上图很好地表示了Rx FIFO的存储机制,每次有新的报文通过了过滤被存到RxFIFO中时,会存放在寄存器RxFnS.FnPI+1索引的位置,每次读出报文时,会读寄存器RxFnS.FnGI所索引的位置,然后寄存器RxFnS.FnGI再加1,寄存器RxFnS.FnFL表示FIFO存放的报文的数量。

    Dedicated Rx Buffers

               对于每个专用Rx缓冲区,必须配置一个SFEC / EFEC = " 111 "和SFID2 / EFID2[10:9] = " 00 "的标准或扩展消息ID过滤器元素。

    涉及EB配置项:

    (七)报文发送处理

            AURIX 2G系列MCU的MCMCAN模块的Tx Handler专门用来处理专用Tx Buffer 、Tx FIFO和Tx Queue的传输请求,它控制传输消息到CAN 内核、Put和Get索引以及Tx 事件FIFO的传输。报文RAM关于Tx Hander的部分如下图所示:

    报文RAM部分的地址偏移索引是以字(4个字节,32位)来索引的,这里需要注意。上图中左边各寄存器的相应位域记录的是各部分的偏移地址(相对报文RAM的起始地址偏移),右边所呈现的是各部分所能支持存储的最大元素数量,拿Tx Buffer来说,最大支持576个字,而每一个发送的报文,最大所占的字数是18个字(CAN FD,数据段有64个字节,占16个字,再包括报文信息的2个字),所以,Tx Buffer部分最多支持576/18 = 32个报文的缓冲存储。对于Tx 事件FIFO,其内容如下图所示,每个事件FIFO占用2个字,所以最多支持32个Tx 事件FIFO的缓冲存储。

    Tx Buffer Element        

    Tx Event FIFO Element

            在Tx Handler中,涉及到两个主要RAM区域,分别是Tx Buffer和Tx Event FIFO,而Tx Buffer中,通过寄存器TxBC,可将其分为3种,分别是专用的Tx Buffers、Tx FIFO、Tx Queue,现就这四个进行详细介绍。

    Dedicated Tx Buffers

            在寄存器TxBCi.TFQS为0时,寄存器TxBCi.NDTB不等于0时,代表此节点的报文都以专用Tx Buffers存储,专用Tx Buffers是用于在主CPU的完全控制下进行消息传输的,每个专用Tx Buffer都配置了一个特定的报文ID,如果多个Tx Buffer配置了相同的报文ID,则首先发送索引号小的Tx Buffer。

    Tx FIFO

           在寄存器TxBCi.TFQS不为0时,寄存器TxBCi.NDTB等于0,寄存器TxBCi.TFQM等于0时,代表此节点的报文都以Tx FIFO的形式存储,存储在Tx FIFO中的消息从Get索引TXFQSi (i=0-3). TFGI引用的消息开始传输,每次传输后,Get索引循环递增,直到Tx FIFO为空。

    Tx Queue

           在寄存器TxBCi.TFQS不为0时,寄存器TxBCi.NDTB等于0,寄存器TxBCi.TFQM等于1时,代表此节点的报文都以Tx Queue的形式存储,存储在Tx Queue中的消息从具有最低消息ID(最高优先级)的消息开始传输。如果多个Queue Buffer配置了相同的Message ID,则首先传输缓冲区号最小的Queue Buffer。

    Tx Event Handling

           为了支持Tx事件处理,M_CAN实现了一个Tx事件FIFO。M_CAN在CAN总线上传输消息后,消息ID和时间戳存储在Tx Event FIFO元素中。为了将一个Tx事件链接到一个Tx事件FIFO元素,来自传输的Tx缓冲区的消息标记被复制到Tx事件FIFO元素中。

            Tx Event FIFO的目的是将发送状态信息的处理与发送消息的处理解耦,即Tx Buffer只保存要传输的消息,而发送状态单独存储在Tx Event FIFO中。这样做有一个好处,特别是在操作动态管理的传输队列时,Tx Buffer可以在成功传输后立即用于新消息。在覆盖Tx Buffer之前,不需要从Tx Buffer保存传输状态信息。

    涉及EB配置项:

    报文接收处理和报文发送处理的涉及EB配置项中有一个CanHandleType的配置,这个所决定的是CAN的HardwareObject的种类,其在AUTOSAR的CANIf文档中有描述,用于FullCAN 的一个CAN mailbox(HardwareObject)仅启用单个CANID的发送或接收,用于BasicCAN的一个CAN mailbox (HardwareObject)能够发送和接收一个范围的CAN ID。

    四、其他EB配置项

            EB的MCMCAN配置主界面有些通用的配置,这些配置是针对整个MCMCAN模块的,具体意义较简单,不具体文字阐述。

    五、重要寄存器

            MCAL层涉及到对硬件的操作,其实都是对相关寄存器的操作,因此,这里列举了MCMCAN模块的重要寄存器,以方便加深模块的理解和问题的快速排查。

    Short Name

    Long Name

    Description

    CLC

    Clock Control Register

    全局时钟使能寄存器

    针对整个MCMCAN模块

    MCR

    Module Control Register

    各节点时钟使能及一些通用模块控制

    ISREGi

    Interrupt Signalling Register i

    中断信号的标志位

    GRINT1i Interrupt routing for Groups 1 i

    中断信号的服务请求节点配置

    GRINT2i  Interrupt routing for Groups 2 i 中断信号的服务请求节点配置

    DBTPi

    Data Bit Timing & Prescaler 
    Register i

    CAN FD高速段的位定时与波特率产生

    CCCRi

    CC Control Register i

    启用和禁用CAN总线参与和基本协议功能,如CAN-FD

    NBTPi

    Nominal Bit Timing & 
    Prescaler Register i

    经典CAN通讯/CAN FD低速段的位定时与波特率产生

    ECRi

     Error Counter Register i

    错误计数器

    TDCRi

    Arbitration Priority Register,

    Group x

    控制器延迟补偿

    IRi

    Analog Fct. Config. Register,

    Group x

    CAN中断触发源的标志位

    IEi

    Input Class Register i, Group

    x

    CAN中断触发源的中断使能位

    六、参考文档

            撰写过程中,参考如下文档:

    1. 《AURIXTC3XX_um_part1_v2.0.pdf》

    2. 《AURIXTC3XX_um_part2_v2.0.pdf》

    3. 《TC38X User's Manual Appendix.pdf》

    4.  [CANFD] 高波特率下收发器延时的处理机制-Transceiver delay compensation_cancontrollertrcvdelaycompensationoffset_Lenz's law的博客-CSDN博客5.【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用_basiccan和full can什么区别_汽车电子助手的博客-CSDN博客4.  [CANFD] 高波特率下收发器延时的处理机制-Transceiver delay compensation_cancontrollertrcvdelaycompensationoffset_Lenz's law的博客-CSDN博客

    物联沃分享整理
    物联沃-IOTWORD物联网 » 英飞凌AURIX 2G系列MCU外设模块MCMCAN的实现原理及配置项详解

    发表评论