Jak dostosować procedury ASM dla EEPROM 24C04 przy Z80 5MHz do blokowego odczytu?
szeregowe EEPROM 24C04 I PROBLEM
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: szeregowe EEPROM 24C04 I PROBLEM
Date: Sat, 4 May 2002 00:35:19 +0200
Kombinuje sobie z szeregowymi EEPROM i z Z80
i dziwna sprawa bo znalazlem na stronce atmela przyklady w ASM
dla "AT89Cx051 microcontroller with a 12 MHz clock"
Moj Z80 taktowany jest zegarem 5MHz i przepisane
procedutrki nie za bardzo dzialaja
Szczegoly:
Zapisywanie/odczystywanie pojedynczych baktow dziala
ale zapisywanie/odczytywanie calych blokow nie chce dzialac
Wykombinowalem wiec i zrobilem zapis/odczyt bloku
pojedynczymi bajtami i okazalo sie ze pomiedzy
zapisem/odczytem pojedynczych bajtow musze wstawiac
dosyc duze przerwy czasowe (np/ 150 nop'ow - Z80)
Czy ktos wie dlaczego tak sie dzieje?
A moze ja cos knoce ?
TB
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: szeregowe EEPROM 24C04 I PROBLEM
Date: Sat, 4 May 2002 04:42:21 +0200
Użytkownik "Tomasz Bednarz" <tb_at_nospam_internet.pl> napisał w wiadomości
news:aav3ek$8u$1_at_nospam_news.tpi.pl...
Kombinuje sobie z szeregowymi EEPROM i z Z80
Wykombinowalem wiec i zrobilem zapis/odczyt bloku
pojedynczymi bajtami i okazalo sie ze pomiedzy
zapisem/odczytem pojedynczych bajtow musze wstawiac
dosyc duze przerwy czasowe (np/ 150 nop'ow - Z80)
Czy ktos wie dlaczego tak sie dzieje?
Gdyby to była pamięć równoległa (np. 28C64) to przypomniałbym, że przy
zapisie stronicowym musisz wysyłać kolejne bajty danych z przerwami nie
większymi niż 100us. Dłuższa przerwa uruchamia cykl zapisu (kilka ms).
Natomiast ZTCP to Ty piszesz o eepromach klasy 24Cxx. Zapis do matrycy
startuje dopiero po wystawieniu na I2C sekwencji STOP. Czyli przy zapisie
stronicowym wysyłasz:
- START
- (adres kości,write) ; eeprom odpowiada ACK
- adres pierwszego bajtu danych (adres bazowy strony); eeprom odpowiada ACK
- kolejne bajty danych; kość potwierdza ACK po każdym z nich (max 8, lub
16bajtów - zależy od kości)
W tym momencie startuje (kilka ms) zapis do eeprom. Do chwili zakończenia
zapisu kość nie odpowiada (NACK) na próby zaadresowania:
- START
- (adres kości,read) ; eeprom odpowiada NACK
- STOP
Pytania pomocnicze:
- Czy poprawnie wystawiasz STOP dopiero po wysłaniu całej paczki danych?
- Czy w czasie tego wymuszonego opóżnienia (150 nopów ) eeprom odpowiada ACK
na próby zaadresowania? Jeżeli nie to masz dowód, że wystartował zapis -
czyli coś się pokiełbasiło z STOPami.
Ale właśnie świta - więc mogę bredzić ;-(
MDz