mvbdump
Configuración de módulos smartIO MVB mediante USB
La descripción de esta herramienta está en preparación. Por el momento solo se reproduce la ayuda integrada.
Nota: Este software dejará de recibir soporte en el futuro. La funcionalidad se integrará en el futuro en la herramienta smiohp.
Opciones en la línea de comandos
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
Comandos de ejecución
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.
Comandos de control de la FPGA
- La configuración se realiza desde el host a través del canal de transmisión (Tx) de la interfaz serie USB con la que se accede al smartIO.
- La FPGA dispone de una API minimalista basada en caracteres ASCII y, por tanto, fácil de seguir.
- No se devuelve ninguna respuesta de estado sobre los comandos ejecutados.
- Dado que el control se realiza habitualmente desde un código de programa, básicamente no hay integrada ninguna comprobación de sintaxis.
- Los comandos se interpretan y ejecutan inmediatamente durante la transmisión.
- Aun así, la FPGA admite los siguientes elementos de sintaxis habituales:
- todos los caracteres tras // se ignoran como comentario hasta el final de la línea (LF y/o CR)
- los espacios en blanco (0x09, 0x0A, 0x0D, 0x20) se ignoran por lo general; las excepciones se indican explícitamente.
- no se distingue entre mayúsculas y minúsculas
A través de la API pueden manejarse las siguientes funciones:
Comandos directos
| Comando | Descripción |
|---|---|
| R | RESET, detiene la secuencia de prueba y desconecta las líneas de entrada A y B |
| RRRR | Enforce high level RESET |
| L | Inicia la secuencia de prueba con realimentación loopback en la FPGA; la línea A y/o B debe activarse previamente |
| P | Inicia la secuencia de prueba con realimentación externa; la línea A y/o B debe activarse previamente |
| { | Detiene la secuencia de prueba y desconecta las líneas de entrada A y B, introducción de una nueva secuencia de prueba (véase más abajo) |
| ? | Devuelve el número de versión de la FPGA |
| @ | Devuelve los créditos |
| # | Devuelve la clave hash de la versión DBOA |
| // | Comentario, todos los caracteres hasta el final de la línea se ignoran, funciona siempre |
Como interruptor
Como interruptor, formado por una letra seguida inmediatamente (¡sin espacio en blanco!) del carácter '+' o '-' (los valores por defecto son "desactivado")
| Comando | Descripción |
|---|---|
| A+, A- | Recepción en la línea MVB A; se desactiva con RESET o con la introducción/fin del programa |
| B+, B- | Recepción en la línea MVB B; se activa con RESET o con la introducción/fin del programa |
| AB+, AB- | Conmutar simult áneamente la recepción en las líneas MVB A+B, por lo demás como arriba |
| C+, C- | Inserción del CRC recibido en el flujo de datos, p. ej., diagnóstico de puesta en marcha. Un bit de estado en el paquete MVB recibido indica si el paquete contiene CRC |
| E+, E- | Las tramas con condiciones de error se transmiten al host para su análisis |
| M+, M- | Activar el filtro de lista blanca para datos en tiempo real en puertos |
| W+, W- | Inserción del contador de bytes Tx en la trama de datos, p. ej., verificación de la implementación del controlador USB |
| N+, N- | No-Parity (o Parity-don't-care) en el byte CRC, no conforme con EN 91375-3-1§6.1.3: "The resulting 7-bit remainder shall be extended by an even parity bit." |
| X+, X- | Activar el filtro de lista blanca para la comunicación de mensajes |
| S+, S- | Activar el modo ESD, terminación tras Log-0 y EOF corto (solo simulación MVB) |
Como comando con parámetros
Como comando con parámetros, formado por una combinación de '=' y una letra (¡sin espacio en blanco!), seguida de un interruptor +/- o de valores de parámetros numéricos. Los datos deben expresarse siempre en notación hexadecimal con exactamente el número de dígitos indicado.
| Comando | Parámetro | Descripción | Ejemplo |
|---|---|---|---|
| =0 | Zero: borrar todos los filtros de lista blanca | =0 | |
| =D ## § | ## = Device - ID § = Máscara de mensaje | Device Flags: filtro de lista blanca para la comunicación de mensajes; para el ID de dispositivo indicado se transmiten al host los datos de comunicación según la máscara. § es un nibble hexadecimal de 4 bit con la siguiente asignación: "transmitir cuando …" bit0 (1): Single-Cast con Device-ID como emisor Y (*) bit1 (2): Broad-Cast de Device-ID bit2 (4): Single-Cast con Device-ID como receptor Y (*) bit3 (8): Single-Cast con Device-ID (sin dirección) p. ej., 'A' = bit1 + bit3, registro de toda la comunicación desde/hacia este dispositivo | =D20 A |
| =P ###+, =P ###- | ### = Port - ID | Port Enable: filtro de lista blanca para puertos; con '+' el puerto indicado se transmite al host | =P5B0+ |
| =T ### | ### = Timeout de respuesta del esclavo/µs | Timeout: MVB trabaja según el estándar con un timeout de 43 µs para la respuesta del esclavo. Este tiempo puede ajustarse con este comando en el rango 0…1023 µs. | =T02B |
| =X5 0# | # = Mapping | X5-Header: Select pin mapping for pin header X5 #: índice de mapeo para los pines C0 .. C1 | |
| =X7 # § | ## = Mapping | X7-Header: Select pin mapping for pin header X7 #: índice de mapeo para los pines A0 .. A3 §: índice de mapeo para los pines B0 .. B3 | |
| =R ### | ### = Tabla | Report: salida de un volcado binario de la tabla indicada 1: FIFO - punteros de escritura/lectura, estados de la máquina de estados 2: Tx-Prog-RAM 3: FIFO - canal A 4: FIFO - canal B 5: DSO Line A-RAM (¡desactivar antes el scope!) 6: DSO Line B-RAM (¡desactivar antes el scope!) | |
| =S 00# | # = Máscara de habilitación | Scope: habilitación del DSO interno para el registro de las señales de entrada @ 24MHz (=> 16-bit / MVB-bit). El scope necesita 22us hasta armar los triggers para borrar la memoria RAM; para los siguientes 8 eventos de trigger se registran en cada caso 15 bits MVB, incl. 2 bits MVB de pretrigger. La primera palabra de datos contiene en cada caso los triggers que lo han disparado, así como más metainformación y el índice de trama actual. bit0: (1) Trigger con error de CRC del esclavo bit1: (2) Trigger con error de CRC del maestro bit2: (4) Trigger con error de símbolo bit3: (8) Trigger con detección de inicio de trama | =S 00C |
Programa de simulación
Como comando de programación para una secuencia de prueba, que comienza con {, seguido de varias
palabras de programa o de datos separadas entre sí por , y cerrado con }. Para facilitar la creación de una secuencia de prueba, la FPGA puede traducir determinados mnemónicos como comandos de control y valores constantes.
Ejemplo:
{ .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 memoria de programa comprende 256 palabras que pueden utilizarse para comandos de control y datos. Ni en la FPGA ni en la biblioteca de controladores se realiza una comprobación de la longitud programada.
| Palabra de control | Mnemonic | Parámetro | Descripción | Ejemplo |
|---|---|---|---|---|
0000 | .e 0 00 | End: fin del programa | .e 0 00 | |
10## | .j 0 ## | ## = índice de la palabra de control de destino | Jump: salta a la palabra de programa en la posición ##; el recuento comienza en 0 | .j 0 02 |
2### | .r ### | ## = inicialización del contador de bucle | Repeat: permite repetir n veces una sección del programa n = [1 .. 4095] = [0x001 .. 0xFFF] ¡No se puede anidar! | .r 00A.… .l 0 |
30## | .l 0 ## | ## = índice de la palabra de control de destino | Loop: decrementa el contador de bucle y salta a ## si es mayor que cero | …. .l 0 nn |
40## | .w ### | ### = tiempo en µs | Wait: espera T = ### µs antes de la ejecución del siguiente comando T = [1 .. 4095] = [0x001 .. 0xFFF] | .w 064 |
5§## | .f § ## | § = número de medios bits de perturbación## = inicio de la perturbación en medios bits | Failure: invierte, durante § medios bits, tras ## medios bits, la salida MVB simulada. El bit de control del comando .X decide sobre la línea A/B | .f 2 1E |
6§## | .g § ## | § = número de palabras## = a partir de la palabra de datos | Generator: inserta en el flujo de datos, en lugar de las palabras de datos indicadas, valores PRBS de 16 bit, a partir de la palabra ## durante § palabras para § = 0 se generan 16 palabras de datos. | .g 8 01 |
7§## | .x § ## | § = flags de control ## = número de palabras | eXchange: transmite las siguientes ## palabras de datos del programa como datos MVB; con los bits de control del nibble § se conmutan las siguientes funciones: bit0 (1): la primera palabra de datos es el encabezado MVB bit1 (2): genera bytes CRC según la norma en el flujo de datos bit2 (4): añade bits EOF tras la última palabra de datos a la trama las siguientes ## palabras se envían como palabras de datos a la salida de simulación. (normal § := 7) | .x 7 02 , $M , 20B3 |
C§0# | .s § 0# | § = delay line# = time index | Skewing: desfase temporal entre tramas de la línea 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 Al modificar el desfase temporal se retrasa la ejecución del siguiente comando .X hasta que ambas líneas de bus vuelvan a estar libres. | .S 0 04 |
D§$# | .d § $ # | § = Ctrl Line A$ = Ctrl Line B# = Debug out | Debug: §, $: control de la simulación de la línea A/B (normal §, $ := 3) bit0 (1): Enable line output bit1 (2): Enable line error bits bit2 (4): perturbación del bit de inicio #: control de los pines de depuración y opciones (los 2 bits inferiores se llevan a 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§## | .+§ ## | § = comando ## = parámetro | Extended: reservado para un conjunto de comandos ampliado | .+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 | Como palabra de datos: encabezado MVB-MASTER | ||
A8E3 | $S | Como palabra de datos: encabezado MVB-SLAVE | ||
7EC3 | $C | Como palabra de datos: norma EN (6.1.3), valor de ejemplo para el cálculo del CRC => CRC := 0xDD (con bit de paridad conforme a la norma) |