Forum: FPGA, VHDL & Co. Verständnisfrage: CAN 2.0 A/B Synchronisation


von Michael F. (mifi)


Lesenswert?

Hallo zusammen,

ich habe gerade ein Problem mit dem Verständnis der Synchronisation bei 
CAN (nicht FD). Wie ist diese richtig umzusetzen? Ich möchte den CAN 
Controller in VHDL umsetzen. Ich kenne die Verilog Version von 
OpenCores, habe aber Probleme diese zu verstehen.

Ich beziehe mich mal auf folgende Seite um das Timing zu berechnen: 
http://www.bittiming.can-wiki.info/

Ich gehe von einen Bosch C_CAN / D_CAN Controller aus mit einer "Clock 
Rate" von 96MHz und einem "Sample Point" von 87.5%.

Die Anzahl der "Time Quantas" werden hier mit 16 berechnet, Seg1 mit 13 
und Seg2 mit 2. Dies gibt einen Sample Point von 87.5% (Sync_Seg + Seg1 
/ #TQ = 14 / 16).

Weiterhin wird ein SJW von 1 angenommen, was der bevorzugte Wert für 
CANopen und DeviceNet sein soll.

Bis hier hin habe ich noch alles verstanden. Weiterhin gibt es noch ein 
Dokument von Bosch "The Configuration of the CAN Bit Timing": 
http://www.oertel-halle.de/files/cia99paper.pdf

Im Abschnitt 3, "Phase Buffer Segments and Synchronisation" wird erklärt 
wir die Synchronisation funktioniert. "Hard Synchronisation" versteh 
ich, das Problem ist bei "Bit Resynchronisation".


Generell gilt:

"An edge is synchronous if it occurs inside of Sync_Seg, otherwise the 
distance between edge and the end of Sync_Seg is the edge phase error, 
measured in time quanta. If the edge occurs before Sync_Seg, the phase 
error is negative, else it is positive."

Es wird hier von vielfachen der TQ gesprochen. Wenn jetzt aber wie 
empfohlen die SJW auf 1 steht, ist der Bereich der Synchronisation sehr 
gering. Macht es hier nicht mehr Sinn SJW auf einen höheren Wert zu 
stellen?

Bei einer "Clock Rate" von 96MHz, sollte man dann nicht mit einer 
höheren Anzahl der "Time Quantas" arbeiten? Beispiel ist hier der Bosch 
M_CAN Controller. Hier wird mit 48 und 64 gearbeitet.

Viele Grüße,
Michael

von Matthias (Gast)


Lesenswert?

Mal so wie ich das verstehe:
Der Bit Timer Count wird eingestellt bei Detektion von SOF Bit. Also zB 
bei CAN Rate 1M auf 96-1 und dann wird runtergzählt bis 0.

Der Resync bei jedem Übergang von rezessiv zu dominant, kann 
korrigieren, falls e /= 0.

Ein TQ  besteht aus mehreren Ticks von deiner 96M Clock. Wenn du also 
einen TQ springst, dann sind das schon  mehrere Ticks.

von Michael F. (mifi)


Lesenswert?

Das Problem hat sich jetzt aufgelöst. Mein Fehler war das ich für die 
Flankenerkennung den 96MHz Clock für die "Soft Sync" benutzt habe. Aber 
hier darf man für die "Flankenerkennung" nur die "Time-Quantum" Werte 
benutzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.