Hi,
Pls refer to the section 41.8.44 Message RAM base address register in UM11295.pdf.
The CAN message buffer requires that the low boundary address must be 0x1_0000, in other words, it is a 64KB block, but obviously, the CAN message does not need 64KB size.
In SDK, the line is used to allocate space for the CAN message buffer
#define CAN_MRBA_BA_SHIFT (16U)
SDK_ALIGN(uint8_t msgRam[MSG_RAM_SIZE], 1U << CAN_MRBA_BA_SHIFT) = {1U};
so the compiler will allocate 64KB space from 0xxxxx_0000 address boundary.
I also pasted the memory map of LPC551x, I think you can use the SRAM_0 as CAN message buiffer, which ranges from 0x2000_0000 0x2000_7FFF, but you do not allocate any variable to SRAM0 in *ld file.
In this way, you can use
CAN0->MRBA=0x2000_0000
it is okay. For the 32KB space, you can use pointer to access the remaining space except for the CAN message buffer.
Hope it can help you

