„CANNET“ ID Hardware Filter
In diesem Teil der CANNET Stack Beschreibung werden die verschiedenen Einstellungen der beCAN Hardware Filter behandelt die für die jeweiligen CAN Sendeprotokolle verwendet werden.
Die Einstellung eines 16 Bit Identifier Filters erfolgt über ein Registerpaar ( z.B. FxR1/FxR2) in den entsprechenden Filter PAGES der BeCAN Hardware. Jede Filterpage beinhaltet zwei Filterbänke mit jeweils acht 8-Bit Registern, insgesamt also 6 Filterbänke .
Das „x“ (in CAN_FxR1 etc.) steht dabei für die jeweilige Filterbank (Bank 0 .. 5). Für ein einzelnes 16 Bit Filter sind von diesen 8 Registern nur zwei erforderlich. Für ein 16 Bit ID-Filter mit Maskierung sind vier dieser 8 Bit Register nötig. Daher können bis zu vier 16 Bit Filter ohne Maske oder zwei 16-Bit Filter mit Maske in einer Filterbank angelegt werden.
beCAN Register für eine ID in einer 16 Bit Filterbank | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_FxR1 | EXID[28] | EXID[27] | EXID[26] | EXID[25] | EXID[24] | EXID[23] | EXID[22] | EXID[21] | |
CAN_FxR2 | EXID[20] | EXID[19] | EXID[18] | RTR | IDE | EXID[17] | EXID[16] | EXID[15] |
Wie in der Tabelle zu sehen ist können 16 Bit Filter nur die CAN-IDs [28:15] verarbeiten. Daher wurden diesen ID-Bits die Gruppen für die PRIORITÄT, dem SIGNALTYP und den CHANNELs zugewiesen. Der CAN PARSER in der Firmware verarbeitet allerdings die CHANNELs direkt da ja bei den Kanälen die identische Verabeitung der Signale erfolgt. Aus diesem Grund werden die CHAN-Bits auch maskiert.
CANNET ID-Filter Referenz
Die nachfolgenden Beispiele für die Registereinstellungen gelten exemplarisch für das erste implementierte Filter in der Filterbank 0. Werden die im „CANNET“-Stack vereinbarten ID-Gruppen auf diese Filtereinstellung gemapped ergibt sich für kanalspezifische Protokolle (CHAN) folgendes Bild:
beCAN Register in einer 16 Bit Filterbank mit "CHAN" Angabe | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_FxR1 | "1" | PRIO[3] | PRIO[2] | PRIO[1] | PRIO[0] | SIG[3] | SIG[2] | SIG[1] | |
CAN_FxR2 | SIG[0] | CHAN[3] | CHAN[2] | RTR | IDE | CHAN[1] | CHAN[0] | WERT[3] |
Dem gegenüber steht bei adressierten Protokollen mit einer Zieladresse (ZNODE) und Mehrfachrahmen (FRNR) , die hier die CHAN und WERT Felder ersetzen, dieses Bild:
beCAN Register in einer 16 Bit Filterbank mit "Mehrfach-Rahmen" | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_FxR1 | "1" | PRIO[3] | PRIO[2] | PRIO[1] | PRIO[0] | SIG[3] | SIG[2] | SIG[1] | |
CAN_FxR2 | SIG[0] | FRNR[3] | FRNR[2] | RTR | IDE | FRNR[1] | FRNR[0] | ZNODE[3] |
CANNET MASK Referenz
Wird, wie im CANNET Stack generell vereinbart eine 16 Bit ID/MASK Filterung vorgenommen, so wird für jedes ID-Filter Register ein weiteres Registerpaar mit folgenden Einstellungen für die MASKE benötigt.
beCAN Register in einer 16 Bit Filterbank: MASKE für "CHAN" | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_FxR3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
CAN_FxR4 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
Für „adressierte“ CANNET Messages bei denen innerhalb der CAN-ID auch die Zieladresse ZNODE übertragen wird, gilt nachfolgende Filtereinstellung:
beCAN Register in einer 16 Bit Filterbank: MASKE für "Mehrfachrahmen" | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_FxR3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
CAN_FxR4 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
Hier wird zusätzlich das Bit 0 des zweiten Registers auf „0“ gesetzt um das ZNODE[7] Bit zu maskieren.
Diese 16 Bit MASKE wird mit den beiden ID-Registern logisch verknüpft, daher werden Bits die in der MASKE eine „0“ beinhalten vom Filter nicht ausgewertet. Für die in einer CANNET Node maximal möglichen 15 Alarmeingänge ergibt sich beispielsweise folgende Filtereinstellung, wobei die rot hinterlegten Bits (CHANNEL) durch die Register CAN_F0R3 und CAN_F0R4 ausmaskiert werden.
Diese beiden Zuordnungen der CANNET-ID Gruppen zu den EXID-Bits ist im CANNET System durchgängig gültig. Es werden keine 8-Bit oder 32-Bit Filter verwendet.
Beachte: Die Aufteilung in den Filterpages (Page 2, 3 und 4) in jeweils zwei Filterbänke (Bank 0/1, 2/3 und 4/5) ist nicht durch die Hardware bestimmt. Die Adressierung erfolgt in der Software mit einem durchgehenden Index der Register von Register 0 (CAN_P0) bis Register F (CAN_PF), für jede der drei, durch das CAN_PSR (Page Select Register) Register selektierten Filterpages.
Filtereinstellungen für ALARM Protokoll (Beispiel)
Zur Erkennung eines ALARM Rahmens werden nachfolgende Einstellungen von zwei 16 Bit Filterpaaren (ID und MASK) vorgenommen. Das ALARM Protokoll wird im CANNET System vom Filter mit dem Index „0“ erfasst, welches in der ersten Hälfte der Filterbank „0“ liegt.
Das ALARM Protokoll ist ein kanalspezifisches Protokoll und wird im Broadcast an alle Nodes verteilt. Die empfangenden Nodes können konfiguriert werden um einen ALARM von einer definierten NODE und einem definierten DIN (Digital Input) auf einen der digitalen Ausgänge auszulösen.
16 Bit ID Pattern für ALARM Protokoll
Im ersten Register CAN_F0R1 wird die Einstellung der EXID[18:21] Bits vorgenommen, im zweiten Register CAN_F0R2 die Einstellung der EXID[20:18], EXID[17:15] und Bit[3] IDE (immer 1, da immer Extended Adressen) und Bit[4] RTR (= 0 , da das ALARM Protokoll einen Datenrahmen und keinen RTR = Remote Transmission Rahmen überträgt).
ALARM Filter für einen DIN-Eingang:
beCAN_F0Rn Register: Filterbank = 0, Register = 1 und 2 | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_F0R1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
0x88h | |||||||||
CAN_F0R2 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | |
0x8Ah |
Diese Einstellung ergibt sich aus folgenden Bit-Segmenten:
CAN_F0R1 / Bit 7 | (EXID28) | CANNET Spezifikation = 1 | |
CAN_F0R1 / Bit[6:3] | PRIO[3:0 | für ALARM = 0b0001 | höchste PRIO |
CAN_F0R1 / Bit[2:0] | SIG[3:1] | für ALARM = 0b000 | |
CAN_F0R2 / Bit 7 | SIG[0] | für ALARM = 0b1 | |
CAN_F0R2 / Bit [6:5] | CHAN[3:2] | für ALARM = 0bxx | von 0b00 bis 0b11 möglich |
CAN_F0R2 / Bit 4 | RTR | Datenrahmen = 0 | CANNET Spezifikation = 0 |
CAN_F0R2 / Bit 3 | IDE | extended Frame = 1 | CANNET Spezifikation = 1 |
CAN_F0R2 / Bit[2:1] | CHAN[1:0] | für ALARM = 0bxx | von 0b00 bis 0b11 möglich |
CAN_F0R2 / Bit 0 | WERT[3] | für ALARM = 0b0 |
Die Bitfelder CHAN[3:2] und CHAN[1:0] sind in der beCAN Hardware wie aufgezeigt aufgeteilt, zusammen ergeben sie die EXID[19:16] Bits welchen in der CANNET Spezifikation die Kanalnummern (CHAN) zugewiesen sind.
16 Bit MASK Pattern für ALARM Protokoll (Beispiel)
In der CANNET Spezifikation werden durchgehend ID-Filter mit Maskierung verwendet, daher wird für jedes ID-Filterpaar ein weiteres MASK Filterpaar verwendet. Da das ALARM Protokoll für alle Kanäle (CHAN) vom Filter erfasst werden soll, werden die Bits CHAN[0], CHAN[1], CHAN[2] und CHAN[3] mit der nachfolgend gezeigten MASKE ausgeblendet (Mask Wert = 0). Alle anderen Bits werden dekodiert (Mask Wert = 1)
CANNET MASK-Einstellung für ALARM-Signal
Die MASKE für das Empfangsfilter für ein ALARM Protokoll befindet sich hier im Beispiel in den Filterregistern CAN_F0R3 und CAN_F0R4 . Durch die Maske werden die einzelnen Kanäle (CHAN) ausgeblendet und es ist nur ein Filter für alle Kanäle einer Node notwendig. Anderfalls wären allein für die ALARM Protokolle zwei komplette Filterbänke belegt, was bei insgesamt nur 6 Filterbänken zu viele Resourcen belegen würde.
Die „rot“ hinterlegten Bits werden durch die Filter-MASKE ausgeblendet, daher werden alle vier ALARM-Signale (möglich sind bis zu 15 ALARM-Signale), die ohne die roten Felder identisch sind, vom gleichen Filter erfasst und erst durch die Software entsprechend ausgewertet und verarbeitet. Das WERT[3] Bit (gelb) wird ebenfalls nicht ausgewertet.
beCAN_F0Rn MASK: Filterbank = 0, Register 3 und 4 | |||||||||
Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
CAN_F0R3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
0x88h | |||||||||
CAN_F0R4 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | |
0x9Ah |
Die „rot“ gekennzeichneten Bits mit dem Wert „0“ werden durch die Filter-MASKE ausgeblendet. Neben den 4 CHAN-Bits wird auch das WERT[3] Bit ausgeblendet.Die Auswahl des aktiven Kanals (CHAN) erfolgt per Software.
Copyright 2019 by Dipl.Ing.(FH) Franz Henkel
Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2019) 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, gedruckter oder elektronischer Form, zu verwenden.