mvbdump
Konfiguration von smartIO MVB Modulen über USB
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
Befehl | Beschreibung |
---|---|
R | RESET, stoppt Testsequenz und schaltet Eingangsleitungen A und B ab |
RRRR | Enforce high level RESET |
L | Startet Testsequenz mit Loopback-Rückführung im FPGA, Leitung A und/oder B muss vorher aktiviert werden |
P | Startet 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")
Befehl | Beschreibung |
---|---|
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.
Befehl | Parameter | Beschreibung | Beispie |
---|---|---|---|
=0 | Zero: 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 - ID | Port Enable: White-List-Filter für Ports, mit '+' wird der angegeben Port an den Host übertragen | =P5B0+ |
=T ### | ### = Slave Response Timeout/µs | Timeout: 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# | # = Mapping | X5-Header: Select pin mapping for pin header X5 #: Mapping-Index für C0 .. C1 - Pins | |
=X7 # § | ## = Mapping | X7-Header: Select pin mapping for pin header X7 #: Mapping-Index für A0 .. A3 - Pins §: Mapping-Index für B0 .. B3 - Pins | |
=R ### | ### = Tabelle | Report: 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-Mask | Scope: 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!
Steuerwort | Mnemonic | Parameter | Beschreibung | Beispiel |
---|---|---|---|---|
0000 | .e 0 00 | End: Programm Ende | .e 0 00 | |
10## | .j 0 ## | ## = Index des Zielsteuerworts | Jump: Springe zum Programmwort an Position ## , Zählung beginnt bei 0 | .j 0 02 |
2### | .r ### | ## = Initialisierung Schleifenzähler | Repeat: 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 Zielsteuerworts | Loop: Dekrementiere Schleifenzähler und Springe nach ## wenn größer Null | …. .l 0 nn |
40## | .w ### | ### = Zeit in µs | Wait: 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 ms | Wait on ms-grid point, which is ## ms since last .+w command ahead | .+w 01 |
E… | tbd | |||
EF00 | .+N 00 | NoOperation | ||
F000 | .N 0 00 | NoOperation | ||
C715 | $M | Als Datenwort: MVB-MASTER-Header | ||
A8E3 | $S | Als Datenwort: MVB-SLAVE-Header | ||
7EC3 | $C | Als Datenwort: EN-Norm (6.1.3), Beispielwert für CRC Berechnung => CRC := 0xDD (mit Norm-konformen Parity-Bit) |