Messages in this thread | | | Date | Fri, 18 Jun 2021 14:44:47 +0200 | From | Marc Kleine-Budde <> | Subject | CAN-FD Transmitter Delay Compensation (TDC) on mcp2518fd |
| |
On 18.06.2021 20:17:51, Vincent MAILHOL wrote: > > > I just noticed in the mcp2518fd data sheet: > > > > > > | bit 14-8 TDCO[6:0]: Transmitter Delay Compensation Offset bits; > > > | Secondary Sample Point (SSP) Two’s complement; offset can be positive, > > > | zero, or negative. > > > | > > > | 011 1111 = 63 x TSYSCLK > > > | ... > > > | 000 0000 = 0 x TSYSCLK > > > | ... > > > | 111 1111 = –64 x TSYSCLK > > > > > > Have you takes this into account? > > > > I have not. And I fail to understand what would be the physical > > meaning if TDCO is zero or negative.
The mcp25xxfd family data sheet says:
| SSP = TDCV + TDCO
> > TDCV indicates the position of the bit start on the RX pin.
If I understand correctly in automatic mode TDCV is measured by the CAN controller and reflects the transceiver delay. I don't know why you want to subtract a time from that....
The rest of the relevant registers:
| TDCMOD[1:0]: Transmitter Delay Compensation Mode bits; Secondary Sample Point (SSP) | 10-11 = Auto; measure delay and add TDCO. | 01 = Manual; Do not measure, use TDCV + TDCO from register | 00 = TDC Disabled | | TDCO[6:0]: Transmitter Delay Compensation Offset bits; Secondary Sample Point (SSP) | Two’s complement; offset can be positive, zero, or negative. | 011 1111 = 63 x TSYSCLK | ... | 000 0000 = 0 x TSYSCLK | ... | 111 1111 = –64 x TSYSCLK | | TDCV[5:0]: Transmitter Delay Compensation Value bits; Secondary Sample Point (SSP) | 11 1111 = 63 x TSYSCLK | ... | 00 0000 = 0 x TSYSCLK
> > If TDCO is zero, the measurement occurs on the bit start when all > > the ringing occurs. That is a really bad choice to do the > > measurement. If it is negative, it means that you are measuring the > > previous bit o_O !?
I don't know...
> > Maybe I am missing something but I just do not get it. > > > > I believe you started to implement the mcp2518fd.
No I've just looked into the register description.
> > Can you force a > > zero and a negative value and tell me if the bus is stable? > > Actually, ISO 11898-1 specifies that the "SSP position should be > at least 0 to 63 minimum time quanta". This means that we can > have SSP = TDCV + TDCO = 0. In my implementation, I used 0 as a > reserved value for TDCV and TDCO. To comply with the standard, I > now need to allow both TDCV and TDCO to be zero and add a new > field in struct tdc to manage the automatic/manual options. > > That said, these zero values still make no sense to me. Why would > someone do the measurement on the bit edge? > > Concerning the negative values, the ISO standard says nothing > about it. If you are using the automatic measurement, a negative > TDCO is impossible to use. TDCV is measured on every bit. When > the measurement is done, it is too late to subtract from it (or > maybe the mcp2518fd has a time machine built in?).
:)
> If you are > using the manual mode for TDCV, just choose two positive values > so that TDCV + TDCO = SSF.
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 | [unhandled content-type:application/pgp-signature] | |