Hi marc, > -----Original Message----- > From: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > Sent: Friday, March 18, 2022 2:45 PM > To: Srinivas Neeli <sneeli@xxxxxxxxxx> > Cc: Srinivas Goud <sgoud@xxxxxxxxxx>; Naveen Kumar Gaddipati > <naveenku@xxxxxxxxxx>; Prasad Beer Prasad <prasadbe@xxxxxxxxxx>; linux- > can <linux-can@xxxxxxxxxxxxxxx>; Stefan Mätje <stefan.maetje@xxxxxx>; > Vincent MAILHOL <mailhol.vincent@xxxxxxxxxx> > Subject: Re: Queries on CAN frame work > > On 18.03.2022 06:55:56, Srinivas Neeli wrote: > > > I've updated the algorithm to prefer lower brp values. Can you check > > > if these values make sense to you? > > > > Thanks for update. > > Few more changes need to update in algorithm. > > 1) Choose SJW as large as possible (we can assign " tseg2") > > ACK - changes to SJW needs still to be done. Already we are assigning sjw = tseg2 in manual mode. Automatic we are assigning 1. https://elixir.bootlin.com/linux/latest/source/drivers/net/can/dev/bittiming.c#L158 > > > For CANFD CIA recommendations : > > Recommendation 1: > > Choose the highest available CAN clock frequency (20 MHz, 40 MHz, > > 80 MHz) Recommendation 2: > > Set the BRPA bit-rate pre-scaler equal BRPD Recommendation 3: > > Choose BRPA and BRPD as low as possible. > > Recommendation 4: > > Configure all CAN FD nodes to have the same arbitration phase > > Sample point (SP) and the same data phase SP Recommendation 5: > > Choose SJWD and SJWA as large as possible (best is the max > > possible value) Recommendation 6: > > Enable TDC when needed > > If we enable TDC feature ,please try to configure brp value 1 in > algorithm(TDC feature support brp 1/2 but observed good results with 1). > > > > > > | $ ./can-calc-bit-timing --alg=can-next xilinx_dwnstrm -c 79999999 > > > | Bit timing parameters for xilinx_dwnstrm with 79.999999 MHz ref > > > | clock (cmd- > > > line) using algo 'can-next' > > > | nominal real Bitrt nom real SampP > > > | Bitrate TQ[ns] PrS PhS1 PhS2 SJW BRP Bitrate Error SampP SampP > Error > > > | 1000000 12 29 30 20 1 1 999999 0.0% 75.0% 75.0% 0.0% > > > > Observed different BRP values for 1Mbps in here and below list for > > same sampling point. > > Yes. Seems I should update the table to clarify what they output. > > The 1st table uses the CAN-2.0 bit timing constants, the 2nd table is using > the CAN-FD data bit timing constants. > > > > | 800000 12 39 40 20 1 1 799999 0.0% 80.0% 80.0% 0.0% > > > | 666666 12 47 48 24 1 1 666666 0.0% 80.0% 80.0% 0.0% > > > | 500000 12 69 70 20 1 1 499999 0.0% 87.5% 87.5% 0.0% > > > | 250000 25 69 70 20 1 2 249999 0.0% 87.5% 87.5% 0.0% > > > | 125000 50 69 70 20 1 4 124999 0.0% 87.5% 87.5% 0.0% > > > | 100000 50 87 87 25 1 4 99999 0.0% 87.5% 87.5% 0.0% > > > | 83333 50 104 105 30 1 4 83333 0.0% 87.5% 87.5% 0.0% > > > | 50000 100 87 87 25 1 8 49999 0.0% 87.5% 87.5% 0.0% > > > | 33333 125 104 105 30 1 10 33333 0.0% 87.5% 87.5% 0.0% > > > | 20000 250 87 87 25 1 20 19999 0.0% 87.5% 87.5% 0.0% > > > | 10000 500 87 87 25 1 40 9999 0.0% 87.5% 87.5% 0.0% > > > | > > > | Bit timing parameters for xilinx_dwnstrm with 79.999999 MHz ref > > > | clock > > > (cmd-line) using algo 'can-next' > > > | nominal real Bitrt nom real SampP > > > | Bitrate TQ[ns] PrS PhS1 PhS2 SJW BRP Bitrate Error SampP SampP > Error > > > | 12000000 12 2 2 2 1 1 11428571 4.8% 75.0% 71.4% 4.8% > > > | 10000000 12 2 3 2 1 1 9999999 0.0% 75.0% 75.0% 0.0% > > > | 8000000 12 3 3 3 1 1 7999999 0.0% 75.0% 70.0% 6.7% > > > | 5000000 12 5 6 4 1 1 4999999 0.0% 75.0% 75.0% 0.0% > > > | 4000000 12 7 7 5 1 1 3999999 0.0% 75.0% 75.0% 0.0% > > > | 2000000 12 14 15 10 1 1 1999999 0.0% 75.0% 75.0% 0.0% > > > | 1000000 25 14 15 10 1 2 999999 0.0% 75.0% 75.0% 0.0% > > > > Here brp =2 and in above list brp =1. > > According to the "ip" command's output, these are you timing parameters: > > | .bittiming_const = { > | .name = "xilinx_dwnstrm", > | .tseg1_min = 1, > | .tseg1_max = 256, > | .tseg2_min = 1, > | .tseg2_max = 128, > | .sjw_max = 128, > | .brp_min = 1, > | .brp_max = 256, > | .brp_inc = 1, > | }, > | .data_bittiming_const = { > | .name = "xilinx_dwnstrm", > | .tseg1_min = 1, > | .tseg1_max = 32, > | .tseg2_min = 1, > | .tseg2_max = 16, > | .sjw_max = 16, > | .brp_min = 1, > | .brp_max = 256, > | .brp_inc = 1, > | }, > > Note that for the data bit timing the tseg1_max is 32. > > > > | nominal real Bitrt nom real SampP > > > | Bitrate TQ[ns] PrS PhS1 PhS2 SJW BRP Bitrate Error SampP SampP > Error > > > | 1000000 12 29 30 20 1 1 999999 0.0% 75.0% 75.0% 0.0% > <-- CAN-2.0 > > > | 1000000 25 14 15 10 1 2 999999 0.0% 75.0% 75.0% 0.0% > <-- CAN-FD (data) > \_____/ > tseg1 > > tseg1 = 14 + 15 = 29 > > With brp == 1 the tseg1 would be 29 + 30 = 59, which means it's too large. Accepted, Thanks for clear explanation. > > regards, > Marc > > -- > Pengutronix e.K. | Marc Kleine-Budde | > Embedded Linux | https://www.pengutronix.de | > Vertretung West/Dortmund | Phone: +49-231-2826-924 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |