mvbdump
Configuration des modules smartIO MVB via USB
La description de cet outil est en cours de rédaction. Pour l'instant, seule l'aide intégrée est reproduite.
Remarque : ce logiciel ne sera plus pris en charge à l'avenir. Sa fonctionnalité sera intégrée à l'avenir dans l'outil smiohp.
Options en ligne de commande
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
Commandes de déroulement
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.
Commandes de pilotage du FPGA
- La configuration s'effectue depuis l'hôte via le canal d'émission (Tx) de l'interface série USB par laquelle le smartIO est adressé.
- Le FPGA possède une API minimaliste, basée sur des caractères ASCII et donc facile à comprendre.
- Aucun retour d'état n'est fourni pour les commandes exécutées.
- Le pilotage s'effectuant typiquement depuis un code de programme, aucune vérification de syntaxe n'est essentiellement intégrée.
- Les commandes sont interprétées et exécutées immédiatement lors de la transmission.
- Le FPGA prend néanmoins en charge les éléments de syntaxe typiques suivants :
- tous les caractères après // sont ignorés comme commentaire jusqu'à la fin de la ligne (LF et/ou CR)
- les espaces blancs (0x09, 0x0A, 0x0D, 0x20) sont en général ignorés, les exceptions sont mentionnées explicitement.
- la casse (majuscules/minuscules) est ignorée
Les fonctions suivantes peuvent être pilotées via l'API :
Commandes directes
| Commande | Description |
|---|---|
| R | RESET, arrête la séquence de test et désactive les lignes d'entrée A et B |
| RRRR | Enforce high level RESET |
| L | Démarre la séquence de test avec rebouclage (loopback) dans le FPGA ; la ligne A et/ou B doit avoir été activée au préalable |
| P | Démarre la séquence de test avec rebouclage externe ; la ligne A et/ou B doit avoir été activée au préalable |
| { | Arrête la séquence de test et désactive les lignes d'entrée A et B, saisie d'une nouvelle séquence de test (voir ci-dessous) |
| ? | Retourne le numéro de version du FPGA |
| @ | Retourne les crédits |
| # | Retourne la clé de hachage de la version DBOA |
| // | Commentaire, tous les caractères jusqu'à la fin de la ligne sont ignorés, fonctionne toujours |
Sous forme d'interrupteurs
Sous forme d'interrupteurs, constitués d'une lettre immédiatement suivie (sans espace blanc !) du caractère '+' ou '-' (les valeurs par défaut sont « désactivé »)
| Commande | Description |
|---|---|
| A+, A- | Réception sur la ligne MVB A, désactivée par RESET ou à la saisie/fin du programme |
| B+, B- | Réception sur la ligne MVB B, activée par RESET ou à la saisie/fin du programme |
| AB+, AB- | Commuter simultanément la réception sur les lignes MVB A+B, pour le reste comme ci-dessus |
| C+, C- | Insertion du CRC reçu dans le flux de données, par ex. diagnostic de mise en service. Un bit d'état dans le paquet MVB reçu indique si des CRC sont contenus dans le paquet |
| E+, E- | Les trames présentant des conditions d'erreur sont transmises à l'hôte pour analyse |
| M+, M- | Activer le filtre de liste blanche (white list) pour les données temps réel dans les ports |
| W+, W- | Insertion du compteur d'octets Tx dans la trame de données, par ex. vérification de l'implémentation du pilote USB |
| N+, N- | No-Parity (ou Parity-don't-care) dans l'octet CRC, non conforme à EN 91375-3-1§6.1.3: "The resulting 7-bit remainder shall be extended by an even parity bit." |
| X+, X- | Activer le filtre de liste blanche pour la communication par messages |
| S+, S- | Activer le mode ESD, terminaison après Log-0 et EOF court (simulation MVB uniquement) |
Sous forme de commande à paramètres
Sous forme de commande à paramètres, constituée d'une combinaison '='-lettre (sans espace blanc !), suivie d'un interrupteur +/- ou de valeurs de paramètres numériques. Les indications doivent toujours être données en notation hexadécimale avec exactement le nombre de chiffres prescrit.
| Commande | Paramètre | Description | Exemple |
|---|---|---|---|
| =0 | Zero : supprimer tous les filtres de liste blanche | =0 | |
| =D ## § | ## = Device - ID § = masque de message | Device Flags : filtre de liste blanche pour la communication par messages ; pour l'ID d'appareil indiqué, les données de communication sont transmises à l'hôte selon le masque. § est un quartet hexadécimal de 4 bits avec l'affectation suivante : « transmettre si … » bit0 (1) : Single-Cast avec Device-ID comme émetteur ET (*) bit1 (2) : Broad-Cast de Device-ID bit2 (4) : Single-Cast avec Device-ID comme récepteur ET (*) bit3 (8) : Single-Cast avec Device-ID (sans direction) par ex. 'A' = bit1 + bit3, enregistrement de toute la communication depuis/vers cet appareil | =D20 A |
| =P ###+, =P ###- | ### = Port - ID | Port Enable : filtre de liste blanche pour les ports ; avec '+', le port indiqué est transmis à l'hôte | =P5B0+ |
| =T ### | ### = Slave Response Timeout/µs | Timeout : conformément à la norme, le MVB fonctionne avec un timeout de 43 µs pour la réponse de l'esclave. Ce délai peut être réglé avec cette commande dans la plage 0…1023 µs. | =T02B |
| =X5 0# | # = Mapping | X5-Header : Select pin mapping for pin header X5 #: indice de mapping pour les broches C0 .. C1 | |
| =X7 # § | ## = Mapping | X7-Header : Select pin mapping for pin header X7 #: indice de mapping pour les broches A0 .. A3 §: indice de mapping pour les broches B0 .. B3 | |
| =R ### | ### = Table | Report : sortie d'un dump binaire pour la table indiquée 1 : FIFO - pointeurs d'écriture/lecture, états de la machine d'états 2 : Tx-Prog-RAM 3 : FIFO - canal A 4 : FIFO - canal B 5 : DSO Line A-RAM (désactiver le scope au préalable !) 6 : DSO Line B-RAM (désactiver le scope au préalable !) | |
| =S 00# | # = Enable-Mask | Scope : activation du DSO interne pour l'enregistrement des signaux d'entrée @ 24MHz (=> 16 bits / bit MVB). Le scope a besoin de 22us jusqu'à l'armement des déclencheurs pour effacer la mémoire RAM ; pour les 8 événements de déclenchement suivants, 15 bits MVB, dont 2 bits MVB de pré-déclenchement, sont enregistrés à chaque fois. Le premier mot de données contient à chaque fois les déclencheurs à l'origine, ainsi que d'autres méta-informations et l'indice de trame actuel. bit0 : (1) déclenchement sur erreur CRC esclave bit1 : (2) déclenchement sur erreur CRC maître bit2 : (4) déclenchement sur erreur de symbole bit3 : (8) déclenchement sur détection de début de trame | =S 00C |
Programme de simulation
Comme commande de programmation pour une séquence de test, commençant par {, suivie de plusieurs
mots de programme ou de données séparés les uns des autres par , et terminée par }. Pour faciliter la création d'une séquence de test, le FPGA peut traduire certains mnémoniques en commandes de contrôle et en valeurs constantes.
Exemple :
{ .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
}
La mémoire de programme comprend 256 mots, utilisables pour les commandes de contrôle et les données. Aucune vérification de la longueur programmée n'est effectuée, ni dans le FPGA ni dans la bibliothèque de pilotes !
| Mot de contrôle | Mnémonique | Paramètre | Description | Exemple |
|---|---|---|---|---|
0000 | .e 0 00 | End : fin du programme | .e 0 00 | |
10## | .j 0 ## | ## = indice du mot de contrôle cible | Jump : saut vers le mot de programme à la position ##, le comptage commence à 0 | .j 0 02 |
2### | .r ### | ## = initialisation du compteur de boucle | Repeat : permet de répéter n fois une section du programme n = [1 .. 4095] = [0x001 .. 0xFFF] Non imbriquable ! | .r 00A.… .l 0 |
30## | .l 0 ## | ## = indice du mot de contrôle cible | Loop : décrémente le compteur de boucle et saute vers ## s'il est supérieur à zéro | …. .l 0 nn |
40## | .w ### | ### = durée en µs | Wait : attendre T = ### µs avant l'exécution de la commande suivante T = [1 .. 4095] = [0x001 .. 0xFFF] | .w 064 |
5§## | .f § ## | § = nombre de demi-bits perturbateurs## = début de la perturbation en demi-bits | Failure : inverser pendant § demi-bits, après ## demi-bits, la sortie MVB simulée. Le bit de contrôle dans la commande .X détermine la ligne A/B | .f 2 1E |
6§## | .g § ## | § = nombre de mots## = à partir du mot de données | Generator : insérer dans le flux de données, à la place des mots de données indiqués, des valeurs PRBS de 16 bits, à partir du mot ## pour § mots pour § = 0, 16 mots de données sont générés. | .g 8 01 |
7§## | .x § ## | § = indicateurs de contrôle ## = nombre de mots | eXchange : transmettre les ## mots de données suivants du programme comme données MVB, les bits de contrôle dans le quartet § commutant les fonctions suivantes : bit0 (1) : le premier mot de données est l'en-tête MVB bit1 (2) : générer les octets CRC conformément à la norme dans le flux de données bit2 (4) : ajouter les bits EOF après le dernier mot de données de la trame. Les ## mots suivants sont envoyés comme mots de données sur la sortie de simulation. (normal § := 7) | .x 7 02 , $M , 20B3 |
C§0# | .s § 0# | § = delay line# = time index | Skewing : décalage temporel entre les trames des lignes A/B § : 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 La modification du décalage temporel retarde l'exécution de la commande .X suivante jusqu'à ce que les deux lignes de bus soient de nouveau libres. | .S 0 04 |
D§$# | .d § $ # | § = Ctrl Line A$ = Ctrl Line B# = Debug out | Debug : §, $ : pilotage de la simulation Line A/B (normal §, $ := 3) bit0 (1) : Enable line output bit1 (2) : Enable line error bits bit2 (4) : perturbation du bit de start # : pilotage des broches de debug et des options (les 2 bits de poids faible sont sortis sur X5) 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§## | .+§ ## | § = commande ## = paramètre | Extended : réservé pour un jeu de commandes étendu | .+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 | Comme mot de données : en-tête MVB-MASTER | ||
A8E3 | $S | Comme mot de données : en-tête MVB-SLAVE | ||
7EC3 | $C | Comme mot de données : norme EN (6.1.3), valeur d'exemple pour le calcul du CRC => CRC := 0xDD (avec bit de parité conforme à la norme) |