Other Parts Discussed in Thread: TCAN4550
So, I'm in the progress of writing a custom TCAN4550 driver, and have run into a bit of an issue.
So-far, only regular CAN, no CAN-FD or extended identifiers.
Receiving data seems to work fine. ID, DLC and payload are all what I expect.
However, when transmitting, the frames that are received on the other end seems to be all zeroes?
ID, DLC and payload is all 0.
I can see that the packets go out (since the other end is actually receiving something), as well as seeing the bits getting set in the TXBTO (0x10D8) register.
I have a suspicion that something is wrong with how the MRAM is organized and I'm asking empty buffers to be transmitted, perhaps?
Relevant registers during setup:
MRAM 0x8000..0x8800 cleared to 0
TXBC = 0x20000000
TXESC = 0x0
TXEFC = 0x600 + (0 << 16) + (0 << 24)
Device is in "normal" mode, and rx works.
Sequence I use to transmit a message:
uint32_t buffer[4];
canID = 0x200;
rtr = 0;
dlc = 4;
buffer[0] = (canID << 18) + (rtr << 29);
buffer[1] = dlc << 16;
buffer[2] = 0xAA55BB66;
buffer[3] = 0xF00DCAFE; // Filler, as indicated in user-guide, section 4.2
uint32_t requestMask |= (1<<0); // Hardcoded to buffer #0 for now
I then write all 16 bytes to MRAM location 0x8000.
After that, I write "requestMask" to TXBAR.
Once done, the message goes out, but contains all zeroes.