Cum să interfațați I2C-EEPROM cu microcontrolerul 8051

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





Termenul I2C sau abrevierea IIC este un inter circuit integrat și se numește așa cum am pătrat C. I2C este o magistrală de computer serial , care a fost inventat de semiconductorii NXP anterior a fost numit ca semiconductori Philips. Magistrala I2C este utilizată pentru a atașa circuite integrate periferice de viteză mică microcontrolere și procesoare . În anul 2006, pentru a implementa protocolul I2C nu este necesară nicio taxă de licențiere. Dar este necesară o taxă pentru a obține adresa slave I2C atribuită de semiconductorii NXP.

Unii concurenți precum Texas Instruments, Siemens AG, NEC, Motorola, Intersil și STMicroelectronics au anunțat pe piață produse I²C bine adaptate la mijlocul anilor '90. În anul 1995, SMBus este definit de Intel, adică un subgrup de I²C care afirmă că protocoalele sunt mai stricte. Scopul principal al SMBus este de a sprijini interoperabilitatea și robustețea. Prin urmare, sistemele I²C actuale includ reguli și politici de la SMBus, uneori acceptă atât I2C, cât și SMBus cu o reconfigurare minimă.




Autobuz I2C

Autobuz I2C

Interfață I2C Bus-EEPROM cu microcontroler 8051

Ce este I2C Bus

Autobuzul I2c utilizează două linii bidirecționale de drenaj deschis, cum ar fi SDA (linia de date seriale) și SCl (linia de ceas serial) și acestea sunt trase cu rezistențe. Autobuzul I2C permite unui dispozitiv master să înceapă comunicarea cu un dispozitiv slave. Datele sunt schimbate între aceste două dispozitive. Tensiunile tipice utilizate sunt + 3,3 V sau + 5 V, deși sunt permise sistemele cu tensiuni suplimentare.



Interfață I2C

Interfață I2C

EEPROM

ROM programabil șters electric (EEPROM) este un ROM modificabil de utilizator care poate fi eliminat și reprogramat frecvent prin aplicarea unei tensiuni electrice mai mari decât cele normale. O EEPROM este un fel de memorie non-volatilă utilizată în dispozitivele electronice, cum ar fi computerele, pentru a stoca cantități mici de date care ar trebui să fie salvate atunci când se deconectează curentul.

8051 Slicker Board

Placa 8051 Slicker este special concepută pentru a ajuta studenții tehnici din zona sisteme integrate . Acest kit este conceput în așa fel încât toate caracteristicile 8051 microcontroler vor fi eventual folosite de elevi. Această placă de atac acceptă ISP (în programarea sistemului) care se face prin portul serial. Acest kit și 8051 de la NXP sunt propuse pentru a netezi progresul depanării multor modele în jurul microcontrolerelor cu viteză de 8 biți.

Interfață I2C - EEPROM

Figura următoare prezintă interfața I2C-EEPROM cu microcontrolerul 8051. Aici, I2C este un protocol master-slave, care include datele împreună cu impulsul de ceas. De obicei, dispozitivul principal comuta linia de ceas, SCL. Această linie comandă sincronizarea datelor care se transferă pe magistrala I2C. Cu excepția cazului în care ceasul este acționat, nu vor fi transferate date. Toți sclavii sunt controlați de același ceas, SCL.


Interfață I2C - EEPROM

Interfață I2C - EEPROM

Autobuzul I2C acceptă diferite dispozitive unde fiecare dispozitiv este identificat printr-o adresă unică, indiferent dacă este un driver LCD, o cartelă de memorie, un microcontroler sau interfața tastaturii care poate funcționa ca Tx sau Rx depinde de funcționarea dispozitivului. Controlerul este conceput pentru a controla dispozitivul EEPROM prin protocolul I2C. Aici, protocolul I2C funcționează ca un dispozitiv master și reglează EEPROM și funcționează ca un slave. Operațiunile R / W sunt competente prin transferul unui set de semnale de control cuprinzând adresa ȘI / SAU magistrala de date. Aceste semnale ar trebui să fie utilizate cu semnale de ceas adecvate

Interfață I2C Bus-EEPROM cu microcontroler 8051

Dacă doriți să citiți, scrieți și ștergeți EEPROM utilizând magistrala I2C în placa de atacare 8051. Interfațarea I2 Bus-EEPROM cu Microcontrolerul 8051 este foarte simplu . Funcționarea acestei interfațe este de a trimite un semnal precum WRITE, urmat de magistrala de date și de adrese. În această operațiune, EEPROM este utilizată pentru a stoca datele. În kitul 8051, două numere de linii EEPROM sunt reglementate de driverele acceptate de I2C. SCL și SDA sunt conectate la IC EEPROM serial bazat pe I2C.

Interfață I2C Bus-EEPROM cu microcontroler 8051

Interfață I2C Bus-EEPROM cu microcontroler 8051

Folosind liniile SDA și SCL I2C, operațiile de citire și scriere ale EEPROM se realizează în 8051 Slicker Kit

Interfața I2C este atât de simplă și în fiecare citire / scriere de date din EEPROM. Întârzierea depinde de cum îmbunătățește compilatorul buclele imediat ce faceți modificări în alegeri, întârzierea variază.

Cod sursă pentru interfața I2C

#include
#include
#include

#define ACK 1
#define NO_ACK 0

nesemnat char i
Edat de caractere nesemnate [5]
Date fără caracter semnat
void InitSerial (nul)
void DelayMs (int semnat)
void WriteI2C (caractere nesemnate)
void Start (nul)
void Stop (nul)
void ReadBYTE (int semnat)
void WriteBYTE (int semnat)
ReadI2C de caractere nesemnate (bit)

sbit SCL = P2 ^ 0 // conectare la pinul SCL (Ceas)
sbit SDA = P2 ^ 1 // conectați la pinul SDA (date)

// ——————————————
// Programul principal
// ——————————————
void main (nul)
{
InitSerial () // Inițializați portul serial
putchar (0x0C) // clear hyper terminal
DelayMs (5)
WriteBYTE (0x0000)
WriteI2C („A”) // Write Data’s Here
WriteI2C („B”)
WriteI2C („C”)
WriteI2C („D”)
WriteI2C („E”)
WriteI2C („F”)
Stop()
DelayMs (10)

ReadBYTE (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)

pentru (i = 0i<6i++)
{
printf („valoare =% c n”, EData [i]) // afișează date * /
DelayMs (100)
}

în timp ce (1)
}

// ——————————————
// Inițializați portul serial
// ——————————————
void InitSerial (nul)
{
SCON = 0x52 // configurare control port serial
TMOD = 0x20 // hardware (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Temporizatorul 1 activat
}

// ———————————-
// pornește I2C
// ———————————-
void Start (nul)
{
SDA = 1
SCL = 1
_buton _ () _ nop_ ()
SDA = 0
_buton _ () _ nop_ ()
SCL = 0
_buton _ () _ nop_ ()
}

// ———————————-
// oprește I2C
// ———————————-
void Stop (nul)
{
SDA = 0
_buton _ () _ nop_ ()
SCL = 1
_buton _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Scrieți I2C
// ———————————-
void WriteI2C (Date de caractere nesemnate)
{

pentru (i = 0i<8i++)
{
SDA = (Date & 0x80)? 1: 0
SCL = 1SCL = 0
Date<<=1
}

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

}

// ———————————-
// Citiți I2C
// ———————————-
ReadI2C de caractere nesemnate (bit ACK_Bit)
{

Start()
WriteI2C (0xA1)

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

SCL = 1
Date<<= 1
Data = (Data

if (ACK_Bit == 1)
SDA = 0 // Trimite ACK
altceva
SDA = 1 // Trimite NO ACK

_buton _ () _ nop_ ()
SCL = 1
_buton _ () _ nop_ ()
SCL = 0
Stop()
returnează date
}

// ———————————-
// Citiți formularul I2C cu 1 octet
// ———————————-
void ReadBYTE (nesemnat int Addr)
{
Start()
WriteI2C (0xA0)
WriteI2C ((caractere nesemnate) (Addr >> 8) & 0xFF)
WriteI2C ((caractere nesemnate) Addr & 0xFF)
}

// ———————————-
// Scrieți 1 octet în I2C
// ———————————-
void WriteBYTE (nesemnat int Addr)
{
Start()
WriteI2C (0xA0)
WriteI2C ((caractere nesemnate) (Addr >> 8) & 0xFF) // trimiteți adresa mare
WriteI2C ((caractere nesemnate) Addr & 0xFF) // adresa de trimitere scăzută
}

// ——————————————
// Întârziere funcția mS
// ——————————————
void DelayMs (număr int nesemnat)
{// mSec Delay 11.0592 Mhz
unsigned int i // Keil v7.5a
în timp ce (număr)
{
i = 115
în timp ce (i> 0) i–
numara-
}
}

Astfel, este vorba despre implementarea interfeței I2C. Sperăm că ați înțeles mai bine acest concept. În plus, orice întrebări referitoare la acest concept sau dispozitive de interfață vă rugăm să oferiți sugestiile valoroase comentând în secțiunea de comentarii de mai jos.