Zum Hauptinhalt springen

mvbdump

Konfiguration von smartIO MVB Modulen über USB

Construction Side Die Beschreibung zu diesem Werkzeug ist in Arbeit. Derzeit ist nur die integrierte Hilfe abgedruckt.

Hinweis: Diese Software wird in Zukunft nicht mehr unterstützt. Die Funktionalität wird zukünftig in dem Werkzeug smiohp integriert.

Optionen auf der Kommandozeile

usage: mvbdump <options>
recommended:
-i <inputBatchFile>
-c <c-sequence>
-s <inputDumpFile>
-o <dumpFile>
-f <format> (def = 0 [bin], 1, 2, ...)
-t <minutes> (def = 0: interactive mode)
-sl (synch to local time)
-sp <port> (synch to TIMEDATE48 in port)
-sw <offset> (synch to TIMEDATE48 at word offset)
optional:
-V print version
-u <usbDevice> (def = '', find by udev)
important: stty -F <usbDevice> raw -echo -echoe -echok

Ablaufbefehle

entering interactive mode:
-q (terminate session)
-t <minutes> (end interactive mode)
-r (device txPreset)
-i <inputBatchFile>
-sl (synch to local time)
-sp <port> <offset> (synch to TIMEDATE48 in port / offset)
all other input will be send to the device.

FPGA Steuerbefehle

  • Die Konfiguration erfolgt vom Host über den Sendekanal (Tx) der seriellen USB-Schnittstelle, unter der das smartIO angesprochen wird.
  • Der FPGA besitzt eine minimalistische API, die auf ASCII-Zeichen basiert und damit leicht nachzuvollziehen ist.
  • Eine Status-Rückmeldung zu den ausgeführten Befehlen erfolgt nicht.
  • Da die Ansteuerung typischer Weise aus einem Programmcode heraus erfolgt, ist im wesentlichen keine Syntaxprüfung integriert.
  • Die Befehle werden unmittelbar mit der Übertragung interpretiert und ausgeführt.
  • Trotzdem bedient der FPGA folgende typische Syntaxelemente:
    • alle Zeichen nach // werden bis zum Zeilenende (LF und/oder CR) als Kommentar ignoriert
    • White-Space (0x09, 0x0A, 0x0D, 0x20) werden i.d.R. ignoriert, Ausnahmen sind explizit genannt.
    • Groß-/Kleinschreibung wird ignoriert

Über die API können folgende Funktionen bedient werden:

Direkte Befehle

BefehlBeschreibung
RRESET, stoppt Testsequenz und schaltet Eingangsleitungen A und B ab
RRRREnforce high level RESET
LStartet Testsequenz mit Loopback-Rückführung im FPGA, Leitung A und/oder B muss vorher aktiviert werden
PStartet Testsequenz mit externer Rückführung, Leitung A und/oder B muss vorher aktiviert werden
{Stoppt Testsequenz und schaltet Eingangsleitungen A und B ab, Eingabe einer neuen Testsequenz (siehe unten)
?Rückgabe der FPGA-Versionsnummer
@Rückgabe der Credits
#Rückgabe des Hash-Keys zur DBOA Version
//Kommentar, alle Zeichen bis zum Zeilenende werden ignoriert, funktioniert immer

Als Schalter

Als Schalter, bestehend aus einem Buchstaben und unmittelbar (ohne White-Space!) gefolgt von dem Zeichen '+' oder '-' (Defaults sind "ausgeschaltet")

BefehlBeschreibung
A+, A-Empfang auf MVB-Leitung A, wird mit RESET oder Programmeingabe/-ende abgeschaltet
B+, B-Empfang auf MVB-Leitung B, wird mit RESET oder Programmeingabe/-ende angeschaltet
AB+, AB-Empfang auf MVB-Leitungen A+B zeitgleich schalten, sonst wie oben
C+, C-Einfügen der empfangenen CRC in den Datenstrom, z.B. Inbetriebnahmediagnose Ein Status-Bit im empfangenen MVB-Paket zeigt an, ob CRCs im Paket enthalten sind
E+, E-Frames mit Fehlerbedingungen werden zur Analyse an den Host übertragen
M+, M-White-List-Filter für Echtzeitdaten in Ports einschalten
W+, W-Einfügen des Tx-Byte-Counters in den Datenframe, z.B. Verifikation der USB-Treiber Implementierung
N+, N-No-Parity (bzw. Parity-don't-care) in CRC Byte, nicht konform zu EN 91375-3-1§6.1.3: "The resulting 7-bit remainder shall be extended by an even parity bit."
X+, X-White-List-Filter für Messagekommunikation einschalten
S+, S-ESD-Mode aktivieren, Terminierung nach Log-0 und kurzes EOF (nur MVB-Simulation)

Als Parameter-Befehl

Als Parameter-Befehl, bestehen aus einer '='-Buchstaben Kombination (ohne White-Space!), gefolgt von einem +/- Schalter oder numerischen Parameter werten. Die Angaben sind immer in hexadezimaler Schreibweise mit exakt der vorgegebenen Anzahl an Stellen auszuführen.

BefehlParameterBeschreibungBeispie
=0Zero: alle White-List-Filter löschen=0
=D ## §## = Device - ID
§ = Message Maske
Device Flags: White-List-Filter für Messagekommunikation, für die angegebene Device-ID werden entsprechend der Maske Kommunikationsdaten an den Host übertragen.
§ ist ein 4-bit Hex-Nibble mit folgender Zuordnung: "übertragen, wenn …"
bit0 (1): Single-Cast mit Device-ID als Sender UND (*)
bit1 (2): Broad-Cast von Device-ID
bit2 (4): Single-Cast mit Device-ID als Receiver UND (*)
bit3 (8): Single-Cast mit Device-ID (ohne Richtung)
z.B. 'A' = bit1 + bit3, Aufzeichnung der gesamten Kommunikation von/zu diesem Device
=D20 A
=P ###+, =P ###-### = Port - IDPort Enable: White-List-Filter für Ports, mit '+' wird der angegeben Port an den Host übertragen=P5B0+
=T ###### = Slave Response Timeout/µsTimeout: MVB arbeitet gemäß Standard mit einem Timeout von 43 µs für die Slave-Antwort. Diese Zeit kann mit diesem Befehl im Bereich 0…1023 µs eingestellt werden.=T02B
=X5 0## = MappingX5-Header: Select pin mapping for pin header X5
#: Mapping-Index für C0 .. C1 - Pins
=X7 # §## = MappingX7-Header: Select pin mapping for pin header X7
#: Mapping-Index für A0 .. A3 - Pins
§: Mapping-Index für B0 .. B3 - Pins
=R ###### = TabelleReport: Ausgabe eines binären Dumps für die angegebene Tabelle
1: FIFO - Schreib-Lesezeiger, Statemachine-States
2: Tx-Prog-RAM
3: FIFO - Kanal A
4: FIFO - Kanal B
5: DSO Line A-RAM (Scope zuvor deaktivieren!)
6: DSO Line B-RAM (Scope zuvor deaktivieren!)
=S 00## = Enable-MaskScope: Freigabe des internen DSO zur Aufzeichnung der Eingangssignale @ 24MHz (=> 16-bit / MVB-bit) Das Scope benötigt 22us bis zur Armierung der Trigger zum Löschen des RAM-Speichers, für die folgenden 8 Trigger-Ereignisse werden jeweils 15 MVB-Bits incl. 2-MVB-Bits Pretrigger aufgezeichnet. Das erste Datenwort enthält jeweils die auslösenden Trigger, sowie weitere Meta-Information und den aktuellen Frame-Idx.
bit0: (1) Trigger mit Slave-CRC Fehler
bit1: (2) Trigger mit Master-CRC Fehler
bit2: (4) Trigger mit Symbolfehler
bit3: (8) Trigger mit Frame-Start-Erkennung
=S 00C

Simulationsprogramm

Als Programmierbefehl für eine Testsequenz, beginnend mit {, gefolgt von mehreren Programm- oder Datenworten, die durch , untereinander getrennt sind und abgeschlossen mit }. Zur leichteren Erstellung einer Testsequenz kann der FPGA bestimmte Mnemonics als Steuerkommandos und konstante Werte übersetzen. Beispiel:

{    .w 064    // Warte 100 µs
, .r 00A // Wiederhole 10 mal …
, .x 7 02 // (*) erzeuge Frame mit 2 Datenworten mit HDR, CRC und EOF
, $M // fügt das Datenwort C715 als Master Header ein
, 0101 // Steuerbefehl vom Master, Lese 16-bit Port 257
, .w 0 04 // Warte 4 us
, .x 7 02 // erzeuge Frame mit 2 Datenworten mit HDR, CRC und EOF
, $S // fügt das Datenwort A8E3 als Slave Header ein
, 1234 // Simuliertes Antwort-Byte vom Slave
, .w 010 // Warte 16 us
, .l 0 02 // Wiederhole ab (*)
, .e 0 00 // Programm Ende
}

Der Programmspeicher umfasst 256 Worte, die für Steuerbefehle und Daten verwendet werden können. Eine Überprüfung auf die programmierte Länge erfolgt weder im FPGA noch der Treiber-Bibliothek!

SteuerwortMnemonicParameterBeschreibungBeispiel
0000.e 0 00End: Programm Ende.e 0 00
10##.j 0 #### = Index des ZielsteuerwortsJump: Springe zum Programmwort an Position ##, Zählung beginnt bei 0.j 0 02
2###.r ##### = Initialisierung SchleifenzählerRepeat: Erlaubt, einen Abschnitt des Programm n-fach zu wiederholen n = [1 .. 4095] = [0x001 .. 0xFFF] Nicht kaskadierbar !.r 00A.… .l 0
30##.l 0 #### = Index des ZielsteuerwortsLoop: Dekrementiere Schleifenzähler und Springe nach ## wenn größer Null…. .l 0 nn
40##.w ###### = Zeit in µsWait: Warte für T = ### µs vor der Ausführung des nächsten Befehls T = [1 .. 4095] = [0x001 .. 0xFFF].w 064
5§##.f § ##§ = Anzahl der 1/2-Störbits
## = Start der Störung in 1/2-bits
Failure: Invertiere für § halbe Bits nach ## halben Bits die simulierte MVB Ausgabe. Steuerbit im .X-Kommando entscheidet über Leitung A/B.f 2 1E
6§##.g § ##§ = Anzahl der Worte
## = ab Datenwort
Generator: füge statt der angegebenen Datenworte 16-bit PRBS Werte in den Datenstrom ein, ab Wort ## für § Worte
für § = 0 werden 16 Datenworte generiert.
.g 8 01
7§##.x § ##§ = Steuerflags
## = Anzahl der Worte
eXchange: Übertrage die folgenden ## Datenworte im Programm als MVB-Daten, wobei mit den Steuerbits in dem Nibble-§ folgende Funktionen geschaltet werden:
bit0 (1): erstes Datenwort ist MVB-Header
bit1 (2): erzeuge CRC-Bytes nach Norm im Datenstrom
bit2 (4): füge EOF-Bits nach dem letzten Datenwort an den Frame die folgenden
##-Worte werden als Datenworte auf den Simulationsausgang gesendet. (normal § := 7)
.x 7 02 , $M , 20B3
C§0#.s § 0#§ = delay line
# = time index
Skewing: Zeitverschiebung zwischen A/B-Line Frames
§: delay line B (0) or line A (1)
0:A first, B delayed
1: B: first, A: delayed
#: time-index of delay, [0..7]
0: 0 .00 µs (perfect sync, never ever)
1: 0 .33 µs (1/2 bit time)
2: 1 .00 µs (3/2 bit times) 
3: 7.65 µs
4: 7.99 µs (critical)
5: 8.30 µs
6: 9.67 µs
7: 10.34 µs
Mit dem Ändern der Zeitverschiebung wird die Ausführung des folgenden .X-Befehls verzögert, bis beide Busleitungen wieder freigegeben sind.
.S 0 04
D§$#.d § $ #§ = Ctrl Line A
$ = Ctrl Line B
# = Debug out
Debug: §, $: Steuerung Line A/B Simulation (normal §, $ := 3)
bit0 (1): Enable line output
bit1 (2): Enable line error bits
bit2 (4): Startbit-Störung
#: Steuerung Debug Pins und Optionen (
2 untere Bits sind auf X5 herausgeführt)
bit0 (1): Header X5:Pin X0, (select mapping 4, =X504)
bit1 (2): Header X5:Pin X1, (select mapping 4, =X504)
.D 3 3 3
E§##.+§ ##§ = Kommando
## = Parameter
Extended: reserviert für erweiterten Befehlssatz.+N ##
E4##.+w #### = time grid in msWait on ms-grid point, which is ## ms since last .+w command ahead.+w 01
E…tbd
EF00.+N 00NoOperation
F000.N 0 00NoOperation
C715$MAls Datenwort: MVB-MASTER-Header
A8E3$SAls Datenwort: MVB-SLAVE-Header
7EC3$CAls Datenwort: EN-Norm (6.1.3), Beispielwert für CRC Berechnung => CRC := 0xDD (mit Norm-konformen Parity-Bit)