Programmierung eines SRAM mit Arduino

Ich versuche derzeit, einige alte NVSRAMs zu testen , um sicherzustellen, dass sie funktionieren, bevor ich sie verwende. Ich würde sie gerne unabhängig testen und ich denke, ein Arduino könnte den Trick machen. Sollte ein Arduino Mega damit theoretisch umgehen können?

PORTC = 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);



        }

Update: Ich habe es so eingerichtet, dass es nur A0-A7 verwendet, bis es funktioniert, und dann auf andere Bits erweitert wird. Ich programmiere es auch nur mit Einsen, damit es jetzt einfacher zu debuggen ist. Es funktioniert nicht ganz, ich denke, es liegt an der Adressierung. Ich habe Address auf ein INT gesetzt und es geht von 0 bis 256. Wenn ich das int an einen PORT sende, sollte es diese Zahl in Binärform senden, richtig?

Wenn es genug I/O-Pins für alle Adress-, Daten- und Steuersignale hat, ja natürlich. Wenn dies nicht der Fall ist, müssen Sie weitere hinzufügen (möglicherweise mithilfe von Schieberegistern zum Speichern von Adressbits).
Für was es wert ist: Wenn die Module wirklich alt sind, sind die Batterien wahrscheinlich leer.
Das ist eine andere Frage, aber ich bin nicht so vertraut mit dem Gedächtnis. Was bedeutet das "gültig" in dem von mir verlinkten Datenblatt? ZB "Adresse gültig bis Ausgabe gültig". Ich arbeite am Timing und werde zur Verdeutlichung etwas Code hochladen.
"gültig" bedeutet genau das, was es sagt - Ausgabedaten sind korrekt, wenn die Adresse für einen bestimmten Zeitraum stabil war (viel weniger Zeit als der Arduino zwischen dem Einrichten der Adresse und dem Lesen der Daten benötigt).
Das Testen eines Bits nach dem anderen oder in Bytes funktioniert, aber auf jeden Fall müssen Sie jedes Bit testen, um sowohl '1' als auch '0' zu speichern. Schreiben Sie also abwechselnde Muster an jede Adresse, z. 0x55 und 0xAA.

Antworten (2)

Ja, das sollte man können. Der Teil, den Sie verwenden, benötigt 21 Pins für die Adressierung, 8 Pins für Daten und ein paar Pins für die Schreibfreigabe und so weiter. Das Arduino Mega hat 54 digitale IO-Pins, also sollten Sie es so ziemlich einfach verkabeln und loslegen können.

Dinge, die Sie jedoch überprüfen sollten: Überprüfen Sie die erwarteten Spannungen für die Pins auf dem SRAM, um zu sehen, wie sie hohe/niedrige Logikpegel definieren, und stellen Sie sicher, dass dies dem entspricht, was Ihr Arduino sendet. Im schlimmsten Fall benötigen Sie zwischendurch eine Pegelumwandlung. Möglicherweise benötigen Sie auch Pulldown-Widerstände an den SRAM-Pins, um sicherzustellen, dass die Dinge 0 sind, wenn Sie es erwarten. Und überprüfen Sie den Innenwiderstand / die Stromaufnahme auf dem Chip, um sicherzustellen, dass er nicht versucht, mehr Strom zu versenken, als die digitalen IO-Pins von Arduino liefern können. Andernfalls könnte es den Arduino beschädigen.

Kein Grund warum es nicht funktionieren sollte. Es erfordert nur eine Menge Pins. Abhängig von der Anzahl der E/A-Pins Ihres Chips müssen Sie möglicherweise Port-Expander, Schieberegister, Latches/Flip-Flops oder andere Komponenten verwenden, um genügend Pins zu erhalten. Ein übliches Verfahren zum Verbinden mit RAMs mit breiten Adressbussen besteht darin, Adresslatches zu verwenden, um die Adressleitungen hoher Ordnung mit den Adressleitungen niedriger Ordnung zu multiplexen.