I think this is kinda what it's always done with Ioniq5, but this is with the timing patch applied.. if I go from State=0 .. so no polling which means NOTHING received on the CAN bus, to State=1 (Vehicle on - lotsa polling including every second) where it starts polling, I get: E (36101885) can: can1: intr=18642 rxpkt=11924 txpkt=6700 errflags=0x8000d9 rxerr=0 txerr=8 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18646 rxpkt=11924 txpkt=6700 errflags=0x8000d9 rxerr=0 txerr=40 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18648 rxpkt=11924 txpkt=6700 errflags=0x8000d9 rxerr=0 txerr=56 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18650 rxpkt=11924 txpkt=6700 errflags=0x8000d9 rxerr=0 txerr=72 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18652 rxpkt=11924 txpkt=6700 errflags=0x8000d9 rxerr=0 txerr=88 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18654 rxpkt=11924 txpkt=6700 errflags=0x8040d9 rxerr=0 txerr=104 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18655 rxpkt=11924 txpkt=6700 errflags=0x8040d9 rxerr=0 txerr=112 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 E (36101885) can: can1: intr=18659 rxpkt=11924 txpkt=6700 errflags=0x204800 rxerr=0 txerr=128 rxinval=0 rxovr=0 txovr=0 txdelay=0 txfail=1 wdgreset=0 errreset=1 .... followed by E (36145665) esp32can: can1 stuck bus-off error state (errflags=0x00040c00) detected - resetting bus And then things seem to be good from there. I have bus 1 registered as active 500kbps *RegisterCanBus(1, CAN_MODE_ACTIVE, CAN_SPEED_500KBPS);* //.ichael On Sat, 25 Jan 2025 at 09:58, Mark Webb-Johnson via OvmsDev < ovmsdev@lists.openvehicles.com> wrote:
Nice work. Thanks.
Mark
On Jan 25, 2025, at 2:52 AM, Michael Balzer via OvmsDev < ovmsdev@lists.openvehicles.com> wrote:
I was too quick on this conclusion:
Am 19.01.25 um 12:48 schrieb Michael Balzer via OvmsDev: Regarding CAN timing, our ESP32CAN/SJA1000 configuration is mostly according to the SAE/CiA recommendations, with one exception: we generally enable multi (triple) sampling, regardless of the bus speed
I trusted this CAN timing tool: https://www.esacademy.com/en/library/calculators/sja1000-timing-calculator.h... …because it claims it applies the CiA recommendation. That turns out to either be not true or to be different from the SAE recommendation.
I've had another look at the SAE J2284-3 spec.
TL;DR: our sampling point is too late and our tolerance for timing variances of other devices on the bus is too low, at least for the usual 500 kbit/s bus speed.
For 500 kbit/s, SAE J2284-3 defines SJW=3 and TSEG2=3 at tq=125ns, or SJW=3 and TSEG2=3…5 at tq=100ns, resulting in the sampling point being in the range 75-85%.
Our driver currently uses tq=125ns with SJW=2 and TSEG2=2, sampling at 87.5%, so clearly outside the recommendation.
The ESP-IDF driver configuration uses the tq=100ns setup, and places TSEG2 at 4: #define CAN_TIMING_CONFIG_500KBITS() {.brp = 8, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false} → bus clock = .brp / 80 MHz → tq=100ns, with sampling at tq 16 of 20 = 80% -- this is exactly as recommended by SAE.
I now test this configuration in my Mii, so far without issues.
To test this timing, apply the attached patch, this also includes the SAE 500 kbit/s timing for can2/3.
Regards, Michael
-- Michael Balzer * Am Rahmen 5 * D-58313 Herdecke Fon 02330 9104094 * Handy 0176 20698926
<can1-sae.diff> _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev