Pamięci EEPROM typu 24C32,24C64, 24C128, 24C256 posiadają pojemność od 32 do 512
kilobitów, co odpowiada pojemności od 4 do 64 kilobajtów. Pamięci te
posiadają szeregowy interfejs I2C.
Rozkład wyprowadzeń układów pamięci
24C32-24C512 przedstawia poniższy rysunek
Zapis do pamięci
Przebieg na magistrali podczas zapisu jednego bajtu danych pod określony
adres w pamięci pokazany jest na poniższym rysunku
Procedura zapisu bajtu danych pod określony adres realizuje następujące
zadania :
- wysłanie sekwencji START
- wysłanie bajtu adresu układu pamięci na
magistrali (DEV SEL) z bitem R/W w stanie niskim (zapis)
- wysłanie starszego bajtu adresu komórki pamięci w
uprzednio zaadresowanym układzie pamięci
- wysłanie młodszego bajtu adresu komórki pamięci w
uprzednio zaadresowanym układzie pamięci
- wysłanie bajtu danych przeznaczonego do
zapisu
- wysłanie sekwencji STOP
Przykładowa procedura może wyglądać następująco :
twistart();
twiwrite(0xA0 | (DEV_SEL << 1));
twiwrite((BYTE_ADDR & 0xFF00) >> 8);
twiwrite(BYTE_ADDR & 0x00FF);
twiwrite(DATA);
twistop(); |
Odczyt z pamięci
Przebieg na magistrali podczas odczytu jednego bajtu danych spod
dowolnego adresu przedstawia poniższy rysunek
Procedura odczytu bajtu danych spod określonego adresu realizuje
następujące zadania :
- wysłanie sekwencji START
- wysłanie bajtu adresu układu pamięci na
magistrali (DEV SEL) z bitem R/W w stanie niskim (zapis)
- wysłanie starszego bajtu adresu komórki pamięci, spod której nastąpi
odczyt
- wysłanie młodszego bajtu adresu komórki pamięci, spod której nastąpi
odczyt
- wysłanie sygnału start
- wysłanie bajtu adresu układu pamięci na
magistrali (DEV SEL) z bitem R/W w stanie wysokim (odczyt)
- odebranie bajtu danych wysłanych przez układ pamięci
- wystawienie sygnału braku potwierdzenia (NACK)
- wysłanie sekwencji STOP
Przykładowa procedura może wyglądać następująco :
unsigned char
tmp;
twistart();
twiwrite(0xA0 | (DEV_SEL << 1));
twiwrite((BYTE_ADDR & 0xFF00) >> 8);
twiwrite(BYTE_ADDR & 0x00FF);
twistart();
twiwrite(0xA0 | (DEV_SEL << 1) | 0x01);
tmp = twiread(NOACK);
return tmp; |
|