打印
[通用 MCU]

英飞凌 TC3XX CAN Interface (MCMCAN) 模块

[复制链接]
1614|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-2-6 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN Interface (MCMCAN)
1.模块
有三个模块CAN0,CAN1,CAN2,一般只使用CAN0,CAN0的模块比较全面。

CAN0有4个CAN node,Message RAM 一共32Kbyte,FIFO,buffer,register在此处开辟。

每个node通过M_CAN来实现,并且都支持CAN FD;都有两个阴角,TXD和RXD

2.初始化
具体步骤

设置CCCRi.INIT开始初始化(软硬件复位或通过bus off)此时配置寄存器不会被改变

当该位被置起,即CCCRi.INIT (i=0-3) 置1,can总线之间的通信停止,CAN node停止收发,CAN总线输出TXD为隐性(高)。错误管理逻辑EML的计数器保持不变。

重置 CCCRi (i=0-3).INIT 完成软件初始化

只有当位CCCRi.INIT和CCCRy.CCE都设置为1时,才能启用对M_CAN配置寄存器的访问

CCCRi.CCE只有在CCCRi.INIT='1’时才能被set/reset。

当CCCRi.INIT被清除时,CCCRi.CCE自动复位。

3. 时钟控制单元
MCMCAN模块时钟输入连接到时钟控制单元(CCU)。并且MCMCAN有两种时钟源,fsyn用于寄存器和RAM接口,fasyn用在CAN FD上。CLC设置为全局模块寄存器提供其时钟。

为了向M_CAN节点提供相应的时钟,必须设置MCR.CLKSELi寄存器。异步时钟以及每个M_CAN节点的同步时钟可以通过MCR.CLKSELi寄存器位字段打开/关闭。

4. 中断
每个module都有16个中断线INT_O0~INT_O15

中断分组已经设置,存在16个中断节点。中断组可以通过GRINT1i(i=0-3),**GRINT2i (i=0-3)**自由分配给节点

中断脉冲的生成是基于 寄存器 (IRi (i=0-3) TTIR0) 和 (**IEi (i=0-3)**and TTIE0),中断标志和中断使能之间的关系是&。中断flag会通过向 CANn_IRi bit.写‘1’进行reset。

如果相应中断使能寄存器中的相关中断使能位使能(IEi(i=0-3)、NTRTRi(i=0-2)、TEIE和TTIE0),MCMCAN 模块里16条中断输出线INT_On的其中一条使用GRINT1i (i=0-3) 和 GRINT2i (i=0-3)可以产生中断脉冲。

也就是说通过配置interrupt line选择对应的SRC节点(line和SRC_INT一一对应)配置CAN中断

       Ifx_SRC_SRCR                        INT[16];               
} Ifx_SRC_CAN_CAN;
1
2
volatile Ifx_SRC_SRCR *IfxCan_getSrcPointer(Ifx_CAN *can, IfxCan_InterruptLine interruptLine)
{
    IfxCan_Index           canIndex                              = IfxCan_getIndex(can);
    Ifx_SRC_CAN_CAN *const srcCanBaseAddress[IFXCAN_NUM_MODULES] = {
        &MODULE_SRC.CAN.CAN[0],
        &MODULE_SRC.CAN.CAN[1],
    };
    return &(srcCanBaseAddress[canIndex]->INT[interruptLine]);
}




5. CAN FD
区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同

CCCRi.FDOE (i=0-3) 是收发CAN FD frame功能启用位

时间延迟补偿:为了实现比发射机延迟更短的数据相位比特时间,引入了延迟补偿。在没有变送器延迟补偿的情况下,CAN FD帧的数据阶段的比特率受到变送器延迟的限制

CAN收发器的信号从TX出发到总线到RX有时延。CAN FD速率可变,BRS位进行控制,波特率更高

6. CAN node的收发
接受到的Rx Frame以Rx buffer的形式存放在Message RAM,最多存放64个

首地址通过寄存器进行配置

\#define SMCMCAN0_RXBC0_INIT ( 0x00000000UL )

typedef volatile struct _Ifx_CAN_N_RX
{
       Ifx_CAN_N_RX_F0C                    F0C;                  
       Ifx_CAN_N_RX_F0S                    F0S;                  
       Ifx_CAN_N_RX_F0A                    F0A;                  
       Ifx_CAN_N_RX_BC                     BC;                     
       Ifx_CAN_N_RX_F1C                    F1C;                    
       Ifx_CAN_N_RX_F1S                    F1S;                    
       Ifx_CAN_N_RX_F1A                    F1A;                    
       Ifx_CAN_N_RX_ESC                    ESC;                    
} Ifx_CAN_N_RX;


单个Rx Buffer进行管理时,每个Rx Buffer称为Dedicated Rx Buffer,当写入数据后就会被锁住,不会再从CAN总线上写入新数据,直到CPU访问完后解锁

多个连续的Rx Buffer 可以组成Rx FIFO进行管理,一个CAN Node可以设置2个Rx FIFO,FIFO0和FIFO1.同样首地址通过寄存器进行配置。FIFO是一种先进先出的数据缓存区域。

在节点的初始化过程中

①对于Tx,

(1)首先设置buffer大小

(2)判断config->txConfig.txMode的类型是FIFO还是QUEUE设置为对应的模式并且设置其buffers的大小

(3)在所选中的buffer使能中断

​ ②对于Rx,主要是设置其Rx buffer 的数据长度和Message RAM的起始地址,然后设置Rx FIFO的数据长度,Message RAM的起始地址,大小,操作模式和watermark level

对于FIFO,可容纳的元素数量称为Deepth,每个元素大小为Size,进入full状态后写入会溢出,所以要设置水线(Watermark),Watermark<Deepth,当已被读取的Element达到Watermark时降低读取速度或者提高写入速度
读写指针:总指向下一个要读取/当前要被读出的单元。

读空:当读写指针相同时,表示FIFO为空, 复位操作时 或者当读指针读出FIFO中最后一个字 后,追赶上写指针时,此时读空信号有效

写满:当读写指针再次相等时,表明FIFO为满,这种情况发生在,当写指针转了一圈折回来(wrapped around)又追上了读指针

7. Message RAM
CAN0 起始地址:0xF0200000

CAN1起始地址:0xF0210000

CAN Node会将准备发送的Tx Frame以Tx Buffer的形式存放在Message RAM中,最多可以存放32个Tx Buffer数据

8. 工作模式
Restricted Operation Mode 固定工作模式

模式进入:处理器无法从消息RAM读取数据

模式退出:host CPU重置CCCRi.ASM位

在固定工作模式下,节点能够接收数据和远程帧,并对有效帧进行确认,但不发送数据帧、远程帧、活动错误帧或过载帧。出现错误或者过载情况等待总线空闲,然后同步CAN通信,

Bus Monitoring Mode 总线监控模式

模式进入:CCCRi.MON置1,或者error level S3,即(TTOST0.EL = “11”)

在总线监控模式下,点能够接收数据和远程帧,但是不启动传输,可以分析CAN总线上信号量

Power Down (Sleep Mode) 睡眠模式

模式进入:输入时钟信号或者控制寄存器

具体过程:时钟停止请求信号active,CCCRi.CSR读取为1;

1.当所有pending的传输请求都已经完成,等待总线空闲状态。

2.然后M_CAN将CCCRi.INIT设置为1,以防止任何进一步的CAN传输;

3.通过将CCCRi(i=0-3).CSA设置为1来确认其已准备好Power Down。在这种状态下,在时钟被关闭之前,可以进行进一步的寄存器访问。对CCCRi.INIT写访问将无效。

4.时钟将被关闭

Test Modes 测试模式

测试模式应仅用于生产测试或自检。针脚TXD的软件控制会干扰所有CAN协议功能。不建议使用测试模式进行应用

3).CSA设置为1来确认其已准备好Power Down。在这种状态下,在时钟被关闭之前,可以进行进一步的寄存器访问。对CCCRi.INIT写访问将无效。

4.时钟将被关闭

Test Modes 测试模式

测试模式应仅用于生产测试或自检。针脚TXD的软件控制会干扰所有CAN协议功能。不建议使用测试模式进行应用
————————————————

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

原文链接:https://blog.csdn.net/weixin_43925467/article/details/131662447

使用特权

评论回复
沙发
Charlene沙| | 2024-3-1 16:08 | 只看该作者
英飞凌(Infineon)的TC3XX系列芯片集成了MCMCAN(Multi-Channel Memory Controller Area Network)模块,用于处理CAN(Controller Area Network)接口通信

使用特权

评论回复
板凳
Estelle1999| | 2024-3-1 17:10 | 只看该作者
MCMCAN模块提供了多个CAN通道,支持高速CAN通信,并具有丰富的功能和特性

使用特权

评论回复
地板
Belle1257| | 2024-3-1 18:15 | 只看该作者
模块通常支持多个CAN通道,可以同时处理多个CAN总线的通信

使用特权

评论回复
5
B1lanche| | 2024-3-1 19:19 | 只看该作者
支持高速CAN通信,适用于需要高速数据传输的应用场景

使用特权

评论回复
6
Alina艾| | 2024-3-1 20:24 | 只看该作者
MCMCAN模块通常具有丰富的过滤功能,可以根据ID、数据内容等条件过滤接收的数据帧,以满足不同的应用需求

使用特权

评论回复
7
Emily999| | 2024-3-1 21:32 | 只看该作者
支持CAN总线上的错误处理和诊断功能,包括错误帧的处理、错误状态的报告等

使用特权

评论回复
8
Candic12e| | 2024-3-1 22:37 | 只看该作者
一般来说,MCMCAN模块通常具有灵活的配置选项,可以根据具体的应用需求进行配置,包括波特率、工作模式、中断处理等

使用特权

评论回复
9
alxd| | 2024-3-2 08:12 | 只看该作者
针对低功耗应用场景,MCMCAN模块通常具有低功耗设计,以满足对功耗要求较高的应用

使用特权

评论回复
10
Betty1299| | 2024-3-2 09:22 | 只看该作者
我觉得就是这个模块比较好用罢了

使用特权

评论回复
11
Carina卡| | 2024-3-2 11:02 | 只看该作者
MCMCAN模块为TC3XX系列芯片提供了强大的CAN接口通信功能,适用于广泛的工业、汽车电子、通讯等领域的应用

使用特权

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

本版积分规则

1923

主题

15596

帖子

11

粉丝