查看: 2719|回复: 2

LPC54018的CAN-FD

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32004
    最后登录
    2024-4-9
    发表于 2019-4-30 12:55:35 | 显示全部楼层 |阅读模式
    小编今天给大家介绍LPC54018芯片的CAN-FD。LPC54018的CAN控制器支持经典CAN和CAN-FD功能。这里说的经典CAN是指CAN协议2.0版本part A、B,CAN-FD是指国际标准ISO 11898-1:2015。
    然而,小编并不打算在这里给大家介绍这些协议和标准,小编只是简单介绍CAN和CAN-FD的差异以及在LPC54018上使用CAN-FD的几个关键问题。


    —————— CAN和CAN-FD ——————

    一个典型的CAN总线、CAN收发器和CAN控制器的连接图,如下图所示。
    11.jpg
      图一  

    RT是终端匹配电阻,用来提高CAN总线的抗干扰能力。

    TJA1059是NXP一款CAN总线收发器芯片,用来把数字信号转换为CAN总线的差分信号,或者把接收的差分信号转换成数字信号。

    CAN控制器和CAN收发器之间传输的帧都是数字信号。而CAN协议规定,CAN通信通过数据帧、遥控帧、错误帧、过载帧和帧间隔这5种帧类型来进行。小编在这里主要通过数据帧来介绍经典CAN和CAN-FD的差异。

    CAN-FD与经典CAN相比,主要有两点不同。
         一是增加了每个数据帧的负载数据。经典CAN数据帧的最大负载数据是8个字节,而CAN-FD最大负载数据是经典CAN的8倍,达到了64个字节。
         二是拥有更高的位速率。经典CAN的最高位速率被限定在1Mbps,而CAN-FD则没有此限制。在实践中,CAN-FD位速率主要被CAN收发器所限制,目前CAN收发器的位速率达到了5Mbps甚至更高。

    经典CAN数据帧、无位速率转换CAN-FD数据帧和2倍位速率转换CAN-FD数据帧,它们的帧结构示意图如图二所示,这些都是标准的格式。通过这个图,大家可以直观地了解CAN-FD与经典CAN的不同。

    12.jpg
      图二  

    帧结构的区分
    我们知道,一个经典CAN数据帧由7个段构成。它们分别是帧起始(SOF)、仲裁段(CANID/RTR)、控制段(IDE/FDF/DLC)、数据段(DATA BYTE)、CRC段(CRC15/CRCD)、ACK段(ACK/ACKD)和帧结束(EOF),如图二第一个数据帧结构所示。
    CAN-FD数据帧同样由7个段构成,除了帧起始、仲裁段、ACK段和帧结束这4个段保持与经典CAN相同外,其余3个段与经典CAN有所不同。
    CAN-FD数据帧的控制段由IDE / FDF / res / BRS / ESI / DLC等控制位构成,其中FDF控制位表示该数据帧是否为CAN-FD数据帧,BRS控制位表示该数据帧是否为位速率转换数据帧,长为4 bit的DLC控制位表示该数据帧的数据段长度。

    帧长度的区分
    前面提到了CAN-FD与经典CAN不同点之一是数据帧最大负载数据不同。数据长度码DLC的位宽为4,它具体表示为:当DLC的数值为0-8时,CAN和CAN-FD数据帧有0-8个字节的数据;当DLC的数值为9-15时,CAN数据帧都是8个字节的数据,CAN-FD数据帧则有12 / 16 / 20 / 24 / 32 / 48 / 64个字节的数据。

    位速率的区分
    CAN-FD与经典CAN另一不同点是CAN-FD数据帧有更高的位速率,这一点体现在图二的第二和第三个数据帧结构图上,第三个数据帧的位速率是第二个数据帧的2倍。在控制段的BRS控制位和它之前的所有位,以及ACK段的ACK位和它之后的所有位,它们的最高位速率为1Mbps。如果BRS控制位为1,表示该数据帧从ESI位开始到ACKD位结束,它们转换为更高的位速率。如果BRS控制位为0,则表示整个数据帧都以相同位速率传输。

    CRC校验的区分
    此外,CAN-FD与经典CAN在CRC段的不同,主要体现在经典CAN数据帧的数据循环冗余校验都是用CRC-15。而CAN-FD数据帧,当数据小于等于16个字节时,使用CRC-17;当数据大于16个字节时,则使用更长的CRC-21。这样,CAN-FD数据帧的数据具有更高的安全性。


    —————— 在LPC54018上使用CAN-FD ——————

    在LPC54018上使用CAN-FD来传输数据,它主要分这几个步骤:设置CAN功能模块的时钟,初始化CAN控制器,设置接收FIFO或发送Buffer,设置CAN控制器工作模式,最后收或发CAN-FD数据。小编在本文里主要介绍初始化CAN控制器的CAN-FD位速率设置和CAN收发器延迟补偿机制。

    CAN-FD位速率设置

    根据CAN规范的定义,由发送单元在非同步的情况下,发送的每秒钟的位数称为位速率。1个位可分为4段。这些段分别为:
    - 同步段(SYNC_SEG)
    - 传播时间段(PROP_SEG)
    - 相位缓冲段1(PHASE_SEG1)
    - 相位缓冲段2(PHASE_SEG2)
    一个位的构成如图三所示。

    13.jpg
      图三  

    这些段又由称为时间量子Tq(Time Quanta)的最小时间单位构成。
    1个位分为4个段,每个段又由若干个Tq 构成,这就称为位时序。假如1个位时序中,同步段为1个Tq,传播时间段为1个Tq,相位缓冲段1为4个Tq,相位缓冲段2为4个Tq,那这个位的位时序构成如图四所示。

    14.jpg
      图四  

    假如CAN模块的时钟为60MHz,那如何设置仲裁段的位速率为1Mbps和数据段的位速率为5Mbps呢?仲裁段的位速率设置跟CAN模块的NBTP(Nominal bit timing and prescaler)寄存器相关,而数据段的位速率设置则跟DBTP(Data bit timing and prescaler)寄存器相关。

    NBTP寄存器主要有NBRP(Nominal bit rate prescaler)、NTSEG1(Norminal time segment before sample point)和NTSEG2(Norminal time segment after sample point)这些位域。

    NBRP是分频系数,用它对CAN时钟分频后得到位时序的Tq,Tq=(NBRP + 1)/CAN时钟。NTSEG1对应位时序的传播时间段和相位缓冲段1,有(NTSEG1 + 1)=(传播时间段 + 相位缓冲段1)。而NTSEG2对应位时序的相位缓冲段2,则有(NTSEG2 + 1)= 相位缓冲段2。

    要设置仲裁段的位速率为1Mbps,则可以设置NBRP为2,NTSEG1为13,NTSEG2为4。那Tq=(2+1)/(60Mhz)=1/20us,1个比特位的时间=[1 + (NTSEG1 + 1) + (NTSEG2 + 1)] * Tq=[1 + (13 + 1) + (4 + 1)] * 1/20us=1us。它的位速率为1/(1us)=1Mbps。当然,其它的NBRP、NTSEG1和NTSEG2组合也可以设置1Mbps的位速率。

    同样的,DBTP寄存器主要有DBRP、DTSEG1和DTSEG2位域。要设置5Mbps的位速率,则可以设置DBRP为0,DTSEG1为7,DTSEG2为2。那Tq=(0 + 1)/(60Mhz)=1/60us,1个比特位的时间=[1 + (DTSEG1 + 1) + (DTSEG2 + 1)] * Tq=[1 + (7 + 1) + (2 + 1)] * 1/60us=1/5us。它的位速率为1/(1/5us)=5Mbps。

    到这里,小编就原理性地介绍完了CAN-FD仲裁段和数据段位速率的设置。

    CAN收发器延迟补偿机制

    要在LPC54018上使用CAN-FD功能,我们还需要避免数据段的位错误问题。
    CAN规范中对位错误的定义为:CAN控制器比较输出电平和总线电平,当两电平不一样时所检测到的错误。
    整个位错误检测的信号回路是这样:
    首先信号从CAN控制器的Tx发出
    然后经过CAN收发器转换为差分信号送到总线上
    而该CAN收发器实时地接收总线的差分信号,并把它转换回数字信号再送到CAN控制器的Rx。
    这个信号回路的时间就是CAN收发器的延迟时间,它的多少主要取决于每个CAN收发器本身的一些特性。
    以NXP的TJA1059芯片为例,如图五所示,大概得到隐性电平的延迟时间=td(TXD - busdom) + td(busdom - RXD)=65ns + 60ns=125ns,显性电平的延迟时间= td(TXD - busrec) + td(busrec - RXD)=90ns + 65ns=155ns,取的是典型值。

    21.jpg
      图五  

    通常情况下,CAN控制器在每1位数据的相位缓冲段1结束时采样Rx电平,如图六和图七所示。我们接下来看看CAN收发器传输延迟是如何产生位错误的。

    22.jpg
      图六  

    23.jpg
      图七  

    如果Transmitter Delay Time < (Sync-Seg + Prop-Seg + Phase Buffer Seg.1),则不会因为传输延迟而产生位错误。

    例如设置DBRP=0,DTSEG1=9,DTSEG2=3,得到数据段位速率为4Mbps,Tq=1/60us,并且每1位数据的采样点时间为[1 + (DTSEG1 + 1)] * Tq=11*Tq=183ns,而TJA1059的典型延迟时间155ns(取显性电平)比采样点时间小,不会导致位错误产生。

    如果Transmitter Delay Time > (Sync-Seg + Prop-Seg + Phase Buffer Seg.1),则传输延迟会导致位错误产生。

    例如设置DBRP=0,DTSEG1=7,DTSEG2=2,得到数据段位速率为5Mbps,Tq=1/60us,并且每1位数据的采样点时间为[1 + (DTSEG1 + 1)] * Tq=9*Tq=150ns,而TJA1059的典型延迟时间155ns(取显性电平)比采用点时间大,会导致位错误产生。

    针对上述位错误问题,LPC54018的CAN控制器使用延迟补偿机制来解决。如图七所示,在数据段里,CAN控制器通过一定的方法检测到延迟时间(Transmitter Delay Time),然后再经过延迟补偿偏置(Transmitter Delay Compensation Offset),得到Second Sample Point,并在该采样点对Rx电平采样并与该位的Tx电平比较。

    而采样点就在Rx的(Sync-Seg + Prog-Seg + Phase Buffer Seg.1 + Phase Buffer Seg.2) / 2时间点上。这样,Rx采样到的电平就与该位Tx的电平一致。
    用户可以在设置数据段位速率时,使能延迟补偿机制并配置延迟补偿偏置。LPC54018使能CAN延迟补偿机制功能需要设置DBTP寄存器的TDC位为1,而延迟补偿偏置则需要设置TDCR寄存器的TDCO位。通常设置TDCO=[1 + (DTSEG1 + 1) + (DTSEG2 + 1)]/2。

    到这里,小编就介绍完了LPC54018 CAN-FD几个关键点,希望这会对用户理解和使用CAN-FD有些帮助。


    文章出处:恩智浦MCU加油站

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92609
    最后登录
    2024-4-9
    发表于 2019-4-30 16:08:44 | 显示全部楼层
    不错支持一下~~~
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27

    主题

    111

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    449
    最后登录
    2024-3-29
    发表于 2021-1-15 15:08:31 | 显示全部楼层
    看着就好复杂
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 18:38 , Processed in 0.138155 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表