Emulador de tarjetas PROM. Memorias.
Emulador
de tarjetas PROM.
Introducción
En la actualidad, está muy
extendido el uso de las llamadas tarjetas chip. Esta denominación incluye
varios tipos de tarjetas cuyas únicas características comunes son el tamaño
(tipo tarjeta de crédito) y la inclusión de un chip en lugar de una banda
magnética como medio para almacenar datos. Por lo demás, las tarjetas chip
pueden estar destinadas a usos muy diversos, y los chips que utilizan pueden ir
desde una simple PROM hasta sistemas basados en microcontroladores capaces de
codificar y almacenar datos con altos niveles de seguridad.
En este estudio se tratan de
forma específica las tarjetas PROM a nivel teórico y práctico, y la manera de
construir un circuito simple que sea capaz de emular el funcionamiento de una
tarjeta original. Si bien se podría haber conseguido esto con un solo
microcontrolador programable, he optado por un diseño algo mayor, pero más
fácil de construir, ya que no requiere de un programador o un grabador de
EPROMs, ni de ajuste alguno para su construcción y puesta en funcionamiento.
Tarjetas
PROM
|
Patilla:
|
|
Significado:
|
|
1
|
|
GND:
Masa lógica.
|
|
2
|
|
Vpp:
Tensión de programación (+21V).
|
|
3
|
|
Dout:
Salida de datos.
|
|
4
|
|
No
utilizada.
|
|
5
|
|
RST:
Reset (activo a nivel bajo).
|
|
6
|
|
CLK:
Clock (activo en flanco de bajada).
|
|
7
|
|
Din:
Entrada de datos.
|
|
8
|
|
Vcc:
Alimentación (+5V).
|
Las tarjetas PROM más habituales
contienen en su interior una PROM de 256 bits, organizados en 256 direcciones
de 1 bit. El direccionamiento de dicha PROM lo realiza un circuito contador de
8 bits, de forma que cuando el contador está en la dirección n, podemos leer o escribir en dicha
posición n. Para avanzar a la
siguiente dirección, sólo hay que darle un impulso a la entrada de reloj del
contador, y entonces, éste apuntará a la siguiente dirección, n + 1.
Existe además una entrada de
reset que pone a cero el contador. Además, el contador de direcciones es
cíclico, de forma que si está en la posición 20 y queremos acceder a la 18,
podemos hacer un reset y dar 18 pulsos de reloj, o bien no utilizar el reset y
dar 254 pulsos de reloj.
En la
figura 1 aparece la numeración de las patillas de un chip de tarjeta PROM
estándar, y en la tabla 1 el significado de cada patilla o contacto.
En la figura 2 se puede ver la
cronología de las señales para un ciclo de reset, de lectura o de escritura.
Durante un reset, Vpp
debe estar a +5V, el estado de Din es indiferente, y RST debe estar
a cero. En estas condiciones, durante el flanco de bajada de CLK, se pone a
cero el contador de direcciones interno. Para el resto de operaciones, la
patilla RST debe estar a nivel alto.
En estas condiciones, una vez
hecho un reset, tendremos en Dout el dato almacenado en la dirección
0 de la PROM. Si ahora damos un pulso de reloj, cuando CLK vuelve a estado
bajo, tendremos en Dout el dato de la dirección 1 de la PROM, y así
sucesivamente, hasta llegar a 255, en que volvería a la dirección 0.
Si durante un pulso de reloj Vpp
está puesto a +21V, el estado de Din quedará almacenado en la
dirección de la PROM que indicara el contador interno. A este respecto, es
conveniente aclarar un par de cosas: una PROM en blanco, o virgen, tiene
almacenadas en todas sus direcciones ceros. Podemos convertir uno de esos datos
en un 1, pero jamás podremos poner un cero donde había un 1. Por tanto, si
durante un ciclo de escritura en Din hay un cero, el contenido de la
PROM no variará. Por otro lado, la PROM de las tarjetas comerciales, tiene una
zona “reservada”, en la que no se puede escribir. Esta zona ocupa las 96
primeras direcciones de la PROM, y ha sido escrita en fábrica y protegida
fundiendo un fusible interno. En esta zona reservada, están almacenados datos
acerca del fabricante, el tipo de tarjeta, la empresa para la que ha sido
fabricada, valor de la tarjeta y nº de serie. El resto de direcciones suelen
contener ceros, aunque en algunas tarjetas, algunas direcciones, normalmente de
la 96 a la 105, o bien de la 246 a la 255, han sido puestos a 1 durante el control
de calidad en fábrica.
Cuando una tarjeta es
introducida en un lector, éste lee la zona reservada y comprueba si la tarjeta
es de esa empresa y de qué valor es. Si la tarjeta es válida, va leyendo el
resto de la tarjeta para averiguar hasta donde ha sido escrita y calcula cuánto
le queda por gastar. Conforme se van gastando pasos, el lector va poniendo a 1
direcciones de la PROM y leyéndolas para verificar que han sido bien escritas,
hasta llegar a una dirección determinada en que calcula que la tarjeta está
completamente agotada.
Emulador
Lógicamente, para emular una
tarjeta PROM tendremos que realizar un circuito capaz de responder como una
tarjeta real, pero si queremos que sea reutilizable, deberá ser posible
borrarla, es decir, hacer que siempre que la introduzcamos en un dispositivo de
lectura, se comporte como una tarjeta nueva.
Por tanto, nuestro emulador
deberá responder a la lectura de los primeros 96 bits como lo haría una tarjeta
real, y deberá permitir que se escriba y se lea en el resto, almacenando los
valores escritos hasta que nosotros queramos, o, al menos, durante el rato que
dure su utilización.
Nuestro emulador ha sido
diseñado de acuerdo con esta idea, es decir, con las siguientes
especificaciones: debe responder en las primeras 96 direcciones (0 - 95) como
una tarjeta estándar, y en el resto (96 - 255), debe responder con 0 mientras
no se escriba otra cosa (como si fuera una tarjeta recién comprada), y cuando
se escriba un 1 en una dirección, ese dato debe poder ser leído en sucesivas
operaciones de lectura. Además, debe responder ante un ciclo de RESET como lo
haría una tarjeta real, es decir, inicializando el contador de direcciones a 0,
pero sin que se borre el contenido de dichas direcciones de memoria.
Como primera aproximación,
nuestro emulador consta de los siguientes bloques:
- Un circuito
contador; se encargará de ir contando como lo haría el contador interno de una
tarjeta comercial, para que nuestro circuito “sepa” cuál es la dirección en la
que el dispositivo lector va a escribir o leer, y cuándo está en la zona
reservada y cuándo no. El chip encargado de esta función es un 4040.
- Una ROM de
96 bits, conteniendo una copia exacta de los primeros 96 bits de la tarjeta que
se quiere emular. La ROM más barata y que mejor se ajusta a estas
características es el propio chip de una tarjeta comercial (puede ser usada,
puesto que el contenido de esta zona reservada no varía de una tarjeta nueva a
una gastada).
- Una memoria
RAM estática de, al menos, 160 bits; se encargará de almacenar los datos que
vaya escribiendo el lector, como si fuera una PROM, pero con la diferencia de
que puede ser borrada. Para esta función se ha elegido un chip de tipo 4537,
una RAM en tecnología CMOS de 256 bits.
- Un
decodificador de direcciones que asegure que en las primeras 96 direcciones
funcione nuestra ROM y en el resto nuestra RAM. En nuestro circuito, esta
función la realizan un par de puertas.
Como se podrá observar, aparte
de la tarjeta usada, el resto de componentes no cuesta más de 500 pesetas.
Diseño
práctico
En la figura 3 se puede ver el
esquema del emulador. Para explicar su funcionamiento, veremos qué componentes
intervienen en cada una de los tres tipos de operaciones que debe realizar,
reset, lectura y escritura, así como el funcionamiento en el momento de la
desconexión de la fuente de alimentación externa (proporcionada por el propio
dispositivo lector).
Durante un ciclo de reset, IC1
pone su contador interno a 0, puesto que sus patillas 5 y 6 están directamente
conectadas a las patillas 5 y 6 de CON1. El reseteo de IC5 es algo más
complejo. El conjunto formado por R1, R2 e IC2C, se encarga de que en la salida
de IC2C haya un 1 siempre que la tensión de programación (+21 V) esté
desactivada en la patilla 2 de CON1. En estas condiciones, si en la patilla 6
de CON1 aparece un 1, en la salida de IC3A habrá también un 1. El conjunto
formado por D4, D5 y R4, actúa como una puerta AND, y el conjunto de T1 y R5
como un inversor. En estas condiciones, al pasar a nivel bajo la patilla 5 de
CON1, en el cátodo de D4 aparece un 1 y , por tanto, en el ánodo de D4 y D5
aparece un 1, lo cual hará que IC5 se resetee. El conjunto de R6 y C2 tiene por
objeto retrasar el pulso de RESET un poco respecto al de CLOCK, para evitar que
una vez reseteado IC5, durante la caída de la señal de reloj, cuente un paso.

En los ciclos de lectura, IC3D y
la puerta OR formada por D2, D3 y R3, actúan como decodificador de direcciones,
de forma que en el cátodo de D2 y D3 aparece un 1 cuando el valor del contador
IC5 es mayor que 95, y un 0 si el valor del contador está en el rango de 0 a
95. El conjunto formado por IC2A, IC2B, IC3B, IC3C e IC2D actúa como un puerto
de dos entradas y una salida, de forma que en las direcciones de 0 a 95 los
datos se lean de IC1 y en las direcciones de 96 a 255 se lean de IC4.
Durante un ciclo de escritura,
siempre se escribe en la RAM (IC4), y el conjunto formado por R1, R2 e IC2C se
encarga de generar la señal de Write Enable para IC4 a partir de la tensión de
programación (Vpp).
Cuando se desconecta la tensión
de alimentación del circuito (al extraer el emulador del lector de tarjetas),
el conjunto formado por D1 y C1 actúan como una pequeña alimentación de
emergencia. El motivo de incluir este dispositivo es evitar que en un pequeño
corte de la alimentación se pierdan los datos almacenados en IC4. Con los
valores descritos, los datos persistirán en la RAM durante unos segundos
(depende del modelo usado para IC4), al cabo de los cuales se borrarán,
quedando el emulador en condiciones de volver a usarse. En caso necesario, se
puede incluir un pulsador que cortocircuite C1 a través de una resistencia de
100 ohmios, para provocar un borrado manual.
Construcción
Para la construcción del
emulador se ha diseñado el circuito impreso de la figura 4. Como puede
observarse, alberga todos los componentes, incluido el chip de una tarjeta
usada. Debido al pequeño grosor de las tarjetas comerciales (0.8mm ±0.1mm), será necesario utilizar placa de circuito impreso flexible
de una sola cara, en la que se efectuará el trazado de las pistas por el método
que se prefiera, pero respetando especialmente la forma en la zona que actuará
como conector del emulador. Antes de insertar y soldar los componentes, es
importante dar la forma adecuada a sus patillas para evitar que deformen la
placa. Se utilizará un soldador de poca potencia (menos de 25W) con toma de
tierra, para evitar daños a los circuitos integrados. Si no se dispone de
soldador con toma de tierra, es recomendable utilizar zócalos para dichos
circuitos integrados.

|
Lista
de componentes:
|
|
IC1:
Chip de tarjeta usada.
|
|
IC2:
4001
|
|
IC3:
4081
|
|
IC4:
4537
|
|
IC5:
4040
|
|
T1:
BF320
|
|
D1-D5:
1N4148
|
|
R1,
R3, R4: 10K (0.25W)
|
|
R2:
2K2 (0.25W)
|
|
R5:
470W (0.25W)
|
|
C1:
10mF 16V
|
|
C2:
100nF
|
En la figura 5 está la lista de
componentes empleados. Empezaremos por soldar los ocho puentes, para los que se
utilizará cable de pequeña sección con funda aislante (es muy importante
colocar los puentes antes que el resto de componentes, ya que algunos quedarán
debajo de IC3 e IC4). A continuación soldaremos las resistencias y los
condensadores, teniendo en cuenta que C1 tiene polaridad. Después los diodos,
prestando atención a la posición de la marca; D2 debe soldarse de forma que
permita posteriormente insertar el circuito integrado IC3. A continuación se
soldará el transistor T1. El siguiente componente es el chip de una tarjeta
usada, pero antes de soldarlo a la placa debemos prepararlo. Recortaremos de una
tarjeta usada, sólo el cuadrado que incluye el chip y los ocho contactos, ya
que el resto de la tarjeta es sólo plástico. Colocándolo sobre una superficie
metálica que facilite la disipación de calor, soldaremos lo más rápido posible
(para evitar que se caliente en exceso), un hilito de cobre a cada patilla, lo
más cerca posible del borde del cuadrado. Pegaremos con pegamento el chip en su
sitio (por la cara de plástico, es decir, con los contactos hacia arriba), y
soldaremos los hilos a la placa de circuito impreso. Por último, soldaremos los
circuitos integrados, dejando para el final IC4, por ser el más sensible
(nótese que IC4 va en distinta postura que el resto de los circuitos
integrados).
Una vez terminado, es muy
importante proteger el circuito para que la cara de cobre no haga contacto con
el chasis del lector de tarjetas. Para ello, pegaremos una lámina de plástico
adhesivo (lo venden en papelerías) por la parte de las pistas de cobre, con
cuidado de que no haga burbujas, y quede perfectamente liso, al menos en la
parte que se introducirá en el lector. Una vez pegado, cortaremos y retiraremos
el cuadrado correspondiente a la zona que hará de conector (esta operación se
debe hacer con cuidado para no dañar las pistas de cobre o la propia placa de circuito
impreso). En el prototipo, añadí además una lámina de plástico (la recorté de
un separador de un bloc) pegada sobre la cara de componentes, para aproximar el
grosor del emulador al de una tarjeta real (unos 0.8mm), y, al mismo tiempo,
darle más rigidez.
Notas finales
En el diseño no se ha previsto
un circuito de puesta a cero de la memoria RAM, debido a que en las pruebas,
con una RAM de tipo MCM14537AL, todas las direcciones se ponían a 0
espontáneamente al alimentarla. Sin embargo, no hay garantía de que otros
modelos se comporten igual, por lo que, dentro de lo posible, es recomendable
utilizar ese modelo en concreto.
Por último, hay que hacer
hincapié en que el circuito sólo debe utilizarse con fines experimentales, y en
ningún caso con fines lucrativos ni comerciales. El utilizarlo en equipos de
pago automático puede ser constitutivo de delito.