Code:
#include <FlexCAN_T4.h>
FlexCAN_T4FD<CAN3, RX_SIZE_128, TX_SIZE_128> FD;
void setup(void) {
FD.begin();
CANFD_timings_t config;
config.clock = CLK_24MHz;
config.baudrate = 1000000;
config.baudrateFD = 2000000;
config.propdelay = 190;
config.bus_length = 1;
config.sample = 70;
FD.setRegions(64);
FD.setBaudRate(config);
FD.onReceive(canSniff);
FD.enableMBInterrupts();
FD.mailboxStatus();
}
void canSniff(const CANFD_message_t &msg) {
Serial.print("MB "); Serial.print(msg.mb);
Serial.print(" OVERRUN: "); Serial.print(msg.flags.overrun);
Serial.print(" LEN: "); Serial.print(msg.len);
Serial.print(" EXT: "); Serial.print(msg.flags.extended);
Serial.print(" EDL: "); Serial.print(msg.edl );
Serial.print(" TS: "); Serial.print(msg.timestamp);
Serial.print(" ID: "); Serial.print(msg.id, HEX);
Serial.print(" Buffer: ");
for ( uint8_t i = 0; i < msg.len; i++ ) {
Serial.print(msg.buf[i], HEX); Serial.print(" ");
} Serial.println();
}
void loop() {
FD.events();
}
it's mostly the same as CAN2.0 layout.
for the sending part, just make sure you use CANFD_message_t
red shows the changes needed to use FD