Bin mir nicht ganz sicher, was da passiert. Zwei Erklärungen habe ich:
1.) Der zweite Sender merkt, dass auf dem Bus was nicht stimmt
(schreibt ja rezessiv und liest dominant) also vermerkt er einen
Tx-Error (+8) und schickt ein ErrorFrame. Die Botschaft wird dadurch
von allen Busteilnehmern verworfen und wiederholt - auch vom ersten,
eigentlichen Sender. Das Spiel wiederholt sich, bis sich der zweite
Sender wegen Erreichen seiner TX-Fehlerschwelle vom Bus zurückzieht.
(Er zieht sich vom Bus als erster zurück, weil er seinen
Tx-Fehlerzähler als aktiver Sender schneller inkrementiert wie die
anderen Knoten, die nur passiv einen Fehler erkennen). Danach kommt
endlich die Nachricht des ersten Senders durch.
2.) Das Rücklesen der gerade gesendeten Daten findet nur in der
Arbitrierungsphase statt, danach nicht mehr. Also merkt der zweite
Sender vom Problem nichts - schreibt also munter weiter. Tritt jetzt
der Fall ein, dass der zweite Sender den ersten Sender mit einem
dominanten Bit überschreibt, dann kommts in den restlichen Knoten zu
Fehlern (je nach Fehlerbit kann das z.B. ein CRC-Fehler,
Bitstuffingfehler usw. sein). Die anderen Knoten senden einen
Errorframe, der die beiden Sender veranlasst ihre Nachrichten zu
wiederholen. Das Spiel beginnt von vorne, bis sich die beiden selbst
abschalten. Grund siehe unter 1.
Überschreibt der zweite Sender keine Bits des ersten Senders, so würde
das Problem eigentlich gar nicht auffallen... Hm.
@all: Kann ein CAN-Experte hier weiterhelfen?
Und nein, die Arbitrierung (=wer darf den Bus benutzen) ist per
Definition nach dem RTR-Bit beendet.
Deshalb niemals zwei CanIds von 2 unterschiedlichen Knoten verschicken
lassen!