radzio.dxp.pl

Pamięci EEPROM typu 24C01, 24C02, 24C04,  24C08, 24C16 posiadają pojemność od jednego do szesnastu kilobitów, co odpowiada pojemności od 128 do 2 kilobajtów. Pamięci te posiadają szeregowy interfejs I2C.
 

Rozkład wyprowadzeń układów pamięci 24C01-24C16 przedstawia  poniższy rysunek

eeprom

Każdy układ pracujący na magistrali I2C posiada 7-bitowy adres jednoznacznie identyfikujący dany układ na magistrali. W przypadku pamięci 24Cxx cztery najstarsze bity adresu są równe 1010 (0xA szesnastkowo). W zależności od pojemności wykorzystywanej pamięci EEPROM 4 młodsze bity mają różne znaczenie. Znaczenie tych bitów oraz strukturę bajtu adresu pamięci 24C01-24C16 przedstawia poniższa tabela :

  eeprom

Układy 24C01/02 posiadają 3 wejścia adresowe pozwalające na umieszczenie na jednej magistrali do 8 układów pamięci. Układ 24C04 posiada dwa wejścia adresowe, bit b1 jest bitem A8 adresu komórki pamięci. Podobnie sprawa wygląda z układem 24C08, który posiada jedno wejście adresowe (na jednej magistrali mogą się znajdować maksymalnie 2 układy) a pozostałe bity są najstarszymi bitami adresu komórki pamięci. Z kolei układ 24C16 nie posiada żadnych zewnętrznych linii adresowych (na magistrali może być tylko jeden taki układ) natomiast na bitach b3:b1 odwzorowane są 3 najstarsze bity adresu komórki pamięci.

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

eeprom

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 bajtu adresu komórki pamięci w uprzednio zaadresowanym układzie pamięci

  • wysłanie bajtu danych przeznaczonego do zapisu

  • wysłanie sekwencji STOP

Układ pamięci każdy odebrany bajt potwierdza wystawieniem na magistralę bitu ACK (stan niski na magistrali). Brak potwierdzenia ostatniego bajtu (danych przeznaczonych do zapisu) sygnalizuje zabezpieczenie pamięci przed zapisem (sterowane stanem wyprowadzenia nr 7 układu pamięci).

Przykładowa  procedura zapisu bajtu do pamięci, korzystająca z układu TWI mikrokontrolerów Atmel AVR może wyglądać następująco :

twistart();
twiwrite(0xA0 | (DEV_SEL << 1));
twiwrite(BYTE_ADDR);
twiwrite(DATA);
twistop();

Odczyt z pamięci
Przebieg na magistrali podczas odczytu jednego bajtu danych spod dowolnego adresu przedstawia poniższy rysunek

eeprom

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 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 odczytu bajtu może wyglądać następująco :

unsigned char tmp;
twistart();
twiwrite(0xA0 | (DEV_SEL << 1));
twiwrite(BYTE_ADDR);
twistart();
twiwrite(0xA0 | (DEV_SEL << 1) | 0x01);
tmp = twiread(NOACK);
twistop();

 
(c) Radosław Kwiecień