I'd give the bit timing a try first, the MCP2515
seems to be very sensitive for this. I've even had
some trouble finding a working configuration for
the 50 kbit timing I've added a couple weeks ago.
We currently use 00 / D0 / 82 which is also the
result of the old Intrepid timing calculator.
That's a propagation segment of 1 Tq and 3 Tq per
phase, resulting in samling between 50% - 62.5%.
The Arduino MCP CAN lib by Cory Fowler also had
this previously, but then changed in…
…to 00 / CA / 81, which is a propagation segment
of 3 Tq and 2 Tq per phase, shifting the sampling
window to 62.5 - 75%.
Our current configuration scheme for the internal
SJA1000 compatible CAN seems to sample at 62.5 -
75% as well, so that would also match.
Michael
I’m working on an implementation
of IP stack over CAN for the Tesla Roadster.
IP frames are encoded as a length followed by
a sequence of CAN frames, all on the same ID.
This runs over a 1MHz bus, so presumably the
traffic volume could be high at times.
I was having problems with this
running on CAN2, so tried CAN1 and it worked
perfectly. Here are some simple dumps of a
single PING packet (and single PING response
packet):
ID #111 is used to transmit an IP
packet, and ID #110 is used to receive an IP
packet. The special empty data frame is an
acknowledgment.
Using latest master branch code
(3.2.016-196-g0aad1a9f/ota_1/edge (build idf
v3.3.4-848-g1ff5e24b1 Jun 2 2021 09:28:58)).
So, first let’s test with
traffic
on CAN1 (active, 1Mbps), and listening on CAN2
(listen, 1Mbps):
TCPDUMP:
05:57:55.980291 IP
(tos 0x0, ttl 64, id 43101, offset 0,
flags [DF], proto ICMP (1), length 84)
10.10.99.3 > 10.10.99.2: ICMP
echo request, id 23372, seq 1, length
64
0x0000:
4500 0054 a85d 4000 4001 b832 0a0a
6303 E..T.]@.@..2..c.
0x0010:
0a0a 6302 0800 7df8 5b4c 0001 5361
b860 ..c...}.[L..Sa.`
0x0020:
19f5 0e00 0809 0a0b 0c0d 0e0f 1011
1213 ................
0x0030:
1415 1617 1819 1a1b 1c1d 1e1f 2021
2223 .............!"#
0x0040:
2425 2627 2829 2a2b 2c2d 2e2f 3031
3233 $%&'()*+,-./0123
0x0050:
3435 3637
4567
05:57:56.436190
IP (tos 0x0, ttl 64, id 14937, offset
0, flags [none], proto ICMP (1),
length 84)
10.10.99.2 > 10.10.99.3: ICMP
echo reply, id 23372, seq 1, length 64
0x0000:
4500 0054 3a59 0000 4001 6637 0a0a
6302 E..T:Y..@.f7..c.
0x0010:
0a0a 6303 0000 85f8 5b4c 0001 5361
b860 ..c.....[L..Sa.`
0x0020:
19f5 0e00 0809 0a0b 0c0d 0e0f 1011
1213 ................
0x0030:
1415 1617 1819 1a1b 1c1d 1e1f 2021
2223 .............!"#
0x0040:
2425 2627 2829 2a2b 2c2d 2e2f 3031
3233 $%&'()*+,-./0123
0x0050:
3435 3637
4567
Traffic
(as shown on PC the other end of the can
log tcp connection):
tx: #111 54 00
tx: #111 45 00 00 54 a8 5d 40
00
tx: #111 40 01 b8 32 0a 0a 63
03
tx: #111 0a 0a 63 02 08 00 7d
f8
tx: #111 5b 4c 00 01 53 61 b8
60
tx: #111 19 f5 0e 00 08 09 0a
0b
tx: #111 0c 0d 0e 0f 10 11 12
13
tx: #111 14 15 16 17 18 19 1a
1b
tx: #111 1c 1d 1e 1f 20 21 22
23
tx: #111 24 25 26 27 28 29 2a
2b
tx: #111 2c 2d 2e 2f 30 31 32
33
tx: #111 34 35 36 37
rx: #110
rx: #110 54 00
rx: #110 45 00 00 54 3a 59 00
00
rx: #110 40 01 66 37 0a 0a 63
02
rx: #110 0a 0a 63 03 00 00 85
f8
rx: #110 5b 4c 00 01 53 61 b8
60
rx: #110 19 f5 0e 00 08 09 0a
0b
rx: #110 0c 0d 0e 0f 10 11 12
13
rx: #110 14 15 16 17 18 19 1a
1b
rx: #110 1c 1d 1e 1f 20 21 22
23
rx: #110 24 25 26 27 28 29 2a
2b
rx: #110 2c 2d 2e 2f 30 31 32
33
rx: #110 34 35 36 37
CAN1 active:
1T11
111 54 00
1R11
110
1CER
TX_Queue T11 111 40 01 b8 32 0a 0a 63 03
1T11
111 45 00 00 54 a8 5d 40 00
1T11
111 40 01 b8 32 0a 0a 63 03
1CER
TX_Queue T11 111 5b 4c 00 01 53 61 b8 60
1T11
111 0a 0a 63 02 08 00 7d f8
1T11
111 5b 4c 00 01 53 61 b8 60
1CER
TX_Queue T11 111 0c 0d 0e 0f 10 11 12 13
1T11
111 19 f5 0e 00 08 09 0a 0b
1T11
111 0c 0d 0e 0f 10 11 12 13
1CER
TX_Queue T11 111 1c 1d 1e 1f 20 21 22 23
1T11
111 14 15 16 17 18 19 1a 1b
1T11
111 1c 1d 1e 1f 20 21 22 23
1CER
TX_Queue T11 111 2c 2d 2e 2f 30 31 32 33
1T11
111 24 25 26 27 28 29 2a 2b
1T11
111 2c 2d 2e 2f 30 31 32 33
1T11
111 34 35 36 37
1R11
110 54 00
1R11
110 45 00 00 54 3a 59 00 00
1R11
110 40 01 66 37 0a 0a 63 02
1R11
110 0a 0a 63 03 00 00 85 f8
1R11
110 5b 4c 00 01 53 61 b8 60
1R11
110 19 f5 0e 00 08 09 0a 0b
1R11
110 0c 0d 0e 0f 10 11 12 13
1R11
110 14 15 16 17 18 19 1a 1b
1R11
110 1c 1d 1e 1f 20 21 22 23
1R11
110 24 25 26 27 28 29 2a 2b
1R11
110 2c 2d 2e 2f 30 31 32 33
1R11
110 34 35 36 37
CAN2 listen:
2R11
111 54 00
2R11
110
2R11
111 45 00 00 54 a8 5d 40 00
2R11
111 40 01 b8 32 0a 0a 63 03
2R11
111 0a 0a 63 02 08 00 7d f8
2R11
111 5b 4c 00 01 53 61 b8 60
2R11
111 19 f5 0e 00 08 09 0a 0b
2R11
111 0c 0d 0e 0f 10 11 12 13
2R11
111 14 15 16 17 18 19 1a 1b
2R11
111 1c 1d 1e 1f 20 21 22 23
2R11
111 24 25 26 27 28 29 2a 2b
2R11
111 2c 2d 2e 2f 30 31 32 33
2R11
111 34 35 36 37
2R11
110 54 00
2CER
Error intr=10 rxpkt=14 txpkt=0
errflags=0x23401c01 rxerr=0 txerr=0
rxinval=0 rxovr=0 txovr=0 txdelay=0
txfail=0 wdgreset=0 errreset=0
2R11
110 40 01 66 37 0a 0a 63 02
2R11
110 19 f5 0e 00 08 09 0a 0b
2R11
110 34 35 36 37
2R11
110 45 00 00 54 3a 59 00 00
Conclusion
is that the CAN1 traffic looks fine, and the
PING packet gets a good reply. All successful.
But the CAN2 listen is missing a few packets
and the last packet is out of order.
Now,
let’s test with traffic on CAN2 (active,
1Mbps), and listening on CAN1 (listen, 1Mbps):
TCPDUMP:
06:00:33.004060 IP (tos
0x0, ttl 64, id 58240, offset 0,
flags [DF], proto ICMP (1), length
84)
10.10.99.3 >
10.10.99.2: ICMP echo request, id
23393, seq 1, length 64
0x0000:
4500 0054 e380 4000 4001 7d0f 0a0a
6303
E..T..@.@.}...c.
0x0010:
0a0a 6302 0800 7cc8 5b61 0001 f161
b860 ..c...|.[a...a.`
0x0020:
8b0f 0000 0809 0a0b 0c0d 0e0f 1011
1213 ................
0x0030:
1415 1617 1819 1a1b 1c1d 1e1f 2021
2223 .............!"#
0x0040:
2425 2627 2829 2a2b 2c2d 2e2f 3031
3233 $%&'()*+,-./0123
0x0050:
3435 3637
4567
Traffic (as shown on PC
the other end of the can log tcp
connection):
tx:
#111 54 00
tx:
#111 45 00 00 54 e3 80 40 00
tx:
#111 40 01 7d 0f 0a 0a 63 03
tx:
#111 0a 0a 63 02 08 00 7c c8
tx:
#111 5b 61 00 01 f1 61 b8 60
tx:
#111 8b 0f 00 00 08 09 0a 0b
tx:
#111 0c 0d 0e 0f 10 11 12 13
tx:
#111 14 15 16 17 18 19 1a 1b
tx:
#111 1c 1d 1e 1f 20 21 22 23
tx:
#111 24 25 26 27 28 29 2a 2b
tx:
#111 2c 2d 2e 2f 30 31 32 33
tx:
#111 34 35 36 37
rx:
#110
rx:
#110 54 00
rx:
#110 45 00 00 54 3a 5a 00 00
rx:
#110 0a 0a 63 03 00 00 84 c8
rx:
#110 8b 0f 00 00 08 09 0a 0b
rx:
#110 34 35 36 37
rx:
#110 40 01 66 36 0a 0a 63 02
CAN2 active:
2T11
111 54 00
2R11
110
2CER
TX_Queue T11 111 40 01 7d 0f 0a 0a 63 03
2T11
111 45 00 00 54 e3 80 40 00
2T11
111 40 01 7d 0f 0a 0a 63 03
2CER
TX_Queue T11 111 5b 61 00 01 f1 61 b8 60
2T11
111 0a 0a 63 02 08 00 7c c8
2T11
111 5b 61 00 01 f1 61 b8 60
2CER
TX_Queue T11 111 0c 0d 0e 0f 10 11 12 13
2T11
111 8b 0f 00 00 08 09 0a 0b
2T11
111 0c 0d 0e 0f 10 11 12 13
2CER
TX_Queue T11 111 1c 1d 1e 1f 20 21 22 23
2T11
111 14 15 16 17 18 19 1a 1b
2T11
111 1c 1d 1e 1f 20 21 22 23
2CER
TX_Queue T11 111 2c 2d 2e 2f 30 31 32 33
2T11
111 24 25 26 27 28 29 2a 2b
2T11
111 2c 2d 2e 2f 30 31 32 33
2T11
111 34 35 36 37
2R11
110 54 00
2R11
110 45 00 00 54 3a 5a 00 00
2CER
Error intr=15 rxpkt=3 txpkt=12
errflags=0x23401c01 rxerr=0 txerr=0
rxinval=0 rxovr=0 txovr=0 txdelay=5
txfail=0 wdgreset=0 errreset=0
2R11
110 0a 0a 63 03 00 00 84 c8
2R11
110 8b 0f 00 00 08 09 0a 0b
2R11
110 34 35 36 37
2R11
110 40 01 66 36 0a 0a 63 02
CAN1 listen:
1R11 111 54 00
1R11 110
1R11 111 45 00 00 54 e3 80 40 00
1R11 111 40 01 7d 0f 0a 0a 63 03
1R11 111 0a 0a 63 02 08 00 7c c8
1R11 111 5b 61 00 01 f1 61 b8 60
1R11 111 8b 0f 00 00 08 09 0a 0b
1R11 111 0c 0d 0e 0f 10 11 12 13
1R11 111 14 15 16 17 18 19 1a 1b
1R11 111 1c 1d 1e 1f 20 21 22 23
1R11 111 24 25 26 27 28 29 2a 2b
1R11 111 2c 2d 2e 2f 30 31 32 33
1R11 111 34 35 36 37
1R11 110 54 00
1R11 110 45 00 00 54 3a 5a 00 00
1R11 110 40 01 66 36 0a 0a 63 02
1R11 110 0a 0a 63 03 00 00 84 c8
1R11 110 5b 61 00 01 f1 61 b8 60
1R11 110 8b 0f 00 00 08 09 0a 0b
1R11 110 0c 0d 0e 0f 10 11 12 13
1R11 110 14 15 16 17 18 19 1a 1b
1R11 110 1c 1d 1e 1f 20 21 22 23
1R11 110 24 25 26 27 28 29 2a 2b
1R11 110 2c 2d 2e 2f 30 31 32 33
1R11 110 34 35 36 37
Conclusion
is that the CAN2 transmit traffic looks fine,
but no PING reply received via CAN. The CAN1
listen shows the reply just fine.
Here
is that last CAN1 listen, with timestamps:
1622696433.080107
1R11 111 54 00
1622696433.081657
1R11 110
1622696433.227479
1R11 111 45 00 00 54 e3 80 40 00
1622696433.228318
1R11 111 40 01 7d 0f 0a 0a 63 03
1622696433.245727
1R11 111 0a 0a 63 02 08 00 7c c8
1622696433.246214
1R11 111 5b 61 00 01 f1 61 b8 60
1622696433.248219
1R11 111 8b 0f 00 00 08 09 0a 0b
1622696433.248772
1R11 111 0c 0d 0e 0f 10 11 12 13
1622696433.250774
1R11 111 14 15 16 17 18 19 1a 1b
1622696433.251338
1R11 111 1c 1d 1e 1f 20 21 22 23
1622696433.253380
1R11 111 24 25 26 27 28 29 2a 2b
1622696433.253944
1R11 111 2c 2d 2e 2f 30 31 32 33
1622696433.265937
1R11 111 34 35 36 37
1622696433.269221
1R11 110 54 00
1622696433.272095
1R11 110 45 00 00 54 3a 5a 00 00
1622696433.272125
1R11 110 40 01 66 36 0a 0a 63 02
1622696433.272156
1R11 110 0a 0a 63 03 00 00 84 c8
1622696433.272193
1R11 110 5b 61 00 01 f1 61 b8 60
1622696433.272245
1R11 110 8b 0f 00 00 08 09 0a 0b
1622696433.272277
1R11 110 0c 0d 0e 0f 10 11 12 13
1622696433.272314
1R11 110 14 15 16 17 18 19 1a 1b
1622696433.272354
1R11 110 1c 1d 1e 1f 20 21 22 23
1622696433.272387
1R11 110 24 25 26 27 28 29 2a 2b
1622696433.272420
1R11 110 2c 2d 2e 2f 30 31 32 33
1622696433.272452
1R11 110 34 35 36 37
It
is 1Mbps, with 30us or so between each packet.
This is the only traffic on
the bus. Everything else is turned off.
Roughly 12 packets each way. Surely even if we
were hitting a performance limit, our buffers
can handle 12 packets?
The
good news is that I have a good environment to
replicate this issue now, so any fix should be
easy to test.
I
haven’t worked on the MCP2515 driver in
our
code in a long time, but it certainly seems
something is messed up and that could be badly
affecting vehicle modules using anything other
than CAN1.
I
will start to look at this over the weekend,
but has anyone got any ideas/suggestions?
Perhaps the bit timing registers are off by a
small amount (so it works on CAN1 but not on
CAN2)? Or something more serious in our
driver?
Regards,
Mark.
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev