Aller au contenu principal

mvbdump

Configuration des modules smartIO MVB via USB​

Construction Side 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​

CommandeDescription
RRESET, arrête la séquence de test et désactive les lignes d'entrée A et B
RRRREnforce high level RESET
LDé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
PDé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é »)

CommandeDescription
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.

CommandeParamètreDescriptionExemple
=0Zero : 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 - IDPort Enable : filtre de liste blanche pour les ports ; avec '+', le port indiqué est transmis à l'hôte=P5B0+
=T ###### = Slave Response Timeout/µsTimeout : 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## = MappingX5-Header : Select pin mapping for pin header X5
#: indice de mapping pour les broches C0 .. C1
=X7 # §## = MappingX7-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 ###### = TableReport : 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-MaskScope : 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ôleMnémoniqueParamètreDescriptionExemple
0000.e 0 00End : fin du programme.e 0 00
10##.j 0 #### = indice du mot de contrôle cibleJump : saut vers le mot de programme à la position ##, le comptage commence à 0.j 0 02
2###.r ##### = initialisation du compteur de boucleRepeat : 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 cibleLoop : 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 µsWait : 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 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$MComme mot de données : en-tête MVB-MASTER
A8E3$SComme mot de données : en-tête MVB-SLAVE
7EC3$CComme 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)