STM8S208 - “beCAN” Controller
Eine Reihe von Registern werden über die „Page Select“ Einstellung „0x110b“ in den „Register“ - Adressbereich eingeblendet.
Das erste Register in der Configuration/Diagnostik Register-Bank ist das Error Status Register CAN_ESR. Es beinhaltet folgende Bits:
CAN_ESR Register - Error Status Register (0x00.5428h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_ESR | reserv. | LEC2 | LEC1 | LEC0 | reserv. | BOFF | EPVF | EWGF |
Die drei Bits LEC2, LEC1 und LEC0 beinhalten den „Last Error Code“, also einen Wert der den letzten aufgetretenen Fehler beschreibt. Folgende Fehler werden damit angezeigt:
LEC | Fehler | Beschreibung |
000 | Kein Fehler | Nach einem fehlerfreien Transfer wird das „LEC“ Feld zurückgesetzt |
001 | Stuff Error | Fehler im „Bit Stuffing“ erkannt |
011 | Achnowledge Error | Fehler beim Acknowledge Bit im Übertragungsrahmen |
100 | Bit Recessive Error | Fehler bei einem „rezessiven“ Bit erkannt |
101 | Bit Dominant Error | Fehler bei einem „dominanten“ Bit erkannt |
110 | CRC Error | Fehler im CRC-Feld erkannt |
111 | der Wert 111 kann von der Software zur Signalisierung benutzt werden |
Das Bus OFF Flag „BUFF“ wird von der CAN-Hardware bei einem Überlauf des CAN_TECR Registers, heißt des Transmit Error Counters gesetzt. Der Überlauf erfolgt nach 255 aufeinander folgenden Fehlern in Senderichtung.
Nach dem Erreichen des „Passive Error“ Modes bei 127 aufeinderfolgenden Fehlern in Sende- bzw in Empfangs- Richtung wird das Flag „EPVF“ gesetzt.
Neben den EPFV und BUFF Flags liefert der CAN Controller bereits beim Erreichen von 96 aufeinanderfolgenden Fehlern in Sende- oder Empfangsrichtung eine frühe Warnung um gegebenenfalls Massnahmen zu ergreifen. Dies wird durch das „ EWFG“ Flag signalisiert.
CAN_EIER Register - Error Interrupt Register (0x00.5429h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_EIER | ERRIE | reserv. | reserv. | LECIE | reserv. | BOFIE | EPVIE | EWGIE |
Die im Register „ESR“ auflaufenden Fehlermeldungen können über entsprechende „Interrupt Enable“ Bits im CAN_EIER für das Auslösen eines Interrupts freigegeben werden.
Die in den Fehler-Flags des CAN_ESR Registers auflaufenden Fehler erzeugen einen „globalen“ Fehler-Interrupt wenn das Bit „ERRIE“ gesetzt wird..
Ändert sich der Fehlercode im CAN_ESR Register auf einen Wert ungleich „000“ so kann ein Interrupt ausgelöst werden. Dazu muß das „LECIE“ Freigabe-Bit gesetzt werden.
Das BOFF-Flag im CAN_ESR kann einen Interrupt auslösen wenn „BOFIE“ gesetzt wird. "Bus Off" ist eine CAN Bus Spezifikation.
Der Übergang in den „Error Passive“ State, signalisiert durch das EPVF-Flag im CAN_ESR löst einen Interrupt aus falls das „EPVIE“ den Interrupt freigibt. Dazu muß das Bit gesetzt werden. "Error Passive" wird in der CAN Spezifikation definiert.
Das nach 96 Fehlern gesetzte „Error Warning“ Flag im CAN_ESR erzeugt einen Interrupt bei Freigabe durch das „EWGIE“ Bit. "Error Warning" wird in der CAN Spezifikation definiert.
Der 8-Bit Zähler TEC[7..0] der im CAN_TECR dargestellt wird, überwacht die Fehlerhäufigkeit beim Senden von Nachrichten durch den CAN-Controller wie in der CAN Spezifikation beschrieben.
CAN_TECR Register - Transmit Error Counter Register (0x00.542Ah nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_TECR | TEC7 | TEC6 | TEC5 | TEC4 | TEC3 | TEC2 | TEC1 | TEC0 |
Der TEC-Zählerstand wird durch einen Übertragungsfehler um den Wert 8 erhöht und bei jedem fehlerlos übertragenen CAN-Rahmen um den Wert 1 dekrementiert.
TEC Fehler Schwellen | ||
Ursache | Modus | Beschreibung |
TEC > 96 | "Error Warning" | Falls EWGIE gesetzt, Interrupt |
TEC > 127 | „ Error Passive“ Status | Falls EPVIE gesetzt, Interrupt |
TEC > 255 | „Bus OFF“ Status (BOFF) | Falls BOFIE gesetzt, Interrupt |
....... | ||
TEC < 128 | „Error Passive“ nach „Error Active“ | |
128 * 11 Recessive Bus-Bits on CAN-RX gelesen |
„Bus OFF“ nach „Active Error“ | TEC wird auf „0“ zurückgesetzt
wenn ABOM gesetzt |
Der 8-Bit Zähler REC[7..0] der im CAN_RECR gelesen werden kann, überwacht die Fehlerhäufigkeit von gesendeten Rahmen wie in der CAN Spezifikation beschrieben.
CAN_RECR Register - Receive Error Counter Register (0x00.542Bh nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_RECR | REC7 | REC6 | REC5 | REC4 | REC3 | REC2 | REC1 | REC0 |
Der REC-Zählerstand wird nach der CAN-Spezifikation entsprechend der Fehlerbedingung um den Wert 1 oder 8 erhöht. Jeder fehlerlos empfangene Rahmen dekrementiert den Zählerstand um 1 bzw. setzt den Zähler auf 120 falls der Zählerstand grösser als 128 war.
RREC Fehler Schwellen | ||
Ursache | Modus | Beschreibung |
REC > 127 | „ Error Passiver“ Status | Falls EPVIE gesetzt, Interrupt |
........ | ||
REC < 128 | „Error Passive“ nach „Error Active“ | |
128 * 11 Recessive Bus-Bits on CAN-RX gelesen |
„Bus OFF“ „Active Error“ | REC wird auf „0“ zurückgesetzt wenn ABOM gesetzt |
CAN_BTR1 Register - Bit Timing Register 1 (0x00.542Ch nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_BTR1 | SJW1 | SJW0 | BRP5 | BRP4 | BRP3 | BRP2 | BRP1 | BRP0 |
Das Bit Timing Register 1 enthält zwei Bitfelder für die Einstellung des “Time Quantums” und für die “Resynchronisations Sprungweite” (Resynchronisation Jump Width).
Das Bit Timing für den CAN-Bus leitet sich von einem Grundtakt ab der als „Time Quantum“ bezeichnet wird. Alle Timing Einstellungen in nachfolgendem "Bit Timing Register 2" beziehen sich auf diesen „tq“-Takt. Die Dauer von „tq“ berechnet sich aus nachfolgender Formel:
tq = (BRP[5:0]+1)/fMASTER
tsys (= 1/ fMaster) ist dabei die Periodendauer des System-Taktes des STM8S208. Da die CAN Übertragung einen genauen Takt erfordert ist hier ein externer Quarz empfehlenswert und daher wird als Quelle der „HSE“ (High Speed External Oszillator, z.B. 16 MHz) verwendet.
Das Bitfeld SJW[1..0] ermöglicht die Einstellung für die bei der CAN-Resynchronisation in das Bit-Segment 1 eingefügten oder unterdrückten Anzahl von Zeit-Quanten.
CAN_BTR2 Register - Bit Timing Register 2 (0x00.542Dh nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_BTR2 | reserv. | BS2[2] | BS2[1] | BS2[0] | BS1[3] | BS1[2] | BS1[1] | BS1[0] |
Das Bit Timing Register 2 enthält zwei Bitfelder für die Einstellung der Länge der Bit Segmente 1 und 2. Das Syncronisations Segment ist laut CAN Spezifikation fest mit einem „Time Quantum“ (tq ) definiert.
Der Wert des Bit Segments 1 wird in dem Bitfeld BS1[3..0] eingestellt. Der physikalische Wert errechnet sich aus der Formel:
tBS1= (BS1[3..0] + 1) x tq.
Der Wert des Bit Segments 2 wird im Bitfeld BS2[2..0] eingestellt. Der physikalische Wert errechnet sich aus der Formel:
tBS2 = (BS2[2..0] + 1) x tq.
Die CAN-ID Filterbänke 0 bis 3 werden über das Filter Mode Register 1 entweder im „Mask Mode“ („0“) oder in „Identifier Mode“ („1“) konfiguriert.
CAN_FMR1 Register - Filter Mode Register 1 (0x00.5430h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_FMR1 | FMH3 | FML3 | FMH2 | FML2 | FMH1 | FML1 | FMH0 | FML0 |
Das “FMLn” Bit definiert im Zusammenwirken mit dem jeweiligen „FMHn“ (für gleiche „n“) den Modus der jeweils zugeordneten Filter-Bank (Bank 0 bis 5) die aus jeweils 8 Byte besteht. Die CAN-ID Filter können variabel konfiguriert werden und arbeiten entweder im
Details zur Verwendung dazu sind im Kapitel "ID Filter" enthalten.
Das “FMHn” Bit definiert im Zusammenwirken mit dem jeweiligen „FMLn“ (für gleiche „n“) den Modus der jeweils zugeordneten Filter-Bank (Bank 0 bis 5) die aus jeweils 8 Byte besteht. Die CAN-ID Filter können variabel konfiguriert werden und arbeiten entweder im
Details zur Verwendung dazu sind im Kapitel "ID Filter" enthalten.
Die CAN-ID Filterbänke 4 bis 5 werden über das Filter Mode Register 2 entweder im „Mask Mode“ („0“) oder in „Identifier Mode“ („1“) konfiguriert.
CAN_FMR2 Register - Filter Mode Register 2 (0x00.5431h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_FMR2 | reserv. | reserv. | reserv. | reserv. | FMH5 | FML5 | FMH4 | FML4 |
Das FMLn” Bit definiert im Zusammenwirken mit dem jeweiligen „FMHn“ (für gleiche „n“) den Modus der jeweils zugeordneten Filter-Bank (Bank 0 bis 5) die aus jeweils 8 Byte besteht. Die CAN-ID Filter können variable konfiguriert werden und arbeiten entweder im
Details zur Verwendung dazu sind im "Kapitel 7" enthalten.
Das “FMHn” Bit definiert im Zusammenwirken mit dem jeweiligen „FMLn“ (für gleiche „n“) den Modus der jeweils zugeordneten Filter-Bank (Bank 0 bis 5) die aus jeweils 8 Byte besteht. Die CAN-ID Filter können variable konfiguriert werden und arbeiten entweder im
Details zur Verwendung dazu sind im Kapitel 7 "CAN Identifier“ Hardware Filter" enthalten.
CAN_FCR1 Register - Filter Configuration Register 1 (0x00.5432h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_FCR1 | reserv. | FSC11 | FSC10 | FACT1 | reserv. | FSC01 | FSC00 | FACT0 |
Im CAN_FCR1 Register werden die beiden Filterbänke 0 und 1 freigeschaltet bzw. deren Scale Configuration definiert.
Die „Scale Configuration“ für das Filter „n“ (hier Filterbank "0 / 1") wird mit diesen beiden Bits konfiguriert. "Scale Configuration" bedeutet die Einstellung für 8-Bit, 16-Bit oder 32 Bit Filter, wobei sich die Anzahl der Filter entsprechend ändert. Details siehe " ID Filter" .
Die FACT Bits schalten die jeweiligen Filterbänke frei („1“ = aktiv).
Beachten: Um die Filtereinstellungen in den Filterregistern zu modifizieren muß die Filterbank über das entsprechende FACT-Bit deaktiviert werden.
CAN_FCR2 Register - Filter Configuration Register 2 (0x00.5433h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_FCR2 | reserv. | FSC31 | FSC30 | FACT3 | reserv. | FSC21 | FSC20 | FACT2 |
Im CAN_FCR2 Register werden die beiden Filterbänke 2 und 3 freigeschaltet bzw. deren Scale Configuration definiert.
Die „Scale Configuration“ für das Filter „n“ (hier Filterbank "2 / 3") wird mit diesen beiden Bits konfiguriert. "Scale Configuration" bedeutet die Einstellung für 8-Bit, 16-Bit oder 32 Bit Filter, wobei sich die Anzahl der Filter entsprechend ändert. Details siehe "ID Filter ".
Die FACT Bits schalten die jeweiligen Filterbänke frei („1“ = aktiv).
Beachten: Um die Filtereinstellungen in den Filterregistern zu modifizieren muß die Filterbank über das entsprechende FACT-Bit deaktiviert werden.
CAN_FCR3 Register - Filter Configuration Register 3 (0x00.5434h nur wenn PSR = „0x110b“ ) | ||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CAN_FCR3 | reserv. | FSC51 | FSC50 | FACT5 | reserv. | FSC41 | FSC40 | FACT4 |
Im CAN_FCR3 Register werden die beiden Filterbänke 4 und 5 freigeschaltet bzw. deren Scale Configuration definiert.
Die „Scale Configuration“ für das Filter „n“ (hier Filterbank "4 / 5") wird mit diesen beiden Bits konfiguriert. "Scale Configuration" bedeutet die Einstellung für 8-Bit, 16-Bit oder 32 Bit Filter, wobei sich die Anzahl der Filter entsprechend ändert. Details siehe "ID Filter" .
Die FACT Bits schalten die jeweiligen Filterbänke frei („1“ = aktiv).
Beachten: Um die Filtereinstellungen in den Filterregistern zu modifizieren muß die Filterbank über das entsprechende FACT-Bit deaktiviert 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.