- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
.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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
.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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi gothard,
Please refer to AP32363_MCMCAN_GettingStarted_v2.2 for related infomation.
The demo code will be informed you once I have.
Regards,
dw
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
.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.