Geplante Unterstützung für CAN FD im MKT-View (V)

Inhalt

  1. Einleitung, Hinweise zu Geräten mit CAN / CAN FD
  2. Kontrolle der für CAN FD geeigneten Ports im Programmiertool
  3. Konfiguration der CAN FD - fähigen Ports im "System Menu"
  4. Kontrolle des von der Hardware 'realisierten' CAN FD Bit-Timings
  5. Beispiele für das CAN FD Bit Timing (mit Berechnung)


Einleitung, Hinweise zu Geräten mit CAN / CAN FD


Bei der Erstellung dieses Dokumentes (2026) wurde CAN FD nur vom MKT-View V (einem Nachfolger vom MKT-View III und MKT-View IV) unterstützt. Die CPU (STM32H745) enthält zwei interne, für CAN und CAN FD geeignete Controller. Zwei weitere, optionale CAN / CAN FD controllers (MCP2518FD) können auf der Hauptplatine bestückt werden, bieten aber (wegen der Ankopplung per SPI) nicht die gleiche 'Performance' wie die beiden CPU-internen CAN / CAN FD - Controller.

Die ersten Seriengeräte (aus dem Jahr 2026) waren 'voll bestückt', d.h. die Schnittstellen CAN1 .. CAN4 waren CAN FD - fähig.

Siehe auch:
    Konfiguration des CAN(/CAN-FD)-Interfaces am PC,
    Auswahl der 'flexiblen' (hohen) Bitrate für CAN FD,
    Datentyp tCAN_FD_msg (mit 64-Byte-Datenfeld) in der Script-Sprache,
    Anzeigeformat für CAN FD im 'CAN Snooper'.


Kontrolle der für CAN FD geeigneten Ports im Programmiertool

Welche der im momentan geladenen Geräteprofil 'theoretisch' für CAN FD geeignet sind, kann gegebenenfalls im Programmiertool auf der Registerkarte Einstellungen unter Terminal-Konstanten, Einstellungen, nichtflüchtige Werte kontrolliert oder ggf. korrigiert werden.
Scrollen Sie dazu die Tabelle bis zur Zeile 'CAN-FD-fähige Ports' herunter. Der dort in der rechten Spalte angezeigte Wert gibt ab, welche CAN-Ports prinzipiell für CAN FD geeignet sind (bei Bestückung mit einem geeigneten Transceiver):


Kontrolle der 'CAN-FD-fähigen' Ports im Programmiertool

Stimmen die dort angezeigten Ports (z.B. "CAN1", "CAN2") nicht mit den laut Geräte-Datenblatt CAN-FD-fähigen Schnittstellen überein, kann diese 'Konstante' notfalls manuell editiert werden. Klicken Sie dazu in die Tabellenzelle mit dem (falschen) Wert. Das Programmiertool öffnet daraufhin ein Fenster, in dem der bitweise kombinierte Wert dezimal eingegeben werden kann:


Korrektur der 'CAN-FD-fähigen' Ports im Programmiertool

Jedes Bit im o.g. Wert repräsentiert einen der maximal vier CAN-Ports.
Bit 0 (Maske 1) repräsentiert die "CAN-FD-Unterstützung" von "CAN1",
Bit 1 (Maske 2) repräsentiert die "CAN-FD-Unterstützung" von "CAN2", und so weiter.

Das Programmiertool erlaubt die Konfiguration der flexiblen Datenrate (CAN FD) nur für die CAN-Ports, deren entsprechendes Bit im o.g. Wert gesetzt ist.
Ebenso erlaubt die Simulation im Programmiertool das Senden von CAN-FD-Frames (mit bis zu 64 Bytes im Datenfeld) nur bei laut Geräteprofil CAN-FD-fähigen Ports - unabhängig davon, ob das an den PC angeschlossene CAN-Interface CAN FD unterstützt.



Konfiguration der CAN FD - fähigen Ports im "System Menu"

  (wird, sobald sich die Zeit dafür ergibt, noch übersetzt ...)

In newer CAN FD capable devices like MKT-View V, you can check or modify the CAN (-FD) parameters as follows, without the use of the programming tool:
  1. Simultaneously press function keys F2 + F3 to enter the System menu

  2. Scroll down (using e.g. the rotary encoder) to User Settings and invoke that menu item by pression ENTER (or the encoder's pushbutton).

  3. In the 'User Settings', scroll down to more CAN / CAN FD settings.. and invoke that menu item.

Due to the limited space on some displays, the menu items for the CAN bus parameters are quite short, thus their meanings...
Baudrate
For CAN FD, this is the baudrate (in kbit/second aka "kBaud") for the ARBITRATION PHASE.

Sample Point
For CAN FD, this is the sample point (in percent) for the ARBITRATION PHASE.

SyncJumpWidth
Synchronisation Jump Width for the ARBITRATION PHASE, and (if realisable) also for the DATA PHASE.
May be set to ZERO (or even negative) to let the CAN driver use "good defaults" (hardware specific).

FlexDataRate
Baudrate (in kbit/second) used after an optional "bitrate switch" for CAN FD.
Targets with an 80 MHz clock source for the CAN FD controller (as used in the MKT-View V) support:
1000, 2000, 4000, 5000, and (if the hardware and CAN cables permit) 8000 kbit/second.
Please consult your device's hardware manual for details.

DataSamplePt
For CAN FD, this is the sample point (in percent) for the DATA PHASE (i.e. used after an optional "bitrate switch").
Depending on the CAN FD controller clock, only a few sample points can be realized.
In other terms: What you enter in this field may be just a "wish" - see details further below.
Set this field to ZERO to use the recommendation by CiA (CAN in Automation), "approximately 80 %" or slightly less.


Screenshot of the CAN bus settings in an experimental firmware for the MKT-View V (2026-08-05)


Kontrolle des von der Hardware 'realisierten' CAN FD Bit-Timings

  (wird, sobald sich die Zeit dafür ergibt, noch komplette übersetzt ...)

Wie in den CAN FD bit timing Beispielen erläutert, ist der im Programmiertool einstellbare Abtastpunkt ("Sample Point") nur ein "Wunsch". Abhängig vom CAN-Controller, dessem Taktfrequenz, und der CAN-Bitrate kann der tatsächlich realisierte Abtastpunkt (gemessen in "Prozent innerhalb einer Bit-Zeit) von dem im Programmiertool eingestellten Wert abweichen..
Technischer Hintergrund:
Das Programmiertool kennt weder die Taktfrequenz noch den genauen Typ des am entsprechenden CAN-Port verwendeten Controller, und dessen Fähigkeiten bezüglich der Timing Register (Größe diverser Bitgruppen), Takt-Vorteiler (prescaler), usw.
Das Tool kennt daher weder die Länge eines "Zeitquantums" (tq = time quantum) in Nanosekunden, noch die daraus resultierbare 'Schrittweite' (Granularität) des Abtastpunktes.
Diese Informationen hat nur der CAN-Bus-Treiber im Target, der die optimalen Bit-Timing-Paraeter ("Registerwerte") in einer z.T. recht aufwändigen Iterationsschleife ermittelt.

Geräte mit einer "echten" USB-Schnittstelle und Unterstützung for MTP (Media Transfer Protocol) können einen CAN bus 'status report' in Form einer einfachen Textdatei erzeugen. Darin sind die tatsächlich relisierten (genauen) CAN-Bit-Timing-Parameter enthalten.
Um den 'CAN-Bus-Statusbericht' auszulesen, schließen Sie das Gerät (z.B. MKT-View V) per USB an einen PC an. Unter Windows öffnen Sie den 'Windows Explorer' (ehemals unter dem treffenderem Namen 'File Explorer' bekannt), und versuchen dort in der Baum-Ansicht den MTP-Server im MKT-Gerät zu finden, z.B. "MKT-View V MTP".
Expandieren Sie die Ansicht (in der Baumstruktur) um die verfügbaren "storage media" ("Speichermedien", "Datenträger" oder "Laufwerke") innerhalb des MKT-Views anzuzeigen.
Das Medium names "system" enthält Einträge für diverse Dateien, die erst beim Auslesen per MTP temporär erzeugt werden. Eine dieser Dateien ist /system/can_bus_status.txt, mit dem folgenden Inhalt (hier nur ein kleiner Auszug als Beispiel):

File: /system/can_bus_status.txt
Created: 2026-08-06 08:25:46 by  MKT-View V / CAN FD

CAN1: 500 kbps, SJW=1, tq= 25.0 ns, SamplePt=82 %      ('Sync Jump Width' and bit timing used for the 
                                                           'Arbitration phase' or for 'classic CAN')
      Data Phase: 5000 kbps, tq=12.5 ns, SamplePt=75 %    (bit timing used after CAN FD's optional
                                                           "bitrate switch", in the DATA PHASE)
      Counters: RX=0, TX=0, Error Frames=0    (counters for received and transmitted frames, etc)
      RxFilter: 444, 7F0                      (momentan verwendete CAN message ID filter, hexadezimal)

Details zum Zugriff auf Dateien (inkl. "virtuellen Dateien" im MKT-View unter "system") finden Sie in einer separaten Datei, z.Z. nur in englischer Sprache: Storage Media and Files accessable via Media Transfer Protocol.


Beispiele für das CAN FD Bit Timing (mit Berechnung)

Gemäß einer Empfehlung von CiA (CAN in Automation) werden CAN-FD-fähige CAN Controller in Geräten von MKT Systemtechnik mit 80 MHz getaktet (unabhängig vom CPU-Takt). Alle CAN-Bit-Timing-Parameter, die vom CAN-Treiber wirklich realisiert werden können sind von dieser Frequenz abhängig. Aus den 80 MHz wird durch ganzzahlige Teilung zunächst ein "Time Quantum" (tq) abgeleitet, möglichwerweise unterschiedlich für Arbitrierungs- und Datenphase.
Als Konsequenz sind nur 'bestimmte' Bitraten realisierbar. Je höher die Bitrate, desto 'grober' sind auch die von der Hardware realisierbaren Abtastpunkte (Sample Point), innerhalb eines Bits in der Arbitrierungs- und Datenphase.
Die folgende Skizze verdeutlicht den Zusammenhang:


      |<----- ONE nominal bit time, composed of (1 + Seg1 + Seg2) * tq ----->|
      | ____________________________________________________________________ |
      |/ SYNC_SEG | PROP_SEG | PHASE_SEG1                  |   PHASE_SEG 2  \|
      |\__________|________________________________________|________________/|
      |                                                                      |
      |<--always->|<-------------- "Seg1" ---------------->|<--- "Seg2" ---->|
      |   1 * tq  |                  * tq                  |       * tq      | 
     /|\                                                  /|\               /|\
      |                                                    |                 |
      0 %                                             Sample Point         100 %

    In der "Datenphase" (Date Phase) kann in üblichen CAN FD Controllern (z.B. Bosch "M_CAN")
    der Parameter "TSEG1" (Summe aus "PROP_SEG" plus "PHASE_SEG1") nur als VIER-BIT-Wert,
    und "TSEG2" nur als DREI-BIT-Wert im entsprechenden Register eingestellt werden !
    Konsequenz: Die Anzahl von "tq"s (time quanta) pro Bit in der DATENPHASE unterliegt
    größeren Einschränkungen als in der Arbitrierungsphase (beim Senden des CAN-Message-IDs).
    Ferner kann die Empfehlung von CiA, für Arbitrierungs- und Datenphase den gleichen Vorteiler
    zu verwenden (um einen "Phasensprung" zwischen diesen Phasen zu vermeiden), 
    oft nicht umgesetzt werden.

Die Gerätefirmware (im MKT-View) versucht grundsätzlich, den kleinsten Wert für den "Bitrate Prescaler" zu verwenden. Dies gilt sowohl für die Arbitrierungs- wie auch für die Datenphase. Um die folgenden Beispiele so einfach wie möglich zu halten, verwenden wir hier nur 'hohe Bitraten', bei denen kein Vorteiler nötig ist (der die 80 MHz "CAN-Controller-Takt" durch einen Integer-Wert, oder sogar nur durch eine Zweierpotenz teilen könnte).

Beispiel für 'Flexible Datenraten' (Bitrate nach dem optionalen "Bitrate Switch" bei CAN FD):

  5000 kbit/second und Abtastpunkt "nahe 80 %":

      80 MHz / 5 MHz = 16  (ok, das ist ein Integerwert, also "realisierbar")

      Ohne Bitrate-Prescaler ist ein einzelnes "time quantum" (tq) in diesem Fall:
           tq = 1 / 80 MHz  =  12.5 ns .

      Dies ist das "feinste Raster" für den Abtastpunkt.
      Mit 16 "time quanta per bit" würde ein Abtastpunkt "nahe 80 Prozent" dann bei

           80 [%] * 16 "time quanta" / 100 = 12.8 [*tq]   liegen.

      Die nächstgelegenen Ganzzahlen sind 12 und 13. Daraus ergeben sich die
      REALISEERBAREN Abtastpunkte bei

             100 [%] * 12 / 16 = 75 %
        und  100 [%] * 13 / 16 = 81.25 % .

      Wir entscheiden uns für 75 % (der "ARINC 825"-Empfehlung) für die 5-Mbaud-Datenphase,
      daher:  Abtastung nach 12 von 16 "time quanta", mit
           TSEG1 ("der Registerwert")   = (12-1)-1 = 10 (ok, passt in VIER BITS)
         ,------------------------------------'  |
         '--> "minus Eins" für das SYNC_SEG      |
               ,---------------------------------'
               '--> "minus Eins" weil der Register-Wert "TSEG_1" 
                    auf die Anzahl "time quanta" in "Seg1" MINUS EINS gesetzt wird !

           TSEG2 ("der Registerwert")   = (16-11-1)-1 = 3 (ok, passt in DREI BITS)
     ,--------------------------------------'  | |  |
     '--> Gesamtzahl time-quanta pro Bit       | |  |
           ,-----------------------------------' |  |
           '--> Anzahl time-quanta in "Seg1"     |  |
                ,--------------------------------'  |
                '--> "minus Eins" für das SYNC_SEG  |
                  ,---------------------------------'
                  '-->  "minus Eins" weil der Register-Wert "TSEG_2" 
                        auf die Anzahl "time quanta" in "Seg1" MINUS EINS gesetzt wird !