Programando una SRAM con Arduino

Actualmente estoy tratando de probar algunas NVSRAM antiguas para asegurarme de que funcionan antes de ponerlas en uso. Me gustaría probarlos de forma independiente y estoy pensando que un arduino podría ser el truco. En teoría, ¿debería un arduino mega ser capaz de manejar esto?

PUERTO = DQ0-DQ7
PORTA = A0-A7

            #define E           2
        #define G           3
        #define W           4



        void fillOne();


        void setup() {



          Serial.begin(9600);
          pinMode(E, OUTPUT);
          pinMode(G, OUTPUT);
          pinMode(W, OUTPUT);

          DDRA = B11111111; // sets port a to output
          DDRC = B11111111; // set port c to output

          digitalWrite(E, HIGH);
          digitalWrite(G, HIGH);
          digitalWrite(W, HIGH);

         }  



        void loop() {




        fillOne();

        }

        //Test One


        void fillOne()
        {
          int fail = 0;
          int address = 0;

          PORTC = B11111111; // Sets Dataline to one





           Serial.print("Test Start");
          for (address = 0; address < 256; address++)
          {
            PORTA = address;
            digitalWrite(W, LOW);
            digitalWrite(E, LOW);
            digitalWrite(W, HIGH);    
          }


          //Read Back and check for One

           // Sets Datalines to one

         digitalWrite(W, HIGH);
          digitalWrite(E, HIGH);

          PORTC = 0x00; 
          DDRC = 0x00;


        for(address = 0; address < 256; address++)
        {
          PORTA = address;

          digitalWrite(G, LOW);
          digitalWrite(E, LOW);

          if(PORTC != B11111111)
          fail ++;

          digitalWrite(G, HIGH);

        }

        if(fail > 0)
        { 
        Serial.print("FAIL");
        Serial.print(fail);

        while(1);
        }

        Serial.print("PASS");
         while(1);



        }

Actualización: lo configuré para usar solo A0-A7 hasta que funcione, luego se expandirá a otros bits. También lo estoy programando solo con 1, por lo que es más fácil de depurar por ahora. No está funcionando del todo, creo que es el direccionamiento. Tengo la dirección establecida en INT y va de 0 a 256. Si envío el int a un PUERTO, debería enviar ese número en binario, ¿correcto?

Si tiene suficientes pines de E/S para todas las señales de dirección, datos y control, sí, por supuesto. Si no es así, debe agregar más (tal vez usando registros de desplazamiento para almacenar bits de dirección)
Por lo que vale: si los módulos son realmente viejos, es probable que las baterías estén agotadas.
Esta es otra pregunta, pero no estoy tan familiarizado con la memoria. ¿Qué significa "válido" en la hoja de datos que vinculé? Por ejemplo, "Dirección válida para salida válida". Estoy trabajando en el tiempo y subiré un poco de código en un momento para mayor claridad.
'válido' significa exactamente lo que dice: los datos de salida serán correctos cuando la dirección haya sido estable durante un cierto período de tiempo (mucho menos tiempo del que tardará Arduino entre configurar la dirección y leer los datos).
La prueba de un bit a la vez o en bytes funcionará, pero de cualquier manera debe probar cada bit para almacenar tanto '1' como '0'. Así que escriba patrones alternos en cada dirección, por ejemplo. 0x55 y 0xAA.

Respuestas (2)

Sí, deberías poder hacer eso. La parte que está utilizando requiere 21 pines para direccionamiento, 8 pines para datos y un par de pines para habilitar escritura, etc. El Arduino Mega tiene 54 pines IO digitales, por lo que debería poder conectarlo y listo.

Sin embargo, cosas que debe verificar: verifique los voltajes esperados para los pines en la SRAM para ver cómo definen los niveles lógicos alto/bajo, y asegúrese de que corresponda con lo que está enviando su Arduino. En el peor de los casos, es posible que necesite alguna conversión de nivel en el medio. También es posible que necesite resistencias desplegables en los pines SRAM para asegurarse de que las cosas estén en 0 cuando espera que estén. Y verifique la resistencia interna / el consumo de corriente en el chip para asegurarse de que no intente absorber más corriente de la que pueden entregar los pines IO digitales de Arduino. De lo contrario, podría dañar el Arduino.

No hay razón por la que no funcionaría. Solo requiere muchos pines. Dependiendo de la cantidad de pines de E/S que tenga su chip, es posible que deba usar expansores de puertos, registros de desplazamiento, pestillos/flip flops u otros componentes para obtener suficientes pines. Un método común para interactuar con RAM con buses de direcciones anchas es usar latches de direcciones para multiplexar las líneas de direcciones de orden alto con las líneas de direcciones de orden bajo.