Norbert,
I see the exact same behavior here (own hardware, LPC54606) !
If I use 0x20010000 as the base address it works, if I declare my own buffer for this it fails. Have you measure on the physical can bus with a scope ? I did also receive all 0's in my PCAN-View but when looking at the bus there were only some sync data sent so I think that PCAN does not quite understand this and shows it as a frame with all 0 in it.
When changing address to the same as the example in the SDK it magically works for me!
(and yes, all my SRAM blocks are powered up and enabled)
Edit, list of the tests I have made (some of the "Not ok" will allow one to send messages, but messages received will be received as all "0"):
My init code for CAN (for now its just mostly a copy of the sample...)
CLOCK_SetClkDiv(kCLOCK_DivCan0Clk, 1, true);
MCAN_GetDefaultConfig(&mcanConfig);
mcanConfig.baudRateA=125000;
MCAN_Init(CAN0, &mcanConfig, CLOCK_GetFreq(kCLOCK_MCAN0));
MCAN_TransferCreateHandle(CAN0, &mcanHandle, mcan_callback, NULL);
MCAN_SetMsgRAMBase(CAN0, (uint32_t)MCAN_Memory);
uint32_t *p=(uint32_t *)(MCAN_Memory);
memset(p, 0, TX_BUFFER_OFS + 0x10U);
rxFilter.address = STD_FILTER_OFS;
rxFilter.idFormat = kMCAN_FrameIDStandard;
rxFilter.listSize = 1U;
rxFilter.nmFrame = kMCAN_reject0;
rxFilter.remFrame = kMCAN_rejectFrame;
MCAN_SetFilterConfig(CAN0, &rxFilter);
stdFilter.sfec = kMCAN_storeinFifo0;
stdFilter.sft = kMCAN_classic;
stdFilter.sfid1 = rxIdentifier;
stdFilter.sfid2 = 0x7FFU;
MCAN_SetSTDFilterElement(CAN0, &rxFilter, &stdFilter, 0);
rxFifo0.address = RX_FIFO0_OFS;
rxFifo0.elementSize = 1U;
rxFifo0.watermark = 0;
rxFifo0.opmode = kMCAN_FifoBlocking;
rxFifo0.datafieldSize = kMCAN_8ByteDatafield;
MCAN_SetRxFifo0Config(CAN0, &rxFifo0);
txBuffer.address = TX_BUFFER_OFS;
txBuffer.dedicatedSize = 1U;
txBuffer.fqSize = 0;
txBuffer.datafieldSize = kMCAN_8ByteDatafield;
MCAN_SetTxBufferConfig(CAN0, &txBuffer);
MCAN_EnterNormalMode(CAN0);