Strona 1 z 1

[AD2] Analog Discovery 2 odczyt pamięci ROM 27C256

: sobota 04 lut 2017, 19:04
autor: PROTON
Sprzęt

Może się zdarzyć sytuacja, że potrzebujemy odczytać zwartość pamięci ROM a nie mamy programatora. Pokażę jak to zrobić przy użyciu AD2 na przykładzie pamięci 27C256.
Aby odczytać komórkę pamięci musimy ją najpierw zaadresować, w przypadku układu 27C256 potrzebujemy 15 linii adresowych i 8 linii danych, AD2 nie posada aż tylu wyprowadzeń dla analizatora stanów logicznych. Skoro mamy odczytać wszystkie komórki pamięci po kolei, zaadresujemy pamięć wykorzystując licznik. Wykorzystałem 2 układy 74LS393, w każdym takim układzie znajdują się dwa 4 bitowe liczniki binarne. Podłączamy je tak aby uzyskać jeden 16 bitowy licznik, czyli ostatnie wyjście 4 bitowego licznika podłączamy do wejścia następnego 4 bitowego licznika.
Po podpięciu zbudowanego licznika do pamięci, podłączamy całość do AD2, wyjście z pamięci do kabelków 0-7, wejście licznika do kabelka 15, reset licznika do kabelka 14. Na wejściach pamięci oznaczonych OE i CE wymuszamy stan niski podpinać je do masy.
1.png

IMG_0545.JPG


Oprogramowanie

Poniższy skrypt uruchamiany w środowisku WaveForms, odczytuje zawartość pamięci i zapisuje w pliku tekstowym, każdy odczytany bajt jest zapisany w formie dziesiętnej oraz w jednej linii zapisuje 8 bajtów oddzielonych od siebie spacją. Miejsce zapisu pliku i jego nazwę określa linia 9 skryptu:
var file = File("C:/temp/rom.txt");
Układ 27C256, posiada pojemność 256kb (kilobitów), czyli 32kB (kilobajtów), żeby odczytać całą zawartość musimy wykonać 32x1024 razy odczyt. W programie są dwie zagnieżdżone pętle, wewnętrzna pętla odczytuje po 8 bajtów, w związku z czym zewnętrzna pętla musi być wykonana 8 razy mniej (4*1024).

Kod: Zaznacz cały

function ReadROM(){
    print("Running ReadROM script");
   
    StaticIO.Channel1.DIO[7].checked = 0;
    StaticIO.Channel1.DIO[6].checked = 1; //reset
    wait(0.1);
    StaticIO.Channel1.DIO[6].checked = 0;

   var file = File("C:/temp/rom.txt");
      
   for(var idx=0; idx<4*1024; idx++){
         var row = "";
      
      for(var i = 0; i < 8; i++){

         row = row + StaticIO.Channel0.Input.value + " ";
         StaticIO.Channel1.DIO[7].checked = 1;
         wait(0.01);
         StaticIO.Channel1.DIO[7].checked = 0;
         wait(0.01);
 
      }
      print(row);
      file.appendLine(row);
   }
}

if(!('StaticIO' in this)) {
    throw("Please open a StaticIO instrument");
}

ReadROM();



Odczytaną zawartość można skonwertować to postaci szesnastkowej lub binarnej i wykorzystać do zaprogramowania innego układu, sam odczyt w/w programem trwa kilka minut, zalecam odczytanie 2 krotne i sprawdzenie poprawności odczytu po przez porównanie plików.
3.png

Re: [AD2] Analog Discovery 2 odczyt pamięci ROM 27C256

: niedziela 05 lut 2017, 20:33
autor: tasza
Hmm, jakby się bardzo uprzeć, to obstawiam że tą metodą można by także zaprogramować równoległy EEPROM takie np. 28C64
można na licznikach zrobić adres jak zaprezentowałeś, ale jeżeli trzeba byłoby "dać łatkę" w obrazie pamięci i celnąć precyzyjnie, to adres można wystawić kostce na dwóch 74HC595, zwyczajnie wsuwać go w rejestry jakąś sprytną funkcją w WaveForms, reszta sygnałów - to już w/g dokumentacji układu.

Ze zwykłym EPROM ( Vpp kilkanaście V ) i odpowiednio mocnych nerwach też mogłoby się udać, sztuka to nie zabić pamięci zbyt długą szpilą Vpp

W sumie to w jakiejś awaryjnej sytuacji takie czytanie/pisanie do pamięci byłoby lepsze od obdzwaniania w panice znajomych za równoległym programatorem....warto to mieć przećwiczone