STM32H7 FDCAN 8 Mbit/s setup / docum. unclear SYNC_SEG
Heyho,
I don't get the FDCAN on a STM32H735g-DK working with 8 Mbit/s.
I feed the FDCANs with 80 MHz so that the "time quantum" is 12.5 ns to make 8 Mbit possible with the integers.
I use the recommended kvaser website for calculations:
https://www.kvaser.com/support/calculators/can-fd-bit-timing-calculator/#/canfd
/* clock / timing */
/* nominal = arbitration phase
* NBTP
* 80 MHz: tq = NominalPrescaler x (1/fdcan_ker_ck)
* -> tq = 12.5 ns
* data rate = 1 / ((SyncSeg + Seg1 + Seg2) * tq)
* with SyncSeg = 1
* 0.5 Mbps = 160 * tq
* -> TimeSeg1 + TimeSeg2 = 159
*/
phCan->Init.NominalPrescaler = 1; /* tq = NominalPrescaler x (1/fdcan_ker_ck) */
#if( 1 )
/* 5000 ppm */
phCan->Init.NominalTimeSeg1 = 138; /* NTSEG1 1..256, NominalTimeSeg1 = Propagation_segment + Phase_segment_1 */
phCan->Init.NominalTimeSeg2 = 21; /* NTSEG2 1..128 */
phCan->Init.NominalSyncJumpWidth = 20; /* NSJW 1..128 should be < NTSEG2 */
#else
/* 500 ppm */
phCan->Init.NominalTimeSeg1 = 153; /* NTSEG1 1..256, NominalTimeSeg1 = Propagation_segment + Phase_segment_1 */
phCan->Init.NominalTimeSeg2 = 6; /* NTSEG2 1..128 */
phCan->Init.NominalSyncJumpWidth = 3; /* NSJW 1..128 should be < NTSEG2 */
#endif
/* data = data phase with bit rate switching
* DBTP
* 80 MHz: tq = DataPrescaler x (1/fdcan_ker_ck)
* -> tq = 12.5 ns
* data rate = 1 / ((SyncSeg + Seg1 + Seg2) * tq)
* with SyncSeg = 1
*/
phCan->Init.DataPrescaler = 1; /* DBRP 1..32 */
#if CAN_FD_DATA_8MB
/* 8 Mbps = 10 * tq
* -> TimeSeg1 + TimeSeg2 = 9
*/
phCan->Init.DataTimeSeg1 = 5; /* NTSEG1 1..32, NominalTimeSeg1 = Propagation_segment + Phase_segment_1 */
phCan->Init.DataTimeSeg2 = 4; /* NTSEG2 1..16 */
phCan->Init.DataSyncJumpWidth = 4; /* NSJW 1..16 should be < NTSEG2 */
#else
/* 2 Mbps = 40 * tq
* -> TimeSeg1 + TimeSeg2 = 39
*/
phCan->Init.DataTimeSeg1 = 24; /* NTSEG1 1..32, NominalTimeSeg1 = Propagation_segment + Phase_segment_1 */
phCan->Init.DataTimeSeg2 = 15; /* NTSEG2 1..16 */
phCan->Init.DataSyncJumpWidth = 14; /* NSJW 1..16 should be < NTSEG2 */
#endif0.5 Mbit in arbitration phase is working (checked bit rate on scope), so is data rate of 2 Mbit/s (checked bit rate on scope).
When using the 8 Mbit settings, the peripheral "hangs" after the first output, which doen's show any sign of BSR / 8 Mbit.
Any ideas?
Or even better any examples how to get to 8 Mbit/s ?
