The pdf link: https://can-newsletter.org/uploads/media/raw/f6a36d1461371a2f86ef0011a513712c.pdf > -----Original Message----- > From: Pankaj Bansal > Sent: Wednesday, August 29, 2018 11:08 AM > To: 'Marc Kleine-Budde' <mkl@xxxxxxxxxxxxxx>; 'linux-can@xxxxxxxxxxxxxxx' > <linux-can@xxxxxxxxxxxxxxx>; 'Oliver Hartkopp' <socketcan@xxxxxxxxxxxx> > Cc: Varun Sethi <V.Sethi@xxxxxxx> > Subject: CAN FD bit timings recommendations > > Hi Marc/Oliver, > > I am getting a problem in flexcan driver when I use data bitrate of 8 MBPS > in FD mode. > I am getting Transmit Errors for fast bits. The can clock that I am using is > 175 MHz. The arbitration phase bitrate is 1 MBPS. > This error is not occurring when I use data bitrate of 5 MBPS. > I was checking the flexcan timings in error case, and I see that the bit rate > prescaler (brp) value for arbitration phase and data phase is different. > bt->brp = 4, data_bt->brp = 1. > > The flexcan driver receives these timings after calculations done in > https://elixir.bootlin.com/linux/latest/source/drivers/net/can/dev.c#L125 > It seems that this function calculates the brp just based on bitrate and It > doesn't enforce that brp should be same for both arbitration and data > phase. > > This is in contrast to the bit timings recommendations for FD mode on CiA > website. (18-1_p28_recommendation_for_the_canfd_bit- > timing_holger_zeltwanger_cia.pdf) > Recommendation 2: Set the BRPA bit-rate prescaler equal BRPB This leads > to identical tq values in both phases. > This prevents that during bit-rate switching inside the CAN FD data frame > an existing quantization error can transform into a phase error. > > Can you please look into this problem? The bittimings_const values are > these > > // Arbitration phase > static const struct can_bittiming_const extended_flexcan_bittiming_const = > { > .name = DRV_NAME, > .tseg1_min = 2, > .tseg1_max = 96, > .tseg2_min = 2, > .tseg2_max = 32, > .sjw_max = 16, > .brp_min = 1, > .brp_max = 1024, > .brp_inc = 1, > }; > > // Data phase > static const struct can_bittiming_const flexcan_data_bittiming_const = { > .name = DRV_NAME, > .tseg1_min = 2, > .tseg1_max = 39, > .tseg2_min = 2, > .tseg2_max = 8, > .sjw_max = 4, > .brp_min = 1, > .brp_max = 1024, > .brp_inc = 1, > }; > > Regards, > Pankaj Bansal