作者:Wilson sun、Eric Zhao
标题:如何拓展实现Aurix TC4X Routing CRE and DRE功能
摘要:基于RX Host buffer X实现MCU主动发送ACF-CAN消息和Loopback方式实现实现接收ETH TO CAN数据。
正文:
在汽车日益发展的过程中,客户对更多功能的需求越多,因此需要更复杂的电子设备,从而不同网络信息的电子控制单元(ECU)数量也在不断增加。
我们可以通过车载网络架构的演变看出端倪,一开始的各个车身控制、智能驾驶、中央网关、域控制器等架构。现在又趋于跨域通信,因此在通信的吞吐量方面变得越来越重要,但在安全性和延迟方面的限制越来越多。
在此背景下,不同接口和协议之间的延迟和尽量不占用主核的算力资源来实现车上各个功能域的互联显得尤为关键。为了满足这些要求,需要专用的硬件机制。
Infineon新一代的Aurix TC4X系列支持硬件路由功能。本文将以TC4D9 COM为例,提出了一种CRE可以直接写RX Host Buffer 1,软件触发DRE,实现MCU发送数据,利用ACF-CAN Assembler打包成1722格式发送至GETH。
CRE Routing Engine(CRE)介绍
CRE是CAN Module(MCMCAN)拓展用于路由CAN帧,可以实现硬件加速CAN TO CAN路由在同一个MCMCAN模块内、可以协助Data Routing Engine(DRE)执行硬件加速,例如CAN TO CAN路由在不同的MCMCAN Modules, CAN TO Ethernet (封装在IEEE 1722 ACF帧),CAN TO MEMORY(可用户定义)。因此可以硬件路由的优势在于可以实现自动信息传输(路由)之间的亮哥哥独立的CAN总线没有CPU的干预。

图表 1 CAN 路由功能概述
基于RX Host buffer X实现MCU主动发送ACF-CAN消息
实现功能:CRE可以直接写RX Host Buffer 1,软件触发DRE,实现MCU发送数据,利用ACF-CAN Assembler打包成1722格式发送至GETH。
实现原理:原本CRE只能由接收FIFO触发,现在通过Overwrite RX Host Buffer x实现MCU主动发送ACF-CAN消息。
实现框图:

图表 2 MCU Write Rx Host Buffer
实现例子:配置消息ID,size, extended ID flag, BRS, FDF标志位, source ID以及 destation ID
void CanCre_WriteRxHostMsg(void)
{
RxHostMsgConfig Msg;
Msg.ID = 0x01;
Msg.FDF = 1;
Msg.BRS = TRUE;
Msg.extendedIdFlag = FALSE;
Msg.rounter.mode = Rounter_Mode_Unicast;
Msg.rounter.srcID = IfxCan_DestinationId_Can0_Node0;
Msg.rounter.destID0 = IfxCan_DestinationId_Ethernet1;
Msg.DLC = IfxCan_DataLengthToDLC(64);
for (uint32 i = 0; i < 64; i++)
{
Msg.Data[i] = i;
}
CanCre_WriteRxHostBuffer(&canNode00, &Msg);
}
Module Internal loop-back mode介绍
MCMCAN模块提供了一个内部回路模式,使用MCMCAN模块的系统内测试以及CAN驱动软件的开发无需访问外部CAN总线。Loopback功能由内部CAN总线(MCMCAN模块内)和每个CAN节点的总线选择开关组成,使用改开关,每个CAN节点既可以连接到内部CAN总线(Internal loopback mode)也可以连接到外部CAN总线,分别发送和接收引脚(正常操作)。当前未选择的CAN总线是隐性驱动;这意味着发送引脚保持在1,而处于环回模式的CAN节点忽略接收引脚。通过设置节点x端口控制寄存器位Ni PORTCTRL (i0-3). lbm, CAN节点x选择内部环回模式。所有处于环回模式的CAN节点可以通过内部CAN总线一起通信,而不会影响其他未处于环回模式的CAN节点的正常运行。
基于Loopback方式实现实现接收ETH TO CAN数据
实现功能:DRE ETH TO CAN 硬件直接转发出去,但本地无法获取CAN数据,但在CAN TEST mode下的loopback ,CAN00 实现自发自收,同时CAN RX数据可以通过DRE->ETH 发送ETH, 相反路径下,ETH-CAN->Loopback->CAN RX interrupt。这样可以实现本地可以接收到CAN数据。
实现原理:CAN TEST模式,这个模式主要用于开发阶段的软件测试,不需要外挂CAN节点,此模式可以支持自发自收,也支持内部和外部模式,但是不会Module内部传播,仅支持节点自身发送接收。
实现框图:

图表 3 Pin control In Loop back modes
实现例子:
void IfxCan_EnableTestLoopBackMode(IfxCan_Can_Node node, boolean enable
{
/ Configure internal loop back mode */
IfxCan_Node_enableConfigurationChange(node->node);
node->node->CCCR.B.TEST = 1;
node->node->CCCR.B.MON = 1;
node->node->TEST.B.LBCK = enable ? 1 : 0;
IfxCan_Node_disableConfigurationChange(node->node);
}
My infineon account Link:https://community.infineon.com/t5/博客/如何拓展实现Aurix-TC4X-Routing-CRE-and-DRE功能/bc-p/1126875#M84455