CAN Message RAM

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
gotthard
Level 1
Level 1
10 sign-ins 5 questions asked 5 sign-ins

Hello,

I am trying to set up 3 CAN nodes on the Aurix Infineon TC375 but I am quite confused with the message RAM when using iLLD. Idea is to use message buffers, not FIFO. When I used one or two nodes, everything was fine but now when I added the 3rd one, messages are messed up completely. I see some ID's that are not existing, the data is different and so on. So, my question is how to set up message RAM properly or is there are a document that explains this?

I have following:

node0: IfxCan_NodeId_0;
nodeConfig.messageRAM.standardFilterListStartAddress = 0x100;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x400;
nodeConfig.messageRAM.baseAddress = (uint32_t) 0xF0200000;

nodeConfig.txConfig.dedicatedTxBuffersNumber = 4;
nodeConfig.frame.mode = IfxCan_FrameMode_fdLong;
nodeConfig.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_64;
nodeConfig.rxConfig.rxBufferDataFieldSize = IfxCan_DataFieldSize_64;
nodeConfig.filterConfig.standardListSize = 3;

node1: IfxCan_NodeId_1;

nodeConfig.messageRAM.standardFilterListStartAddress = 0x100;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x600;
nodeConfig.messageRAM.baseAddress = (uint32_t) 0xF0200000 + 0x1000;

nodeConfig.frame.mode = IfxCan_FrameMode_fdLong;
nodeConfig.txConfig.dedicatedTxBuffersNumber = 3;
nodeConfig.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_64;
nodeConfig.rxConfig.rxBufferDataFieldSize = IfxCan_DataFieldSize_64;
nodeConfig.filterConfig.standardListSize = 5;

node2: IfxCan_NodeId_2;
nodeConfig.messageRAM.standardFilterListStartAddress = 0x100;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x400;
nodeConfig.messageRAM.baseAddress = (uint32_t) 0xF0200000 + 0x2000;

nodeConfig.txConfig.dedicatedTxBuffersNumber = 5;
nodeConfig.frame.mode = IfxCan_FrameMode_standard;

nodeConfig.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_8;
nodeConfig.rxConfig.rxBufferDataFieldSize = IfxCan_DataFieldSize_8;

nodeConfig.filterConfig.standardListSize = 10;

they are all set as transmitAndReceive nodes. What I see now is that message from one node is having different ID and it is extended instead of standard and the data is messed up. If I change a little bit messageRAM on one node, then it might work for some messages but the others are messed up. Just random things.

Am I setting the message RAM correctly? Do I have to calculate manually how many buffers I am going to use and then set up RAM accordingly?

Thank you in advance.

Greetings

0 Likes
1 Solution
Di_W
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 250 solutions authored

 

        .messageRAM                                  = {
            .baseAddress                    = (uint32)&MODULE_CAN0,
            .standardFilterListStartAddress = 0x0,
            .extendedFilterListStartAddress = 0x80,
            .rxFifo0StartAddress            = 0x100,
            .rxFifo1StartAddress            = 0x200,
            .rxBuffersStartAddress          = 0x300,
            .txEventFifoStartAddress        = 0x400,
            .txBuffersStartAddress          = 0x440
        },

 

 

 

//in case when all 3 nodes are located to one module
//node0: IfxCan_NodeId_0;
nodeConfig.messageRAM.standardFilterListStartAddress = 0x100;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x400;
nodeConfig.messageRAM.baseAddress = (uint32_t) 0xF0200000;
//node1: IfxCan_NodeId_1;
nodeConfig.messageRAM.standardFilterListStartAddress = 0x100+offset;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200+offset;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x400+offset;

//with offset =0x2000, for example.

 

 

 

View solution in original post

0 Likes
4 Replies
Di_W
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 250 solutions authored
        .messageRAM                                  = {
            .baseAddress                    = (uint32)&MODULE_CAN0,
            .standardFilterListStartAddress = 0x0,
            .extendedFilterListStartAddress = 0x80,
            .rxFifo0StartAddress            = 0x100,
            .rxFifo1StartAddress            = 0x200,
            .rxBuffersStartAddress          = 0x300,
            .txEventFifoStartAddress        = 0x400,
            .txBuffersStartAddress          = 0x440
        },

 

        .txConfig                                    = {
            .txMode                   = IfxCan_TxMode_dedicatedBuffers,
            .dedicatedTxBuffersNumber = 2,
            .txFifoQueueSize          = 0,
            .txBufferDataFieldSize    = IfxCan_DataFieldSize_8,
            .txEventFifoSize          = 0

 

Hi, above is demo code definition fyi. Could you try decrease the dedicated tx buffers number to 2?

dw

0 Likes
gotthard
Level 1
Level 1
10 sign-ins 5 questions asked 5 sign-ins

I did try it like that, and  it works for one node. I have 3 nodes but I am testing with 2 nodes, it is easier for now. I set up one node like you and second one with base address + 0x2000 but I also tried without any offset, same like the first node. In both cases I am not receiving any messages. Transmit works fine but message is not received. 

What would be the configuration of messageRAM for 2 CAN nodes that are both having 3 dedicated buffers for transmit messages and I want to receive 3 messages on each node?

Thanks

 

 

0 Likes
Di_W
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 250 solutions authored

Hi gothard,  

Please refer to AP32363_MCMCAN_GettingStarted_v2.2 for related infomation.

The demo code will be informed you once I have.

https://myicp.infineon.com/sites/microcontrollers-aurix_customer_doc/Lists/defaultdoclib/AURIX%20TC3...

 

Regards,

dw

0 Likes
Di_W
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 250 solutions authored

 

        .messageRAM                                  = {
            .baseAddress                    = (uint32)&MODULE_CAN0,
            .standardFilterListStartAddress = 0x0,
            .extendedFilterListStartAddress = 0x80,
            .rxFifo0StartAddress            = 0x100,
            .rxFifo1StartAddress            = 0x200,
            .rxBuffersStartAddress          = 0x300,
            .txEventFifoStartAddress        = 0x400,
            .txBuffersStartAddress          = 0x440
        },

 

 

 

//in case when all 3 nodes are located to one module
//node0: IfxCan_NodeId_0;
nodeConfig.messageRAM.standardFilterListStartAddress = 0x100;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x400;
nodeConfig.messageRAM.baseAddress = (uint32_t) 0xF0200000;
//node1: IfxCan_NodeId_1;
nodeConfig.messageRAM.standardFilterListStartAddress = 0x100+offset;
nodeConfig.messageRAM.txBuffersStartAddress = 0x200+offset;
nodeConfig.messageRAM.rxBuffersStartAddress = 0x400+offset;

//with offset =0x2000, for example.

 

 

 

0 Likes