Manejo de memorias RAM y ROM


Memoria ROM


Datos y dirección

Las memorias son componentes electrónicos que pueden almacenar información. Esto se hace usando un código binario, o en otras palabras, un idioma en el que sólo existen "ceros" y "unos" (0 y 1). La memoria es como un gran conjunto de cajones, en cada uno de los cuales se puede grabar unos cuantos "ceros y unos", normalmente ocho. Por ejemplo, el primer cajón podría contener el dato 00101110, que corresponde al número 46.

La capacidad de una memoria viene dada por el número de cajones que dispone para guardar información. A estos cajones se les llama "posiciones de memoria". Si tiene 1024, entonces la memoria es de 1 Kb (un kilobyte). Si fuera de un megabyte sería de 1024 x 1024 = 1.048.576 posiciones.

Para leer de una memoria, hay que saber qué posición se quiere leer. A cada posición se le asocia un número, que empieza en cero y va sumando uno hasta llegar al final de la memoria. Una memoria de 1 Kb o 1024 posiciones, tendrá las posiciones 0, 1, 2, 3,... hasta la 1023. A estos números de posición se les llama direcciones.

Así pues, para leer una memoria hay que saber qué dirección se quiere leer, y luego activar el proceso de lectura de la memoria.

Pinout

Las memorias se alojan dentro de un chip, que tiene terminales o patas metálicas, para realizar las conexiones con el resto del circuito electrónico. Estas patitas también están numeradas, y cada una tiene asociada una función especial.
Por ejemplo, la memoria que usan los cartuchos de NES de 32 Kb tienen 28 terminales, cuyo diagrama se ve a continuación:

           +---  ---+      
 +5V     - |01 \/ 28| - +5V
 A12     - |02    27| - A14
 A7      - |03    26| - A13
 A6      - |04    25| - A8 
 A5      - |05    24| - A9 
 A4      - |06    23| - A11
 A3      - |07    22| - /CE
 A2      - |08    21| - A10
 A1      - |09    20| - GND
 A0      - |10    19| - A7 
 A0      - |11    18| - A6 
 A1      - |12    17| - A5 
 A2      - |13    16| - A4 
 GND     - |14    15| - A3 
           +--------+      
Chip de memoria ROM de 32Kb usado en los cartuchos de NES

Como puede verse, los 28 pines tienen asociado un código. La mayoría tienen en común una "A" o una "D", seguido de un número.
- Los pines "A" (dirección, de Address, en inglés) son los que se usan para decirle a la memoria qué posición se quiere leer y todo ellos en conjunto se denominan "bus de dirección".
- Los pines "D" (de datos) son a través de los cuales la memoria muestra el contenido de cada posición, y todos ellos en conjunto se denominan "bus de datos".
- El pin /CE (activar, de Chip Enable, en inglés) se pone a tierra para habilitar la memoria. Mientras no esté a tierra, la memoria hace como si no existiese. Este pin es el único pin del "bus de control" que dispone este tipo concreto de chip.
- Los pines 5V y GND son usados para alimentar eléctricamente la memoria.

- Existen ocho pines de datos, porque cada posición de este tipo de memoria es de ocho bits, por ejemplo 00101110.
- Existen normalmente muchos más pines de dirección (en este caso 15), pero su número exacto depende de la capacidad de la memoria; a mayor capacidad, más pines son necesarios para indicar las direcciones.

Lectura

Para leer la tercera posición de memoria de esta ROM, habría que colocar en su "bus de direcciones" el valor 2 (por se empieza a contar por cero), y luego habilitar el chip poniendo su pin /CE a tierra; poco tiempo después el chip pondrá en su "bus de datos" el valor almacenado. Este "poco tiempo" depende de la velocidad del chip, pero de forma orientativa, es menos de 250 ns (nanosegundos).

A menudo, además de la señal /CE existe otra llamada /OE (o /RD) que hay que activar junto con ella.
Hablaré de ello a continuación, al tratar el caso de la memoria RAM.


Memoria RAM


Señales de lectura y escritura

Una memoria RAM permite leer y también escribir en ella. Es importante recordar, no obstante, que tan sólo retiene el contenido mientras está alimentada con corriente; en el momento en el que se apaga el aparato, lo que está en su memoria RAM se pierde.

     +--  --+    
  A7 |01\/24| +5V
  A6 |02  23| A8 
  A5 |03  22| A9 
  A4 |04  21| /WE
  A3 |05  20| /OE
  A2 |06  19| A10
  A1 |07  18| /CE
  A0 |08  17| D7 
  D0 |09  16| D6 
  D1 |10  15| D5 
  D2 |11  14| D4 
 GND |12  13| D3 
     +------+    
Chip de memoria RAM de 2Kb usado en los cartuchos de SNES

Aquí aparecen dos señales que antes no estaban: /OE y /WE.
Estas dos señales son también señales de control, y pertenecen por tanto al "bus de control" de la memoria.

- La señal de /OE se pone a tierra cuando se quiere dar la orden de lectura a la memoria (OE, de Output Enable, habilitar salida).
- La señal de /WE se pone a tierra cuando se quiere dar la orden de escritura a la memoria (WE, de Write Enable, habilitar escritura).
- Es importante recordar que la señal /CE debe estar habilitada para que las señales de lectura o escritura surjan efecto.

Los pines de control suelen aparecer con diferentes nombres, dependiendo del autor, pero suelen coincidir con los siguientes:
- /OE o /RD (Read, leer). - /WE o /WR (Write, escribir). - /CE o /CS (Chip Select, selección de chip; habilitar).

Nivel de las señales

En realidad, tanto un cero (tierra), como un uno (voltaje positivo) pueden significar encendido.
De hecho, la barra invertida delante del nombre de una señal, como /CE, significa que se activa cuando se conecta a tierra, o como se suele decir, es activa a bajas. Estrictamente hablando, si en lugar de /CE fuera CE, el chip se habilitaría conectando dicho pin a su voltaje de alimentación (5 voltios en el caso de las consolas de 8 y 16 bits).

Es habitual que las señales de control sean activas a bajas, pero no es ni mucho menos siempre así. Hay que chequear siempre el pinout o esquemático, y si es posible el manual o datasheet del chip.