英飞凌TC3xx_MCMCAN(二)

   目录

1.CAN FD实现

1.1 基本功能描述

1.2 CAN FD格式

 2.CAN ID 过滤处理流程

3.传输延迟补偿

4. 配置流程图

4.1 发送初始化

4.2 接收初始化 


        通过英飞凌TC3xx_MCMCAN(一)的简单介绍,我们大概对英飞凌CAN模块的发送接收的message ram、常见的FIFO\Buffer以及中断配置事项有了粗浅认识。接下来我们看看这个模块的其他功能。

1.CAN FD实现

1.1 基本功能描述

        MCMCAN支持CAN FD(CAN with Flexible Data rate),它的配置实现是集成在每个M_CAN节点中,具体如下:

  • CAN FD功能通过CCCR.FDOE\BRSE两个bit位进行使能
  • 通过寄存器NVTP来配置nominal bit timing配置
  • 通过寄存器DBTP来配置data bit timing和prescaler配置
  • 通过CCCR.NISO来选择支持 ISO CAN FD 和 no ISO CAN FD

        CANFD支持的内容包括:

  • 波特率切换(即数据域的高波特率)
    • Max.nominal bit rate = 1Mbps
    • Max.data bit rate = 5Mbps

        下图为CAN FD帧结构,波特率速率切换也是在帧内完成的。

        在仲裁段阶段,BRS之前,NBTP寄存器决定了Nominal Bit Timing和Prescaler;当BRS这一bit为隐性时, DBTP决定了数据段的bit timing,而这最大的数据段速率由异步时钟CAN clock确定,最高5Mbit/s(fcan = 20M/Hz,4 tq计算得来)

  • 更长的payload
    • Standard CAN :Max data bytes = 8
    • CAN FD mode :  Max data bytes = 64

1.2 CAN FD格式

        CAN FD的格式编码与标准CAN帧格式区别还是比较大。虽然两者都是用DLC(Data Length Code)来表示,但实际还是有差别,具体如下:

  • DLC 0-8 :含义与标准CAN帧格式相同,表示数据域长度0-8
  • DLC 9-15 :具体DLC编码和数据长度映射如下图:

 2.CAN ID 过滤处理流程

        M_CAN这个IP提供了两种过滤CAN ID的路径,如下:

  • 标准帧过滤器
  • 扩展帧过滤器

       过滤的方式有如下三种:

  • 范围过滤:NM帧最常见
  • 特定ID过滤:只接收某ID的NM报文
  • 经典位掩码过滤:即寄存器StdMsg_s0位域SF1ID = filter,SF2ID=mask

        经过过滤的报文可以根据寄存器配置分到到Dedicated RX buffer或者RX FIFO0/1。

        过滤具体流程如下:

  1.  判断有效帧的ID是标准帧(11 bit)还是扩展帧(29 bit),根据ID的长度走两条不同的路径;
  2. 判断是否为远程帧,如果是远程帧,就需要根据全局寄存器CFG.RRFS/RRFE的配置进行选择;如果选择Reject,那么直接丢弃;否则还是回到过滤主线中。如果不是远程帧就简单了,继续过滤。如何判断远程帧呢?首先RTR位要为隐性,其次远程帧没有数据段;
  3. 判断RX filter list是否使能,这要看寄存器SIDFC/EIDFC.LSS是否配置了大小,如下:如果没有配置即LSS = 0,则直接通关,进入步骤5;否则进入 步骤4
  4. 根据StdMsg_s0、ExtMsg_F0、RxMsg_R0/1的相关配置,如果有满足条件的ID,则会根据SFEC\EFEC的配置选择丢弃、存储或者设置优先级等,进入步骤6;如下如果没有匹配的,则进入步骤5;
  5. 根据GFC.ANFS的配置,如果该bit使能,则丢弃该帧报文;否则进入步骤6
  6. 判断是否选择存到FIFO以及当前所需FIFO是否已满了,如果没有存满则直接存入到FIFO中。
  7. 如何存储到指定RX buffer中呢?以标准帧为例,当寄存器StdMsg#i_s0.SFEC(i=0-127)配置为111时,根据SFID[5:0]中的配置决定了在RX Buffer的偏移地址;那么软件就可以通过对应的RX buffer去获取数据了,相关寄存器为CAN#i_RxMsg#n_R0/1/DB#i(i=0-63,n=0=63)

3.传输延迟补偿

        为什么要进行传输延迟补偿?

        这里主要还是新的ISO11898-1对于CAN FD协议的规定。

        当CAN controller通过引脚TX传输数据到CAN transceiver时,controller又通过RX接收到transceiver反馈回来的数据,如果检测到发送和接收到的bit数据不一致,就会产生错误帧(位错误);如果没有延迟补偿,那么导致发送和接收的数据错位了,因此引入延迟补偿,来避免此种错误。

        那么为了了解如何补偿,我们首先要理解CAN 的采样,如下图:

        1 bit时间有同步段+Seg1+Seg2,采样点(SP)通常都是在Seg1和2之间 ;

        TD是控制器和收发器的延迟时间,详见下图Transmitter Delay。在CANFD数据阶段的比特率为1Mbit/s或更高的情况下,TD可能大于物理比特时间。为了将发送的位值与接收的位电平进行比较,需要对TD进行补偿——所谓的发送延迟补偿TDC。CAN控制器测量TD并据此知道回读位的开始——所谓的辅助采样点Secondary Sample Point (SSP)。因此,从发送位的开始到回读位(SSP)的采样点的时间间隔为SSP = TD + SSP偏移。

        相关寄存器为:

  • DBTP.TDC 使能
  • TDCR.TDCO:TDC偏移,即rx第一个下降沿后面的采样点偏移
  • TDCR.TDCF:SSP最小的位置

4. 配置流程图

        最后,我们来看看发送、接收的初始化流程吧,这是根据英飞凌iLLD的工程demo整理出的流程图。

4.1 发送初始化

4.2 接收初始化 

        前面波特率等一些配置和发送差不多,接收初始化特别的配置如下:

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值