Gast
#2706984
He, ein Problem mit dem CAN-Controller MC2515: . saubere Platine, . 8MHz-Quarz am Controller selbst, . MC2551 als Buswandler. Das Bit-Timing war elendige Pfriemelei; um mit dem 8MHz-Quarz auf 100kbps zu kommen, habe ich mir folgende Einstellungen überlegt: . 8MHz sind Tosc=125ns pro Takt, . 100kbps sind 10us pro Bit; . ich setze 'BRP' im Register auf 0b000010=2, das ergibt dann ein Zeitquantum von Tq = 2*(BRP+1)*Tosc = 1us. . Das Synchronisationssegment ist im Chip fest auf Tsync=1*Tq=1us verdrahtet, . als propagation delay wähle ich 'PRSEG' im Register als 0b001=1, das ergibt Tprop = (PRSEG+1)*Tq = 2us, . Die Phasensegmente wähle ich in den jeweiligen Registern mit 'PHSEG1'=0b011=3 und 'PHSEG2'=0b010=2. Das ergibt Tpha1=(PHSEG1+1)*Tq = 4us und Tpha2=(PHSEG2+1)*Tq = 3us. Zusammen sind das:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Der Samplezeitpunkt liegt nach Tpha1 und vor Tpha2, also liegen 7us vor und 3us nach dem Sampling. Ergibt ein Verhältnis von 70%:30%, also optimal. Der Sender ist ein Evaluationsboard; dieses habe ich mit dem CANalyzer getestet, funktioniert also. Das Problem: Im Listen-only-Modus empfängt meine Schaltung Telegramme, die entsprechenden Pins am CAN-Controller wechseln ihre Zustände und so weiter. Die empfangenen Daten stimmen auch. Das Evaluationsboard sendet halt ewig die Retries weiter. Wechsele ich nun in den normalen Modus, empfange ich nichts mehr, bekomme keine Interrupts und das Evaluationsboard geht nach einer Weile in CAN-passive, weil wohl der Fehlerzähler da vollläuft. Ich habe meine Schaltung mal alleine senden lassen und die Bit-Zeit oszillographiert; da kamen exakt 10us pro Bit heraus. Sollte also stimmen. Interessanterweise geht das Evaluationsbort nicht in CAN-passive, wenn ich dem MC2515 eine falsche Bitzeit einstelle. Ich bin verwirrt und hoffe auf Erleuchtung. Vielen Dank und Grüße, Sven