Jak ustalić optymalny czas tWR dla EEPROM 24C04 w projekcie z Z80?
EEPROM I2C i czas oczekiwania po zapisie danej
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: EEPROM I2C i czas oczekiwania po zapisie danej
Date: Mon, 6 May 2002 02:46:07 +0200
Obecnie mecze 24C04
Przepisalem na procka, ktorego uzywam (Z80) przyklady wziete z ATMELA
ale okazalo sie ze sa problemy z zapisem:
- bloku danych ('formowa' sekwencja pisania bloku danych)
- pojedynczych bajtow jeden za drugim (odpowiednio spreparowana petelka)
Wiem ze po wystawieniu danej pamiec musi ja jeszcze zapisac w wewnetrznej
EEPROM
i na to potrzebuje czasu, jednak procedurki z ATMELA raczej tego nie
uwzglednily
Ktos napisal mi ze czas o ktorym mowa (oznaczenie z katalogu tWR) moze
siegac 5ms
Pokombinowalem wiec i teraz dziala mi zapisywanie bloku danych tak:
zapis bajtu > odczekanie 5 ms > (odczyt/weryfikacja) > zapis bajtu > itd
'Standardowa' procedurka zapisu blokowego danych nadal nie dziala ... ale
mniejsza o to
Pytanie:
W katalogu, ktory mam tWR oznaczone jest tylko jako MAX=10 ms
ale katalog nie podaje wartosci MIN i TYP !
Moze ktos sie orientuje jak wygladaja te wartosci ?
Interesuje mnie porada proktyczna !
Na pamieci, ktora testuje zapis dziala poprawnie przy
skroceniu tWR do ok. 1 ms - ale jak jest typowo ?
I dlaczego w procedurkach z ATMELA zapomnieli o tych
odstepach czasowych ?
TB
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: EEPROM I2C i czas oczekiwania po zapisie danej
Date: Mon, 6 May 2002 03:30:26 +0200
Użytkownik "Tomasz Bednarz" <tb_at_nospam_internet.pl> napisał w wiadomości
news:ab4jrt$cll$1_at_nospam_news.tpi.pl...
Ktos napisal mi ze czas o ktorym mowa (oznaczenie z katalogu tWR) moze
siegac 5ms
Pokombinowalem wiec i teraz dziala mi zapisywanie bloku danych tak:
zapis bajtu > odczekanie 5 ms > (odczyt/weryfikacja) > zapis bajtu > itd
Pytanie:
W katalogu, ktory mam tWR oznaczone jest tylko jako MAX=10 ms
ale katalog nie podaje wartosci MIN i TYP !
Moze ktos sie orientuje jak wygladaja te wartosci ?
Interesuje mnie porada proktyczna !
Czas zapisu jest ustalany wewnštrz kości i jako taki ma prawo być silnie
zależny od rozrzutów produkcyjnych i temperatury. Dlatego podaje się tylko
górnš granicę - z odpowiednim zapasem - jako czas gwarantowany. Na wypadek
gdyby ktoś chciał zapisywać w sekwencji:
zapis, stałe opóznienie, nastepny zapis....
Ale to wymaga poświęcenia 10ms/bajt lub 10ms/stronę. Jeżeli chcesz szybciej,
to musisz sprawdzać czy kość jest gotowa do następnego zapisu, tzn. czy
zakończył się poprzedni zapis. W tym trybie rzeczywiście może się okazać, że
istniejš kombinacje (ezgemplarz, warunki_pracy) dla których czas potrzebny
na dokonanie zapisu mieści sie poniżej 1ms.
<CYTAT source="ATMEL">
write_byte:
; AT24Cxx Byte Write function.
; (...)
; Returns CY set to indicate that the bus is not available
; or that the addressed device failed to acknowledge.
; Destroys A.
</CYTAT>
Jak widzisz procedura write_byte zwraca (w CY) rezultat = 1 w przypadku
niepowodzenia, a takim niepowodzeniem jest m.in. brak ACK ze strony kości
świadczšcy o jej zajętości lub uszkodzeniu.
Zapis wykonuje się na zasadzie: Próbuj co 20us aż do skutku, ale nie dłużej
niż 10ms (nie więcej niż pewnš skonczonš liczbę razy):
bit error_flag;
int i;
error_flag = 1;
for ( i=0; i<500; i++}
{
if ( !write_byte() )
{
error_flag = 0;
break;
}
delay_us (20) ;
}
Jeżeli kość jest gotowa to zapis uda się przy pierwszej próbie. Jeżeli trwa
poprzedni zapis, to musi się skończyć w cišgu max. 10ms. Jeżeli w cišgu tego
czasu nie uda się zainicjować następnego zapisu to można z czystym
sumieniem zarchiwizować eeproma w koszu na śmieci. Przypuszczam, że jak
przebrniesz przez poprawny zapis bajtowy to okaże się, że stronicowy też
działa.
MDz
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: Re: EEPROM I2C i czas oczekiwania po zapisie danej
Date: Mon, 6 May 2002 07:01:56 +0200
[...]
Jeżeli kość jest gotowa to zapis uda się przy pierwszej próbie. Jeżeli
trwa
poprzedni zapis, to musi się skończyć w cišgu max. 10ms. Jeżeli w cišgu
tego
czasu nie uda się zainicjować następnego zapisu to można z czystym
sumieniem zarchiwizować eeproma w koszu na śmieci.
Zrobilem tak ze skrocilem cas oczekiwania do okolo 0,9 ms i robie zapis
bajtowy
calego bloku tak:
1-pisze 2-czekam 3-odczytuje
4-sprawdzam odczytana wartosc = zapisanej
4A - jezeli nie to czekam jeszcze troche
i skok do 1 (tych skokow max np. 30 razy a jak > 30 to wyswietlenie
komunikiatu EE Error)
4B - gdy zapis poprawny to przejscie do nastepnego bajtu i zabawa od nowa
tzn. od 1
Przypuszczam, że jak
przebrniesz przez poprawny zapis bajtowy to okaże się, że stronicowy też
działa.
Odczyt stroniciow juz mi dziala - znalazlem blad w procedurkach ATMELA
ale pisanie stronicowe nie za bardzo dziala !
Nasuwa mi sie jeszcze jedno pytanko:
Skoro przy zapisie jednego bajtu pamiec potrzbuje czasu np. 1 ms,
to cha chliopski rozum przy zapisie stronicowym (bajt po bajcie)
np. 10 bajtow po zabisaniu kazdego (bajtu) tez bedzie potrzebowala ok. 1 ms
?
Przeciez to czas potrzebny (chyba) na 'wypalenie' bitow!
TB
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: EEPROM I2C i czas oczekiwania po zapisie danej
Date: Mon, 6 May 2002 13:18:29 +0200
Użytkownik "Tomasz Bednarz" <tb_at_nospam_internet.pl> napisał w wiadomości
news:ab52ri$d3i$1_at_nospam_news.tpi.pl...
Zrobilem tak ze skrocilem cas oczekiwania do okolo 0,9 ms i robie zapis
bajtowy
calego bloku tak:
1-pisze 2-czekam 3-odczytuje
4-sprawdzam odczytana wartosc = zapisanej
Jeżeli kość jest zajęta zapisem (nie odpowiedziała ACK na zaadresowanie) to
nie masz prawa jej odczytywać. Tzn. nie masz żadnej gwarancji Co zwróci
odczyt kontrolny. A jeżeli - w złośliwym przypadku - będzie to ta sama
wartość którš zapisałeś? Dlatego imho jedynym kryterium gotowości kości może
być ACK a nie odczytana wartość danej.
4A - jezeli nie to czekam jeszcze troche
i skok do 1 (tych skokow max np. 30 razy a jak > 30 to wyswietlenie
komunikiatu EE Error)
4B - gdy zapis poprawny to przejscie do nastepnego bajtu i zabawa od nowa
tzn. od 1
Ok.
Nasuwa mi sie jeszcze jedno pytanko:
Skoro przy zapisie jednego bajtu pamiec potrzbuje czasu np. 1 ms,
to cha chliopski rozum przy zapisie stronicowym (bajt po bajcie)
np. 10 bajtow po zabisaniu kazdego (bajtu) tez bedzie potrzebowala ok. 1
ms
?
Przeciez to czas potrzebny (chyba) na 'wypalenie' bitow!
Też mi się tak wydaje. Dlatego ładujesz do kości całš stonę (8 lub 16
bajtów - zależnie od kości) i wystawiajšc STOP odpalasz zapis do matrycy. Po
czym czekasz (1..10ms) na zakończenie zapisu.
MDz
From: Romuald Bialy <romek_b_at_nospam_o2.pl>
Subject: Re: EEPROM I2C i czas oczekiwania po zapisie danej
Date: Mon, 06 May 2002 19:18:13 +0200
Marek Dzwonnik wrote:
Też mi się tak wydaje. Dlatego ładujesz do kości całš stonę (8 lub 16
bajtów - zależnie od kości) i wystawiajšc STOP odpalasz zapis do matrycy. Po
czym czekasz (1..10ms) na zakończenie zapisu.
Tyle ze co producent to inna dlugosc strony. 2,4,8,16 bajtow - kazdy
sobie i dla tego nalezy uwazac. Bywaja kosci nie dopuszczajace wogule
zapisu kilku bajtow na raz.
--
Pozdrawiam.... Romuald Bialy
E'mail: romek_b_at_nospam_o2.pl
WWW: http://www.polbox.com/r/romekb
From: jfox_at_nospam_poczta.onet.pl (J.F.)
Subject: Re: EEPROM I2C i czas oczekiwania po zapisie danej
Date: Mon, 06 May 2002 21:46:38 GMT
On Mon, 6 May 2002 07:01:56 +0200, Tomasz Bednarz wrote:
[...]
Nasuwa mi sie jeszcze jedno pytanko:
Skoro przy zapisie jednego bajtu pamiec potrzbuje czasu np. 1 ms,
to cha chliopski rozum przy zapisie stronicowym (bajt po bajcie)
np. 10 bajtow po zabisaniu kazdego (bajtu) tez bedzie potrzebowala ok. 1 ms
?
Przeciez to czas potrzebny (chyba) na 'wypalenie' bitow!
Ale bity mozna wypalac rownoczesnie ..
J.