Jak połączyć I2C-EEPROM z mikrokontrolerem 8051

Wypróbuj Nasz Instrument Do Eliminowania Problemów





Skrótem I2C lub IIC jest inter układ scalony i nazywa się to kwadratem C. I2C to szeregowa magistrala komputerowa , wynaleziony przez półprzewodniki NXP, wcześniej nazywany był półprzewodnikami firmy Philips. Magistrala I2C służy do podłączania do niej peryferyjnych układów scalonych o niskiej prędkości mikrokontrolery i procesory . W 2006 roku do wdrożenia protokołu I2C nie jest wymagana opłata licencyjna. Jednak opłata jest konieczna, aby uzyskać adres slave I2C przypisany przez półprzewodniki NXP.

Niektórzy konkurenci, tacy jak Texas Instruments, Siemens AG, NEC, Motorola, Intersil i STMicroelectronics, ogłosili w połowie lat dziewięćdziesiątych dobrze dopasowane produkty I²C na rynek. W roku 1995 SMBus został zdefiniowany przez firmę Intel, czyli podgrupę I²C, która twierdzi, że protokoły są bardziej rygorystyczne. Głównym celem SMBus jest wspieranie współdziałania i niezawodności. Dlatego obecne systemy I²C zawierają reguły i polityki SMBus, czasami obsługują zarówno I2C, jak i SMBus przy minimalnej rekonfiguracji.




Magistrala I2C

Magistrala I2C

Interfejs I2C Bus-EEPROM z mikrokontrolerem 8051

Co to jest magistrala I2C

Magistrala I2c wykorzystuje dwie dwukierunkowe linie z otwartym drenem, takie jak SDA (szeregowa linia danych) i SCl (szeregowa linia zegara), które są podciągane za pomocą rezystorów. Magistrala I2C pozwala urządzeniu master na rozpoczęcie komunikacji z urządzeniem slave. Dane są wymieniane między tymi dwoma urządzeniami. Typowe stosowane napięcia to + 3,3 V lub + 5 V, chociaż dozwolone są układy z dodatkowymi napięciami.



Interfejs I2C

Interfejs I2C

EEPROM

Programowalna pamięć ROM z możliwością wymazywania elektrycznego (EEPROM) to pamięć ROM, którą można modyfikować przez użytkownika, którą można często usuwać i przeprogramowywać poprzez zastosowanie wyższego niż normalne napięcia elektrycznego. Pamięć EEPROM to rodzaj pamięci nieulotnej używanej w urządzeniach elektronicznych, takich jak komputery, do przechowywania niewielkich ilości danych, które należy zachować po odłączeniu zasilania.

8051 Slicker Board

Tablica 8051 Slicker została specjalnie zaprojektowana, aby pomóc studentom kierunków technicznych w zakresie systemy wbudowane . Ten zestaw jest zaprojektowany w taki sposób, że wszystkie funkcje Mikrokontroler 8051 będzie prawdopodobnie używany przez uczniów. Ta płytka wybijakowa obsługuje ISP (w programowaniu systemowym), które odbywa się za pośrednictwem portu szeregowego. Ten zestaw i 8051 firmy NXP jest proponowany w celu usprawnienia postępu debugowania wielu projektów otaczających 8-bitowe mikrokontrolery prędkości.

Interfejs I2C - EEPROM

Poniższy rysunek przedstawia połączenie I2C-EEPROM z mikrokontrolerem 8051. Tutaj I2C jest protokołem master-slave, który zawiera dane wraz z impulsem zegara. Zazwyczaj urządzenie nadrzędne przełączało linię zegara SCL. Linia ta porządkuje taktowanie danych, które są przesyłane na magistrali I2C. Dopóki zegar nie zostanie uruchomiony, żadne dane nie będą przesyłane. Wszystkie slave'y są kontrolowane przez ten sam zegar, SCL.


Interfejs I2C - EEPROM

Interfejs I2C - EEPROM

Magistrala I2C obsługuje różne urządzenia gdzie każde urządzenie jest identyfikowane poprzez unikalny adres czy jest to sterownik LCD, karta pamięci, mikrokontroler czy interfejs klawiatury które mogą działać jako Tx lub Rx, zależy od funkcjonowania urządzenia. Sterownik przeznaczony jest do sterowania urządzeniem EEPROM poprzez protokół I2C. Tutaj protokół I2C działa jako urządzenie główne i reguluje EEPROM i działa jako slave. Operacje R / W są sprawne dzięki przesyłaniu zestawu sygnałów sterujących zawierających adresową magistralę danych AND / OR. Sygnałom tym powinny towarzyszyć odpowiednie sygnały zegarowe

Interfejs I2C Bus-EEPROM z mikrokontrolerem 8051

Jeśli chcesz czytać, zapisywać i kasować EEPROM za pomocą magistrali I2C w płytce zaczepowej 8051. Połączenie I2 Bus-EEPROM z Mikrokontroler 8051 jest bardzo prosty . Działanie tego połączenia polega na wysłaniu sygnału takiego jak WRITE, po którym następuje magistrala danych i adresowa. W tej operacji do przechowywania danych używana jest pamięć EEPROM. W zestawie 8051 dwie liczby linii EEPROM są regulowane przez sterowniki obsługiwane przez I2C. SCL i SDA są podłączone do szeregowego układu EEPROM IC opartego na I2C.

Interfejs I2C Bus-EEPROM z mikrokontrolerem 8051

Interfejs I2C Bus-EEPROM z mikrokontrolerem 8051

Używając linii SDA i SCL I2C, operacje odczytu i zapisu EEPROM są wykonywane w zestawie 8051 Slicker Kit

Interfejs I2C jest tak prosty, a każdy pojedynczy odczyt / zapis danych w EEPROM. Opóźnienie zależy od kompilatora, w jaki sposób ulepsza pętle, gdy tylko dokonasz zmian w wyborach, opóźnienie się zmienia.

Kod źródłowy interfejsu I2C

#zawierać
#zawierać
#zawierać

# zdefiniować ACK 1
# zdefiniować NO_ACK 0

unsigned char i
unsigned char EData [5]
unsigned char Data
void InitSerial (void)
void DelayMs (unsigned int)
void WriteI2C (bez znaku)
void Start (void)
void Stop (void)
void ReadBYTE (unsigned int)
void WriteBYTE (unsigned int)
unsigned char ReadI2C (bit)

sbit SCL = P2 ^ 0 // podłącz do pinu SCL (zegar)
sbit SDA = P2 ^ 1 // podłącz do pinu SDA (Dane)

// ——————————————
// Główny program
// —————————————
void main (void)
{
InitSerial () // Zainicjuj port szeregowy
putchar (0x0C) // wyczyść hiperterminal
OpóźnienieMs (5)
WriteBYTE (0x0000)
WriteI2C („A”) // Zapisz dane tutaj
WriteI2C („B”)
WriteI2C („C”)
WriteI2C („D”)
WriteI2C („E”)
WriteI2C („F”)
Zatrzymać()
OpóźnienieMs (10)

Czytaj BYTE (0x0000)
EData [0] = ReadI2C (NO_ACK)
EData [1] = ReadI2C (NO_ACK)
EData [2] = ReadI2C (NO_ACK)
EData [3] = ReadI2C (NO_ACK)
EData [4] = ReadI2C (NO_ACK)
EData [5] = ReadI2C (NO_ACK)

dla (i = 0i<6i++)
{
printf ('value =% c n', EData [i]) // wyświetl dane * /
OpóźnienieMs (100)
}

podczas gdy (1)
}

// ——————————————
// Zainicjuj port szeregowy
// ——————————————
void InitSerial (void)
{
SCON = 0x52 // konfiguracja kontroli portu szeregowego
TMOD = 0x20 // sprzęt (9600 BAUD @ 11,0592 MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 włączony
}

// ——————————-
// uruchom I2C
// ——————————-
void Start (void)
{
SDA = 1
SCL = 1
_przycisk _ () _ nop_ ()
SDA = 0
_przycisk _ () _ nop_ ()
SCL = 0
_przycisk _ () _ nop_ ()
}

// ——————————-
// zatrzymaj I2C
// ——————————-
void Stop (void)
{
SDA = 0
_przycisk _ () _ nop_ ()
SCL = 1
_przycisk _ () _ nop_ ()
SDA = 1
}

// ——————————-
// Napisz I2C
// ——————————-
void WriteI2C (dane bez znaku)
{

dla (i = 0i<8i++)
{
SDA = (dane & 0x80)? 1: 0
SCL = 1SCL = 0
Dane<<=1
}

SCL = 1
_przycisk _ () _ nop_ ()
SCL = 0

}

// ——————————-
// Przeczytaj I2C
// ——————————-
unsigned char ReadI2C (bit ACK_Bit)
{

Początek()
WriteI2C (0xA1)

SDA = 1
dla (i = 0i<8i++)

SCL = 1
Dane<<= 1
Data = (Data

jeśli (ACK_Bit == 1)
SDA = 0 // Wyślij ACK
jeszcze
SDA = 1 // Send NO ACK

_przycisk _ () _ nop_ ()
SCL = 1
_przycisk _ () _ nop_ ()
SCL = 0
Zatrzymać()
powrót danych
}

// ——————————-
// Odczytaj 1 bajt z I2C
// ——————————-
void ReadBYTE (unsigned int Addr)
{
Początek()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF)
WriteI2C ((unsigned char) Addr & 0xFF)
}

// ——————————-
// Napisz 1 bajt do I2C
// ——————————-
void WriteBYTE (unsigned int Addr)
{
Początek()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // wyślij adres wysoki
WriteI2C ((unsigned char) Addr & 0xFF) // wysyłanie adresu low
}

// ——————————————
// Opóźnienie funkcji MS
// ——————————————
void DelayMs (liczba int bez znaku)
{// mSec Delay 11,0592 Mhz
unsigned int i // Keil v7.5a
podczas (liczba)
{
i = 115
podczas gdy (i> 0) i–
liczyć-
}
}

Chodzi więc o implementację interfejsu I2C. Mamy nadzieję, że lepiej zrozumieliście tę koncepcję. Ponadto wszelkie pytania dotyczące tej koncepcji lub urządzenia łączące prosimy o podanie cennych sugestii, komentując w sekcji komentarzy poniżej.