Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programowanie pamięci AM29F040B

andrzejlisek 14 Paź 2014 09:14 444 0
  • #1 14 Paź 2014 09:14
    andrzejlisek
    Poziom 28  

    Kupiłem pamięci flash typu AM29F040B i czekam na nie.

    Zamiast kupować programator za 200-300 postanowiłem wyjąć z szafy DSM-51 i podłączyć układ zbudowany z kilku prostych elementów, z trzema układami 74193, bo tylko taki rodzaj pamięci potrzebuję programować.

    Abstrahując od tego, jak ma działać programator i program na DSM-51 mam program z programowaniem.

    Generalnie, jest układ 8255 sterujący 24-pinowym portem równoległym. Linie danych, adresowe od A0 do A7 steruję bezpośrednio poprzez odpowiednio port A i port B, ponadto z portu C steruję bezpośrednio linię WE, OE i CE. Dostęp od A8 do A19 zrealizowałem za pomocą trzech liczników 74193, do tego potrzebuję 4 linie portu C. Jedna linia portu C nie jest używana.

    Poziomy logiczne całości to 0 i 5V.

    Pierwszy test, który już nie powiódł, to próba zaprogramowania i zaraz potem odczytania kilku bajtów zmieniając adresy od A0 do A7. Podczas próby liczniki były zerowane, i w ogóle nie sterowane. Moim zdaniem to wyklucza ewentualność, że programuję inny obszar, a odczytuję inny.

    Moim zdaniem, w stanie spoczynkowym na CE podaje się stan niski, stan wysoki wyłącza całą pamięć, a na WE i OE podaje się stan wysoki. Programowanie odbywało się tak, że na liniach od A0 do A7 ustawiałem adres, na liniach danych ustawiałem bajt, czekałem zwłokę, potem na linię WE podawałem stan niski, odczekałem zwłokę i potem wysoki i znów odczekałem zwłokę. Odczyt odbywał się tak, że przełączałem port A w tryb odczytu, na liniach od A0 do A7 układu ustawiałem adres poprzez port B, odczekałem zwłokę, ustawiałem stan niski na OE, odczekałem zwłokę, a potem odczytałem bajt na porcie A (spodziewam się, że w tym momencie to pamięć wysteruje port A w DSM-51), potem wracam do stanu wysokiego na linii OE.

    Odczekanie zwłoki, to uruchomienie pustej pętli trwającej kilkaset milisekund.

    Okazuje, że za każdym razem odczytywałem bajty 0xFF bez względu na to, co zapisywałem. Pełny symbol stosowanego układu pamięci podam później, ale miał litery LV i 040 na końcu. Jak wpisałem w internecie ten symbol, to trafiłem na dokumentację, być może jest to układ na 3.3V i przez to nie działa.

    Czy powyższe podejście jest dobre do zaprogramowania układu pamięci flash?

    Potem gdzieś zobaczyłem wykres przebiegów czasowych, na których było narysowane sterowanie linii CE, na której stan był zmieniany przy każdym zapisywanym lub odczytywanym bajcie. Popróbowałem i znowu to samo. Sprawdzę woltomierzem poprawność sterowania napięć linii w gnieździe PLCC32.

    Jak będzie potrzeba, to udostępnię schemat całości.

    Gdzie szukać przyczyny? Czy to pamięć jest winna, czy coś jeszcze innego?

    EDIT:
    Pamięć flash, z którą mam problemy to AM29LV040B i według datasheet rzeczywiście jest na 3.3V.

    0 0