Schnittstelle zwischen I2C-EEPROM und 8051-Mikrocontroller

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





Der Begriff I2C- oder IIC-Abkürzung ist ein Inter Integrierter Schaltkreis und es heißt, als ich C quadrierte. I2C ist ein serieller Computerbus , das zuvor von NXP-Halbleitern erfunden wurde, wird als Philips-Halbleiter bezeichnet. Der I2C-Bus wird zum Anschließen von integrierten Peripherieschaltungen mit niedriger Geschwindigkeit verwendet Mikrocontroller und Prozessoren . Im Jahr 2006 ist zur Implementierung des I2C-Protokolls keine Lizenzgebühr erforderlich. Es ist jedoch eine Gebühr erforderlich, um die von NXP-Halbleitern zugewiesene I2C-Slave-Adresse zu erhalten.

Einige Wettbewerber wie Texas Instruments, die Siemens AG, NEC, Motorola, Intersil und STMicroelectronics haben Mitte der neunziger Jahre gut geeignete I²C-Produkte auf den Markt gebracht. Im Jahr 1995 wird SMBus von Intel definiert, einer Untergruppe von I²C, die angibt, dass die Protokolle strenger sind. Der Hauptzweck von SMBus ist die Unterstützung der Interoperabilität und Robustheit. Daher enthalten aktuelle I²C-Systeme Regeln und Richtlinien von SMBus. Manchmal werden sowohl I2C als auch SMBus mit minimaler Neukonfiguration unterstützt.




I2C-Bus

I2C-Bus

Schnittstelle I2C-Bus-EEPROM mit 8051-Mikrocontroller

Was ist I2C-Bus?

Der I2c-Bus verwendet zwei bidirektionale Open-Drain-Leitungen wie SDA (serielle Datenleitung) und SCl (serielle Taktleitung), die mit Widerständen hochgezogen werden. Mit dem I2C-Bus kann ein Master-Gerät die Kommunikation mit einem Slave-Gerät starten. Daten werden zwischen diesen beiden Geräten ausgetauscht. Typische verwendete Spannungen sind + 3,3 V oder + 5 V, obwohl Systeme mit zusätzlichen Spannungen zulässig sind.



I2C-Schnittstelle

I2C-Schnittstelle

EEPROM

Elektrisch löschbares programmierbares ROM (EEPROM) ist ein vom Benutzer modifizierbares ROM, das häufig durch Anlegen einer höheren als der normalen elektrischen Spannung entfernt und neu programmiert werden kann. Ein EEPROM ist eine Art nichtflüchtiger Speicher, der in elektronischen Geräten wie Computern zum Speichern kleiner Datenmengen verwendet wird, die gespeichert werden sollten, wenn die Stromversorgung unterbrochen wird.

8051 Slicker Board

Das 8051 Slicker Board wurde speziell entwickelt, um technischen Studenten in der Region zu helfen eingebettete Systeme . Dieses Kit ist so konzipiert, dass alle Funktionen von 8051 Mikrocontroller wird möglicherweise von den Studenten verwendet. Diese Striker-Karte unterstützt ISP (In System Programming), das über die serielle Schnittstelle erfolgt. Dieses Kit und 8051 von NXP werden vorgeschlagen, um den Fortschritt des Debuggens vieler Designs rund um 8-Bit-Mikrocontroller zu beschleunigen.

Schnittstelle I2C - EEPROM

Die folgende Abbildung zeigt die Verbindung des I2C-EEPROM mit dem 8051-Mikrocontroller. Hier ist I2C ein Master-Slave-Protokoll, das die Daten zusammen mit dem Taktimpuls enthält. In der Regel hat das Master-Gerät die Taktleitung SCL umgeschaltet. Diese Zeile ordnet das Daten-Timing an, das auf dem I2C-Bus übertragen wird. Solange die Uhr nicht betätigt wird, werden keine Daten übertragen. Alle Slaves werden von derselben Uhr, SCL, gesteuert.


Schnittstelle I2C - EEPROM

Schnittstelle I2C - EEPROM

Der I2C-Bus unterstützt die verschiedenen Geräte Dabei wird jedes Gerät durch eine eindeutige Adresse identifiziert, unabhängig davon, ob es sich um einen LCD-Treiber, eine Speicherkarte, einen Mikrocontroller oder handelt Schnittstelle der Tastatur Welche Funktion als Tx oder Rx ausgeführt werden kann, hängt von der Funktion des Geräts ab. Der Controller dient zur Steuerung des EEPROM-Geräts über das I2C-Protokoll. Hier arbeitet das I2C-Protokoll als Master-Gerät und regelt das EEPROM und es arbeitet als Slave. Die R / W-Operationen sind effizient, indem ein Satz von Steuersignalen übertragen wird, die den Adress-UND / ODER-Datenbus umfassen. Diese Signale sollten mit geeigneten Taktsignalen versehen werden

Schnittstelle I2C-Bus-EEPROM mit 8051-Mikrocontroller

Wenn Sie das EEPROM lesen, schreiben und löschen möchten, indem Sie den I2C-Bus in der 8051-Schließplatine verwenden. Schnittstelle des I2-Bus-EEPROM mit Der 8051 Mikrocontroller ist sehr einfach . Die Operation dieser Schnittstelle besteht darin, ein Signal wie WRITE zu senden, gefolgt von Daten- und Adressbus. Bei dieser Operation wird das EEPROM zum Speichern der Daten verwendet. Im 8051-Kit werden zwei Anzahlen von EEPROM-Leitungen von I2C-unterstützten Treibern reguliert. SCL und SDA sind mit dem I2C-basierten seriellen EEPROM-IC verbunden.

Schnittstelle I2C-Bus-EEPROM mit 8051-Mikrocontroller

Schnittstelle I2C-Bus-EEPROM mit 8051-Mikrocontroller

Durch die Verwendung von SDA- und SCL-I2C-Leitungen werden die Lese- und Schreibvorgänge des EEPROM im 8051 Slicker Kit ausgeführt

Die Schnittstelle von I2C ist so einfach und in jedem einzelnen Daten lesen / schreiben im EEPROM. Die Verzögerung hängt vom Compiler ab, wie die Schleifen verbessert werden, sobald Sie Änderungen an den Auswahlmöglichkeiten vornehmen. Die Verzögerung variiert.

Quellcode für I2C-Schnittstelle

#einschließen
#einschließen
#einschließen

# ACK definieren 1
#define NO_ACK 0

vorzeichenloses Zeichen i
vorzeichenlose char EData [5]
vorzeichenlose char Daten
void InitSerial (void)
void DelayMs (unsigned int)
void WriteI2C (vorzeichenloses Zeichen)
void Start (void)
void Stop (void)
void ReadBYTE (unsigned int)
void WriteBYTE (unsigned int)
vorzeichenloses Zeichen ReadI2C (Bit)

sbit SCL = P2 ^ 0 // Verbindung zum SCL-Pin (Clock)
sbit SDA = P2 ^ 1 // Verbindung zum SDA-Pin (Daten)

// ——————————————
// Hauptprogramm
// ——————————————
void main (void)
{
InitSerial () // Serielle Schnittstelle initialisieren
putchar (0x0C) // Hyperterminal löschen
Verzögerungen (5)
WriteBYTE (0x0000)
WriteI2C ('A') // Daten hier schreiben
WriteI2C ('B')
WriteI2C ('C')
WriteI2C ('D')
WriteI2C ('E')
WriteI2C ('F')
Halt()
Verzögerungen (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)

für (i = 0i<6i++)
{
printf ('Wert =% c n', EData [i]) // Daten anzeigen * /
Verzögerungen (100)
}}

während (1)
}}

// ——————————————
// Serielle Schnittstelle initialisieren
// ——————————————
void InitSerial (void)
{
SCON = 0x52 // Serielle Portsteuerung einrichten
TMOD = 0x20 // Hardware (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 ein
}}

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

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

// ————————————-
// I2C schreiben
// ————————————-
void WriteI2C (vorzeichenlose Zeichendaten)
{

für (i = 0i<8i++)
{
SDA = (Daten & 0x80)? 1: 0
SCL = 1SCL = 0
Daten<<=1
}}

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

}}

// ————————————-
// I2C lesen
// ————————————-
vorzeichenloses Zeichen ReadI2C (Bit ACK_Bit)
{

Start()
WriteI2C (0xA1)

SDA = 1
für (i = 0i<8i++)

SCL = 1
Daten<<= 1
Datum = (Datum

if (ACK_Bit == 1)
SDA = 0 // ACK senden
sonst
SDA = 1 // NO ACK senden

_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SCL = 0
Halt()
Daten zurückgeben
}}

// ————————————-
// 1 Byte Form I2C lesen
// ————————————-
void ReadBYTE (unsigned int Addr)
{
Start()
WriteI2C (0xA0)
WriteI2C ((vorzeichenloses Zeichen) (Addr >> 8) & 0xFF)
WriteI2C ((vorzeichenloses Zeichen) Addr & 0xFF)
}}

// ————————————-
// 1 Byte in I2C schreiben
// ————————————-
void WriteBYTE (unsigned int Addr)
{
Start()
WriteI2C (0xA0)
WriteI2C ((vorzeichenloses Zeichen) (Addr >> 8) & 0xFF) // Adresse hoch senden
WriteI2C ((vorzeichenloses Zeichen) Addr & 0xFF) // Adresse niedrig senden
}}

// ——————————————
// Verzögerung der mS-Funktion
// ——————————————
void DelayMs (unsigned int count)
{// mSec Delay 11.0592 Mhz
unsigned int i // Keil v7.5a
während (zählen)
{
i = 115
während (i> 0) i–
Anzahl-
}}
}}

Hier geht es also um die Implementierung der I2C-Schnittstelle. Wir hoffen, dass Sie dieses Konzept besser verstehen. Darüber hinaus Fragen zu diesem Konzept oder Schnittstellengeräte Bitte geben Sie Ihre wertvollen Vorschläge, indem Sie im Kommentarbereich unten einen Kommentar abgeben.