Capítulo 7. Protocolo de comunicación
Contenido de este capítulo
Introducción
Este capitulo contiene la especificación del protocolo de comunicación junto
con los requisitos tenidos en cuenta para su diseño.
Requisitos
Al diseñar el protocolo de comunicación, se tuvieron en cuenta los siguientes
requisitos:
- comunicación lineal (comando, respuesta) - para que pueda ser fácilmente adaptado a una conexión serie
- comandos y respuestas ASCII - el formato de los comandos y respuestas debe ser tal que pueda ser controlado y depurado desde una terminal de texto ASCII (como Hyperterminal o similar)
- posibilidad de transferencia binaria - para acelerar las transferencias entre la PC y el osciloscopio
- comandos y respuestas simples - puesto que la capacidad de procesamiento del PIC es reducida, el protocolo debe ser fácilmente parseable.
Para cumplir con el cuarto requisito se decidió que los comandos constaran de
un largo fijo de 4 caracteres.
Introducción
El protocolo es bien simple y consta de un único tipo de interacción: *comando
y respuesta*. Cada comando puede tener uno o ningún parámetro. Los comandos son
enviados desde el PC al osciloscopio y son seguidos obligatoriamente por una
respuesta (del osciloscopio al PC). No se puede enviar un nuevo comando hasta
no haber recibido la respuesta del anterior, salvo por el comando STOP que
cancela el comando en curso.
A continuación se presenta un diagrama de dicha interacción:
Diagrama de la interacción
comando
| PC | ---------------------> | Osciloscopio |
respuesta
| PC | <--------------------- | Osciloscopio |
Comandos
Los comandos tienen la finalidad de enviar una solicitud al osciloscopio para que realice una acción y devuelva una respuesta, ya sea para confirmar el comando recibido, o para devolver el dato solicitado en el comando.
Formato de comandos
El formato de los comandos es el siguiente:
| COMANDO | espacio | PARAMETRO | \n |
4 bytes 1 byte 0..n bytes 1 byte
CMD_ID = identificador del comando en ASCII (4 caracteres)
PARAMETRO = parámetro del comando (un número en formato ASCII).
si el comando no tiene parámetros este valor es ignorado.
espacio = un espacio (caracter ASCII 32)
\n = fin de linea (caracter ASCII 10)
Comandos de captura
Los siguientes comandos sirven para solicitar una captura de datos al
osciloscopio. Por más información sobre los distintos tipos de captura consulte el
Capítulo 5 - Firmware.
AQHI
Ejecuta una captura de alta velocidad con los parámetros pre-fijados (a través de los comandos STxx) y devuelve los valores.
Si el formato binario esta habilitado (BINA 1) los datos se devuelven como bytes adyacentes en formato binario. El valor de cada byte puede ser de 0-255 que equivale justamente a los 8 bits de resolución del osciloscopio.
Si el formato binario está deshabilitado (BINA 0) los datos se devuelven como
números en formato ASCII separados por un espacio. Por ejemplo: 34 123 243.
Todos esos números están entre 0 y 255.
Los parámetros de la captura pueden ser ajustados a través de los comandos
HDIV, VTRI, VDIV, DUAL y CHOP.
- Parámetro: cantidad de muestras a devolver.
- Valores posibles: 1 - 65535
- Valor por defecto: 65535
AQME
Similar a AQHI, pero la captura se ejecuta a media velocidad (las escrituras a memoria son controladas por el PIC).
- Parámetro: cantidad de muestras a devolver.
- Valores posibles: 1 - 65535
- Valor por defecto: 65535
AQLO
Similar a AQHI y AQME, pero la captura se realiza en tiempo real, transfiriendo
las muestras a medida que se van capturando. Este comando soporta el valor
especial 0 como parámetro lo cual significa seguir capturando sin detenerse, o
hasta recibir un comando STOP, en lugar de transferir una cantidad pre-definida
de valores.
- Parámetro: cantidad de muestras a devolver o selección del modo de captura
- Valores posibles:
- 1 - 65535 - cantidad muestras a devolver
- 0 = captura continua (sigue capturando hasta recibir un comando STOP)
- Valor por defecto: 0
Comandos de configuración
Los comandos de configuración permiten configurar diversos aspectos del
funcionamiento de la captura de datos y deben ser enviados antes del comando de
captura.
CHAN
Selecciona el canal a usar para capturar los datos. Solo tiene validez cuando el osciloscopio funciona en modo simple canal (DUAL=0).
- Valores posibles del parámetro:
- 1 - canal 1 (valor por defecto)
- 2 - canal 2
ADDR
Especifica la dirección a partir de la cual se leerá el contenido de la memoria
en los comandos de captura, y también en el comando DUMP. Este comando está
pensado para fines depurativos.
- Valores posibles del parámetro: 1 - 65535
HDIV
Especifica la división horizontal a usar. Sirve para enlentecer el comando de captura y así obtener una serie de muestras más espaciadas en el tiempo.
- Valores posibles del parámetro: 0 - 65535
VDV1
Selecciona la escala de voltaje a usar en el canal 1.
- Valores posibles del parámetro:
- 0 - ±5V (valor por defecto)
- 1 - ±10V
- 2 - ±20V
- 3 - ±40V
VDV2
Selecciona la escala de voltaje a usar en el canal 2.
- Valores posibles del parámetro:
- 0 - ±5V (valor por defecto)
- 1 - ±10V
- 2 - ±20V
- 3 - ±40V
BINA
Configura el modo binario de transferencia de los comandos de captura
(AQHI/AQME/AQLO). Los formatos disponibles son: binario y ASCII. El formato
binario es más eficiente en cuanto a velocidad. El formato ASCII es legible en
una terminal de texto como Hyperterminal.
- Valores posibles del parámetro:
- 0 - deshabilitar modo binario
- 1 - habilitar modo binario (valor por defecto)
DUAL
Configura el modo dual de captura.
- Valores posibles del parámetro:
- 0 - habilita captura de un único canal (valor por defecto)
- 1 - habilita captura de ambos canales
CHOP
Configura la forma en que serán recibidas las muestras del osciloscopio. Si
está habilitado, se recibirá una muestra por cada canal alternadamente. Por el
contrario, si está deshabilitado, se recibirán primero todas las muestras del
canal 1 y luego todas las muestras del canal 2.
Esta opción tiene validez únicamente cuando está habilitado el modo Dual.
- Valores posibles del parámetro:
- 0 - deshabilita el modo chop (valor por defecto)
- 1 - habilita el modo chop
Comandos de control
Los siguientes comandos sirven para controlar el estado del osciloscopio.
STOP
Detiene el comando de captura en curso. Pensado para utilizar principalmente
con el modo continuo del comando AQLO.
RSET
Resetea el osciloscopio, volviendo todas los parámetros de configuración a su
valor por defecto.
Comandos de diagnóstico
Los siguientes comandos sirven para monitorear el estado del osciloscopio y obtener información sobre el mismo.
PING
Devuelve OK si el osciloscopio está activo.
VERS
Devuelve la versión de firmware del osciloscopio, en formato ASCII 8-bit.
Comandos de depuración
Los siguientes comandos sirven para depurar el osciloscopio y están pensados
para ser usados únicamente para testear el correcto funcionamiento del mismo.
No tienen ninguna utilidad para la aplicación que interactuará con el usuario
final.
WRLO
Escribe una señal cuadrada en la memoria a baja velocidad (controlada por el PIC). El parámetro pasado es la cantidad de muestras a escribir. Esta función existe únicamente para fines depurativos.
- Valores posibles del parámetro: 0 - 65535
WRHI
Escribe un mismo valor en todas las posiciones de la memoria a alta velocidad
(controlado por el contador). El parámetro pasado es el valor a escribir. Esta
función existe únicamente para findes depurativos.
- Valores posibles del parámetro: 0 - 255
DUMP
Vuelca el contenido de la memoria, para el canal seleccionado con el comando
CHAN y a partir de la dirección especificada con el comando ADDR. El parámetro
pasado es la cantidad de muestras a volcar.
- Valores posibles del parámetro: 1 - 65535
Respuestas
La respuesta es la reacción del osciloscopio a un comando. Todos los comandos
devuelven una respuesta. Para enviar un nuevo comando se debe esperar a recibir
la respuesta del último comando enviado, salvo por el comando STOP que cancela
el comando actual.
Existen dos tipos de respuestas:
- respuestas con datos - son aquellas que devuelven valores
- respuestas sin datos - son aquellas que no devuelven valores
Formato de respuestas
El formato de las respuestas es el siguiente:
Respuestas con datos:
| CODIGO | espacio | NOMBRE | espacio | LARGO | \n | DATOS | \n |
| 4 bytes | 1 byte | n bytes | 1 byte | n bytes | 1 byte | n bytes | 1 byte |
Respuestas sin datos:
| CODIGO | espacio | NOMBRE | \n |
| 4 bytes | 1 byte | n bytes | 1 byte |
CODIGO = código de respuesta (número en formato ASCII)
NOMBRE = un nombre descriptivo de la respuesta (en formato ASCII)
LARGO = cantidad de bytes de la respuesta incluyendo el último \n (en formato ASCII)
solo para comandos que devuelven datos.
DATOS = datos de la respuesta (en formato ASCII o binario según corresponda)
solo para comandos que devuelven datos.
espacio = un espacio (caracter ASCII 32)
\n = fin de linea (caracter ASCII 10)
Códigos de respuesta
Los códigos de respuestas disponibles (en la versión de firmware 1.00) son los
siguientes:
| Código | Nombre | Significado |
| 0 | OK | comando aceptado |
| 1 | UNKNOWN | comando desconocido |
| 2 | OUT-OF-RANGE | valor fuera de rango |
| 3 | BUSY | el osciloscopio está ocupado ejecutando otro comando |
Tabla 7.1 Códigos de respuesta
Ejemplos de sesión (comandos y respuestas)
PING
0 OK
VERS
0 OK 5
1.00
HDIV 128
0 OK
AQHI 5
0 OK 6
%!_P^
BINA 0
0 OK
AQHI 5
0 OK 18
24 123 203 129 56
CAPTURAR 343
1 UNKNOWN