Está en la página 1de 13

Introduccin a la

especificacin MDB/ICP
29/09/2015 Patxi Ballesteros Protocolos

MDB/ICP son las siglas de Multi-Drop Bus/Internal


Communication Protocol. Aqu voy a describir la versin 4.2 de la
especificacin.
MDB es un protocolo utilizado en las mquinas de vending para
interconectar diferentes mdulos, como pueden ser: Monederos
(coin changers), billeteros (bill acceptors) y lectores RFID.
El protocolo MDB transmite las seales por un bus serie que
trabaja a 9600 baudios en una configuracin maestro-esclavo,
donde todos los perifricos son esclavos de un controlador
maestro. Cada perifrico tiene una direccin nica y un conjunto
de comandos.
El maestro sondea continuamente el bus para conocer la actividad
de los perifricos. Es decir, cada perifrico recibe una encuesta y
ste responde con un acuse de recibo, acuse de recibo negativo, o
datos especficos dependiendo de la actividad que est realizando.
Si un perifrico no responde dentro de un tiempo predefinido se
supone que no est presente en el bus. Las colisiones dentro del
bus se evitan debido a que cada perifrico solo responde cuando es
encuestado. Como solo hay un maestro, y toda comunicacin es
iniciada por ste, las colisiones en el bus se evitan fcilmente.
El protocolo MDB tiene tres niveles funcionales. El nivel 3 es el
que ms comandos soporta. Ningn dispositivo responder a
comandos de un nivel superior al suyo.

Comunicacin
El protocolo MDB utiliza una transmisin serie asncrona para el
envo de los datos. La velocidad de transmisin es de 9600
baudios con una codificacin NRZ.
Se transmiten 11 bits: 1 bit de arranque, 8 bits de datos (primero el
LSB), 1 bit de modo y 1 bit de parada.

Bit de modo en la transmisin de Maestro a perifrico: El


bit de modo a 1 indica un byte de direccin, si es un 0 indica un
byte de datos. La direccin la leen todos los perifricos, pero solo
responde el que tiene esa direccin. El byte de datos solo lo lee el
perifrico direccionado.
Bit de modo en la transmisin de perifrico a maestro: Se
pone a 1 cuando el perifrico enva el ltimo byte del bloque de
datos.

Formato del bloque

Maestro a perifrico
La transmisin de un comando desde el maestro hasta un
perifrico consiste en:

1.

Un byte con la direccin del perifrico (bits 3, 4, 5, 6 y 7) y un


comando (bits 0,1 y 2). Modo = 1

2.

Opcionalmente un byte con un subcomando. Modo = 0

3.

Opcionalmente n bytes de datos. Modo = 0

4.

Un byte con el checksum. Modo = 0


El maestro puede responder a un perifrico con ACK, NAK o
RET. Modo = 0

Perifrico a maestro
La respuesta de un perifrico al comando enviado por el maestro
consiste en:

1.

N bytes de datos. Modo = 0

2.

un byte con el checksum. Modo = 1


Si no tiene nada que enviar al maestro responder con ACK. Modo
=1
Si no recibe lo que esperaba responder con NAK. Modo = 1

Checksum
El byte de checksum se calcula sumando todos los bytes del bloque
enviado. El bit de acarreo en el checksum se ignora ya que el
checksum es de 8 bits.

En la siguiente imagen se muestra un ejemplo del clculo del


checksum en un bloque de datos enviado por el maestro. Observe
como al resultado de sumar los seis bytes, es decir a 0x23E, se le
aplica un AND 0xFF para quedarse solo con 8 bits e ignorar el
acarreo.

Tiempo de respuesta
Si el maestro no recibe una respuesta del perifrico en 5 ms
volver a enviar el mismo comando u otro distinto hasta que
reciba una respuesta o pase un tiempo de espera configurado por
el perifrico. Este tiempo por defecto se puede aumentar en la
configuracin que enva el perifrico al maestro en el comando
Setup. Ms adelante veremos este comando.
Una vez transcurrido este tiempo mximo de espera, el maestro
enviar al perifrico un comando RESET por lo menos cada 10
segundos.

Cdigos de respuesta

ACK = 0x00

RET = 0xAA

NAK = 0xFF

Hardware
Como he comentado en el punto anterior, el protocolo MDB utiliza
un bus para la transmisin y recepcin de las seales entre el
maestro (VMC) y los esclavos (dispositivos perifricos). En la
siguiente figura se muestra un esquema de las conexiones entre los
distintos dispositivos de una mquina de vending.

Los perifricos se aslan elctricamente del bus mediante unos


optoacopladores, ver siguiente imagen.

Dispositivo cashless
Un dispositivo cashless es un dispositivo para realizar pagos sin
dinero en efectivo, por ejemplo, una tarjeta prepaga o un telfono
mvil con tecnologa NFC o mediante cdigos QR.
El cashless es un esclavo en el bus MDB y las direcciones
reservadas para este dispositivo son la 10H y la 60H, utilizare la
direccin 10H en el resto de la explicacin.

El VMC est continuamente sondeando a los perifricos con el


comando POLL. El cashless deber esperar a este comando si tiene
algo que comunicar al VMC.

En la imagen se observa que el primer byte del bloque es el


comando 2H (RESET) enviado a la direccin 10H (Cashless). En
binario sera 1 00010 010 = 112H (el primer bit es el 8). Es decir,
bits 0, 1 y 2 son el comando 2H y los bits 3, 4, 5, 6 y 7 la direccin
10H. El bit 8 es el modo que como es 1 indica que el dato lleva una
direccin.
El segundo byte del bloque es el checksum calculado como se ha
explicado en uno de los puntos anteriores.
El cashless simplemente devuelve ACK con el bit de modo a 1 por
ser el ltimo byte, y nico en este caso, del bloque de su respuesta.

Estados
Un dispositivo cashless se puede ver como una mquina de
estados (ver siguiente Figura), estos son:
1.

Inactive

2.

Disabled

3.

Enabled

4.

Session Idle

5.

Vend

Inactive
Es el estado inicial del cashless. Se llega a l tras alimentar al
dispositivo o al hacer un RESET en cualquiera de los estados. En
este estado el dispositivo no est disponible.
El VMC enva un comando de RESET al dispositivo.

Seguidamente el VMC se dedica a enviar comandos POLL. Cuando


el cashless est listo responde con el comando JUST RESET.

A continuacin, el VMC enva el comando SETUP con su


configuracin y el cashless le responde con la suya. En este
ejemplo el VMC le est indicando que trabaja en el nivel 2 y el
display que tiene (n de filas y columnas). El cashless le responde
que trabaja en el nivel 1, el cdigo del pas, el factor de escala y los
decimales que emplea en los valores del crdito, el tiempo mximo
de espera sin respuesta y un ltimo byte para configurar otros
aspectos como es la recarga de saldo.

El VMC enva de nuevo el comando SETUP pero con otro


subcomando, el que se refiere a la configuracin Max/Min precios.

Entonces el cashless responde con ACK y pasa al estado Disabled.

Disabled
En este estado el cashless recibir varios comandos POLL y si todo
est bien el VMC enviar un comando READER ENABLE que
pasar al cashless al estado Enabled.

Enabled
En este estado el dispositivo cashless est preparado para recibir
una seal externa que le haga iniciar una sesin de venta, por
ejemplo, un cliente acerca su terminal mvil al tag NFC. En este
estado se responde a un comando POLL con BEGIN SESSION,
esta respuesta consiste en un bloque de datos con el importe
introducido para realizar una compra.

El dispositivo cashless cambiar al estado Session Idle.

Session Idle
En este estado el cliente selecciona un producto en el teclado de la
mquina de vending. Entonces el VMC enva un comando VEND
REQUEST con el precio y posicin del producto seleccionado. Tras
esto, El dispositivo cashless pasa al estado Vend.

Vend
En el estado Vend si el dispositivo cashless comprueba que es
correcto entregar el producto elegido, responder a un POLL con
VEND APPROVE indicando el importe del producto que valida.
Aqu el cashless tambin podra responder VEND DENIED si no
validase la entrega del producto elegido, por ejemplo.

A continuacin, el VMC confirmar si ha entregado el producto


correctamente con el comando VEND SUCCESS, en caso contrario
responder con VEND FAILURE. Existe otro posible subcomando,
VEND CANCEL que lo enviar el VMC si el cliente cancela la
operacin de compra en este momento. Esto sera que pulsa el
botn de devolucin de monedas.

Despus se vuelve al estado Session Idle y si no hay otra venta


pendiente se regresa al estado Enabled tras recibir el comando
SESSION COMPLETE.

Esto finalizara un ciclo de venta quedndose el dispositivo


cashless preparado para iniciar un nuevo ciclo.