mikrocontroller.net

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


Autor: Michael F. (mifi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael F. (mifi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.