STM8S208 - “beCAN” Controller
Der beCAN-Block auf dem STM8S208xx befindet sich nach dem Einschalten der Spannung, bzw. nach einem Reset im „SLEEP“ Modus.
Sollte der beCAN nicht benötigt werden, so kann das „SLEEP“ Bit (Sleep Request) im CAN_MCR auch per Software gesetzt werden. Der beCAN wird dann in den „SLEEP“ Modus wechseln und signalisiert dies durch das „SLAK“ Bit (Sleep Acknowledge) im MSR Register. Die Stromaufnahme ist in diesem Zustand minimiert.
Zur Aktivierung des beCAN muß das „INRQ“ Bit (Initialisiation Request) im Master Control Register (MCR) anstatt des „SLEEP“ Bits per Software gesetzt werden. Um den „SLEEP“ Modus zu verlassen muß die Software das „SLAK“ Flag gleichzeitig zurücksetzen. Dies veranlasst die Initialisierung der beCAN Hardware. Zu Beginn der Initialisierung wird das „INAK“ Bit (Initialisation Acknowledge) im Master Status Register von der Hardware auf „1“ gesetzt.
Während der Initialisierungs Modus aktiv ist sind alle Übertragungen vom und zum CAN-Bus gestoppt und der CAN-TX-Ausgang liefert einen Logikpegel der einen „rezessiven“ Pegel auf dem Bus erzeugt (Logische „1“). Im Laufe der "hardwaremäßigen" Initialsierung werden keine Konfigurationen des beCAN verändert.
Der beCAN verbleibt im „INIT“ Modus bis per Software das „INRQ“ Bit zurückgesetzt wird. Vor diesem Schritt müssen alle nötigen Initialisierungen der beCAN-Register per Software abgeschlossen werden.
Um zufällige, fehlerhafte Veränderungen in den beCAN Registern zu unterbinden können die folgenden Register nur während des INIT Modes beschrieben werden:
CAN_BTR1,CAN_BTR2, CAN_FCR1, CAN_FCR2, CAN_FMR1, CAN_FMR2 und CAN_DGR
Nach dem Beenden der Initialisierungs-Sequenz („INRQ“ = „0“), wird auf dem Bus eine Synchronisation durchgeführt, dabei wartet der CAN-Controller auf den „IDLE“-Zustand des Busses bzw. auf mindestens 11 aufeinander folgende „rezessive“ Zustände, danach befindet sich der beCAN im „Normal“ Modus. Die Bus-Aktivitäten werden freigeschaltet.
Das Register CAN_BTR1 erlaubt die Definition der zeitlichen Länge eines Time-Quantums (tq) als Vielfaches der Periodendauer der Taktfrequenz fMaster des STM8S208. Der effektive Wert berechnet sich aus dem Wert im Register (z.B. „7“) + „1“ (also „8“). Dieser Wert multipliziert sich mit der Periodendauer des zentralen Taktes (z.B. 125 ns bei 8 Mhz). Daraus errechnet sich die Länge eines Bit-Quantums beispielsweise zu:
125 ns * 8 tMaster = 1 µs - oder als weiteres Beispiel - 1 µs * 10 tMaster = 10 µs
Wie zu sehen ist ergibt sich damit eine endliche Auflösung der möglichen Dauer eines Zeit-Quantums was dazu führt das die angestrebte Bitrate nur mit einer begrenzten Genauigkeit eingestellt werden kann. Hier ist die Forderung der CAN-Spezifikation zu erfüllen.
Im Register CAN_BTR1 ist das Bit-Feld [5..0] etwas fälschlich als BAUD-Rate Precaler bezeichnet, da die BAUD Rate üblicherweise die Geschwindigkeit der übertragenen Bits wiedergibt.
Die Einstellung der Anzahl von Zeit Quanten für Bit Segment1 und Bit Segment2 erfolgt im nachfolgend beschriebenen Bit Timing Register CAN_BTR2.
Ein anderes Merkmal des CAN-Busses ist die Möglichkeit einer Re-Synchronisation innerhalb einer laufenden Übertragung. Detektiert der Empfänger eine Verschiebung der Bit-Übergänge im Verhältnis zum eigenen Takt, so besteht die Möglichkeit im Timing des Empfängers eine Anzahl von Zeit-Quanten zu überspringen oder zusätzliche Zeit-Quanten einzufügen.
Die Anzahl der übersprungenen bzw. der hinzugefügten Zeit-Quanten wird im SJW Bit-Feld [7..6] des CAN_BTR1 Registers hinterlegt. Auch hier gilt die Formel:
Sprungweite = (SJW[7..6] + 1)
Das Register CAN_BTR1 kann nur im „INIT Mode“ beschrieben werden.
Eine Besonderheit des CAN-Busses ist die Aufteilung eines Übertragungs-Bits in sogenannte Bit-Quanten – die kleinste Zeiteinheit innerhalb eines Bits. Ein Bit ergibt sich somit aus einer Anzahl von solchen Bit-Quanten die wiederum in einzelne Segmente zusammengefasst werden.
Das erste Segment in einem Bit ist das „SYNC-Segment“ das immer aus exakt einem Bit-Quantum besteht. Das darin enthaltene Synchronisations Bit wird dabei mit einem dem vorhergehenden Zustand des Bit-Quantums entgegengesetzten Zustand übertragen.
Die nachfolgenden Bit-Segmente , „Bit-Segment-1“ und „Bit-Segment-2“ bestehen üblicherweise aus mehreren Bit-Quanten deren Anzahl per Register definiert werden.
Das Bit-Segment-1 fasst die in der CAN Spezifikation separat dargestellten Bit Segmente „Propagation Segment“ und „Phase Segment 1“ zusammen, da es real zwischen diesen Segmenten keinen auswertbaren Timing Punkt gibt.
Im beCAN Controller kann das Bit-Segment-1 für Werte von 1 bis 16 im Register: CAN_BTR2 (Bits 3..0) programmiert werden. Zu dem eingegebenen Wert muß dabei 1 hinzuaddiert werden. So ergibt ein Wert von „5“ im Register – 6 Zeit-Quanten.
Das Register CAN_BTR2 kann nur im „INIT Mode“ beschrieben werden.
Die Schnittstelle zwischen Bit-Segment-1 und Bit-Segment-2 definiert den „Abtast Zeitpunkt“ für den Empfänger. Zu diesem Zeitpunkt wird das Bus-Signal im Empfänger eingelesen.
Im beCAN Controller kann das Bit-Segment-1 für Werte von 1 bis 8 im Register: CAN_BTR2 (Bits 6..4) programmiert werden. Zu dem eingegebenen Wert muß dabei 1 addiert werden. So ergibt ein Wert von „2“ im Register – 3 Zeit-Quanten.
Das Register CAN_BTR2 kann nur im „INIT Mode“ beschrieben werden.
Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2017) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.