STM8S208 - “beCAN” Controller


Indirekt addressierbare Register (in Page 6)

Eine Reihe von Registern werden über die „Page Select“ Einstellung „0x110b“ in den „Register“ - Adressbereich eingeblendet.

Error Status Register (CAN_ESR)

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

LEC[2:0] - Last Error Code (Bitfeld mit dem letzten Fehlercode)

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

BOFF -  Bus OFF Flag ( Kennung der Freigabe des Bustreibers)

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.

EPVF -  Error Passive Flag (Kennung des "Passive Error Modes")

Nach dem Erreichen des „Passive Error“ Modes bei 127 aufeinderfolgenden Fehlern in Sende- bzw in Empfangs- Richtung wird das Flag „EPVF“ gesetzt.

EWGF - Error Warning Flag (Kennung bei erhöhten Fehlerraten)

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.

Error Interrupt Register (CAN_EIER)

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.

ERRIE -  Error Interrupt Enable (Globaler Fehler Interrupt )

Die in den Fehler-Flags des CAN_ESR Registers auflaufenden Fehler erzeugen einen „globalen“ Fehler-Interrupt wenn das Bit „ERRIE“ gesetzt wird..

LECIE -  Last Error Code Interrupt Enable ("Letzte Fehler Code" 0" Interrupt Freigabe)

Ä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.

BOFIE -  Bus OFF Flag Interrupt Enable ("Bus Off Kennung" Interrupt Freigabe)

Das BOFF-Flag im CAN_ESR kann einen Interrupt auslösen wenn „BOFIE“ gesetzt wird. "Bus Off" ist eine CAN Bus Spezifikation.

EPVIE -  Error Passive Interrupt Enable ( "Error Passive" Fehler Interrupt Freigabe)

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.

EWGIE -  Error Warning Interrupt Enable ("Error Warning" Interrupt Freigabe )

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.

Sendefehler Zähler Register (CAN_TECR)

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

Empfangsfehler Zähler Register (CAN_RECR)

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

Bit Timing Register 1 (CAN_BTR1)

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).

BRP[5:0] -  Baud RateP rescaler (Baud Raten Vorteiler )

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.

 SJW[1..0] -  Synchronisation Jump Width ( Synchronisierung Sprungweite )

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.

Bit Timing Register (CAN_BTR2)

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.

Bit Segment 1 (BS1[3..0])

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.

 Bit Segment 2 (BS2[2..0])

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.

Filter Mode Register 1 (CAN_FMR1)

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

 FMLnFilter Mode Low Bit (Konfiguriert die unteren 4 Byte einer Registerbank)

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

  •  „Mask“ Modus - das Filter definiert welche ID-Bits übereinstimmen müssen oder ohne Relevanz sind.
  •  „Identifier List“ Modus – das Filter enthält definierte IDs die übereinstimmen müssen.
  • Details zur Verwendung dazu sind im Kapitel "ID Filter" enthalten.

    FMHn -  Filter Mode High Bit (Konfiguriert die oberen 4 Byte einer Registerbank)

    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

  • „Mask“ Modus - das Filter definiert welche ID-Bits übereinstimmen müssen oder ohne Relevanz sind.
  • „Identifier List“ Modus – das Filter enthält definierte IDs die übereinstimmen müssen.
  • Details zur Verwendung dazu sind im Kapitel "ID Filter" enthalten.

    Filter Mode Register 2 (CAN_FMR2)

    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

    FMLn -  Filter Mode Low Bit (Konfiguriert die unteren 4 Byte einer Registerbank)

    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

  • „Mask“ Modus - das Filter definiert welche ID-Bits übereinstimmen müssen oder ohne Relevanz sind.
  • „Identifier List“ Modus – das Filter enthält definierte IDs die übereinstimmen müssen.
  • Details zur Verwendung dazu sind im "Kapitel 7" enthalten.

    FMHn -  Filter Mode High Bit (Konfiguriert die oberen 4 Byte einer Registerbank)

    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

  • „Mask“ Modus - das Filter definiert welche ID-Bits übereinstimmen müssen oder welche Bits ohne Relevanz sind.
  • „Identifier List“ Modus – das Filter enthält definierte CAN-IDs die übereinstimmen müssen.
  • Details zur Verwendung dazu sind im Kapitel 7 "CAN Identifier“ Hardware Filter" enthalten.

    Filter Configuration Register 1 (CAN_FCR1)

    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.

    FSCn[1:0] -  Filter Scale ConfigurationBits (Filter Konfiguration Bank 0/1)

    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" .

    FACTn -  Filter Activation Bits (Filter Aktivierung Filterbank 0/1)

    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.

    Filter Configuration Register 2 (CAN_FCR2)

    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.

     FSCn[1..0] -  Filter Scale ConfigurationBits (Filter Konfiguration Bank 2/3)

    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 ".

     FACTn -  Filter Activation Bits (Filter Aktivierung Filterbank 2/3)

    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.

    Filter Configuration Register 3 (CAN_FCR3)

    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.

    FSCn[1..0] -  Filter Scale ConfigurationBits (Filter Konfiguration Bank 4/5)

    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" .

    FACTn -  Filter Activation Bits (Filter Aktivierung Filterbank 4/5)

    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.

    Copyright Notiz

    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.