打印
[通用 MCU]

英飞凌TC3xx_MCMCAN(二)

[复制链接]
954|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-6-13 13:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
     通过英飞凌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。

        过滤具体流程如下:



判断有效帧的ID是标准帧(11 bit)还是扩展帧(29 bit),根据ID的长度走两条不同的路径;
判断是否为远程帧,如果是远程帧,就需要根据全局寄存器CFG.RRFS/RRFE的配置进行选择;如果选择Reject,那么直接丢弃;否则还是回到过滤主线中。如果不是远程帧就简单了,继续过滤。如何判断远程帧呢?首先RTR位要为隐性,其次远程帧没有数据段;
判断RX filter list是否使能,这要看寄存器SIDFC/EIDFC.LSS是否配置了大小,如下:



如果没有配置即LSS = 0,则直接通关,进入步骤5;否则进入 步骤4
根据StdMsg_s0、ExtMsg_F0、RxMsg_R0/1的相关配置,如果有满足条件的ID,则会根据SFEC\EFEC的配置选择丢弃、存储或者设置优先级等,进入步骤6;如下



如果没有匹配的,则进入步骤5;
根据GFC.ANFS的配置,如果该bit使能,则丢弃该帧报文;否则进入步骤6
判断是否选择存到FIFO以及当前所需FIFO是否已满了,如果没有存满则直接存入到FIFO中。
如何存储到指定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 接收初始化
        前面波特率等一些配置和发送差不多,接收初始化特别的配置如下:



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/djkeyzx/article/details/130110911

使用特权

评论回复
沙发
suncat0504| | 2024-6-14 08:50 | 只看该作者
很详细,谢谢分享知识!学习,留下脚印。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1923

主题

15596

帖子

11

粉丝