Skip to content

Commit dcf379c

Browse files
william-tang914Hardevsinh-Palaniya
authored andcommitted
drivers: can: mcux: flexcan: fix loop back error when CAN FD enabled
Fix mcux flexcan driver failed to transfer when both loop back mode and CAN FD mode are enabled. Transceiver Delay Compensation feature must be disabled in loopback mode. For some platforms, both FDCTRL[TDCEN] and ETDC[ETDCEN] can enable such feature. In this case, SDK API only configure ETDC register and current driver do not clear ETDC[ETDCEN]. Fix this issue by add ETDC[ETDCEN] configuration according to SDK macro `FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG` vaule. Test this commit on mimxrt1180_evk/mimxrt1189/cm33 and set both CAN FD mode and loop back mode. Signed-off-by: William Tang <[email protected]>
1 parent feabb3e commit dcf379c

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

drivers/can/can_mcux_flexcan.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,9 +482,19 @@ static int mcux_flexcan_set_mode(const struct device *dev, can_mode_t mode)
482482

483483
/* Transceiver Delay Compensation must be disabled in loopback mode */
484484
if ((mode & CAN_MODE_LOOPBACK) != 0) {
485+
#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && \
486+
FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG)
487+
base->ETDC &= ~(CAN_ETDC_ETDCEN_MASK);
488+
#else
485489
base->FDCTRL &= ~(CAN_FDCTRL_TDCEN_MASK);
490+
#endif
486491
} else {
492+
#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && \
493+
FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG)
494+
base->ETDC |= CAN_ETDC_ETDCEN_MASK;
495+
#else
487496
base->FDCTRL |= CAN_FDCTRL_TDCEN_MASK;
497+
#endif
488498
}
489499
} else {
490500
/* Disable CAN FD mode */

0 commit comments

Comments
 (0)