Zurück

Pico I2C EEPROM Lesen/Schreiben: Nichtflüchtigen Speicher im Browser simulieren

Einleitung

Hast du schon einmal Daten speichern wollen, die einen Stromausfall überstehen? In eingebetteten Systemen ist EEPROM (Electrically Erasable Programmable Read-Only Memory) die erste Wahl für nichtflüchtigen Speicher. Heute simulieren wir einen I2C-EEPROM-Lese-/Schreibvorgang mit dem Raspberry Pi Pico – und das alles in deinem Browser mit Velxio. Keine Hardware erforderlich!

Wir schreiben ein paar Bytes auf das EEPROM, lesen sie zurück und überprüfen, ob sie übereinstimmen. Dabei lernst du das I2C-Protokoll, die Wire-Bibliothek und das Debuggen von seriellen Ausgaben kennen. Los geht’s!

Schaltungsaufbau

Öffne das Beispiel in Velxio und du siehst die Schaltung auf der Leinwand. Die Hauptkomponenten sind:

Schaltplan von pico-i2c-eeprom-rw auf der Velxio-Simulator-Leinwand

Verdrahtungsdetails

Von (Pico-Pin)Zu (Komponente)Kabelfarbe
D12 (GPIO12)Rote LED-AnodeRot (#ff4444)
D10 (GPIO10)Grüne LED-AnodeGrün (#00cc00)
Rote LED-KathodeGND.1Schwarz (#000000)
Grüne LED-KathodeGND.1Schwarz (#000000)

Hinweis: In dieser Simulation ist das I2C-EEPROM virtuell – es ist in die Velxio-Umgebung integriert. Die LEDs dienen als visuelle Indikatoren: Die rote LED blinkt während eines Schreibvorgangs, die grüne LED während eines Lesevorgangs. In einer realen Schaltung würdest du die SDA- und SCL-Leitungen des EEPROMs mit den I2C-Pins des Pico verbinden (standardmäßig GPIO4 und GPIO5, aber hier verwenden wir D12 und D10 für die LEDs).

Code-Durchlauf

Lass uns den Arduino-Sketch Schritt für Schritt durchgehen. Der Code verwendet die Wire-Bibliothek zur Kommunikation über I2C.

Includes und Definitionen

#include <Wire.h>

#define EEPROM_ADDR 0x50

Wir binden die Wire-Bibliothek ein und definieren die I2C-Adresse des EEPROMs als 0x50. Dies ist eine gängige Adresse für 24LC-Serie-EEPROMs.

Hilfsfunktionen

void eepromWrite(byte memAddr, byte data) {
  Wire.beginTransmission(EEPROM_ADDR);
  Wire.write(memAddr);
  Wire.write(data);
  Wire.endTransmission();
  delay(5); // EEPROM-Schreibzyklus
}

byte eepromRead(byte memAddr) {
  Wire.beginTransmission(EEPROM_ADDR);
  Wire.write(memAddr);
  Wire.endTransmission();
  Wire.requestFrom(EEPROM_ADDR, 1);
  return Wire.available() ? Wire.read() : 0xFF;
}

Setup

void setup() {
  Serial.begin(115200);
  delay(500);
  Wire.begin();
  Serial.println("=== Pico I2C EEPROM Test ===");
  Serial.println();

  // 8 Bytes schreiben
  Serial.println("Schreibe 8 Bytes...");
  byte testData[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA, 0xBE};
  for (int i = 0; i < 8; i++) {
    eepromWrite(i, testData[i]);
    Serial.print("  ["); Serial.print(i);
    Serial.print("] = 0x");
    if (testData[i] < 16) Serial.print('0');
    Serial.println(testData[i], HEX);
  }
  Serial.println();

  // Zurücklesen
  Serial.println("Lese zurück...");
  int pass = 0;
  for (int i = 0; i < 8; i++) {
    byte val = eepromRead(i);
    Serial.print("  ["); Serial.print(i);
    Serial.print("] = 0x");
    if (val < 16) Serial.print('0');
    Serial.print(val, HEX);
    if (val == testData[i]) {
      Serial.println(" OK");
      pass++;
    } else {
      Serial.print(" FEHLER (erwartet 0x");
      Serial.print(testData[i], HEX);
      Serial.println(")");
    }
  }

  Serial.println();
  Serial.print("Ergebnis: ");
  Serial.print(pass);
  Serial.println("/8 bestanden");
}

Loop

void loop() {
  delay(10000);
}

Es gibt nichts, das wiederholt ausgeführt werden muss – der Test läuft einmal in setup(). Die Loop verzögert nur, um die serielle Ausgabe sichtbar zu halten.

Wichtige Konzepte

Häufige Fallstricke & Debugging-Tipps

  1. Falsche I2C-Adresse: Überprüfe die EEPROM-Adresse. Gängige Adressen sind 0x50 bis 0x57 (abhängig von den A0/A1/A2-Pins).
  2. Fehlende Pull-Up-Widerstände: In echter Hardware benötigen SDA und SCL Pull-Up-Widerstände (4,7 kΩ). Velxios virtuelles EEPROM übernimmt dies intern.
  3. Baudrate des seriellen Monitors: Stelle sicher, dass der serielle Monitor auf 115200 Baud eingestellt ist. Eine falsche Einstellung führt zu unleserlichen Zeichen.
  4. Timing des Schreibzyklus: Wenn du den delay(5) auslässt, speichert das EEPROM die Daten möglicherweise nicht korrekt. Erhöhe die Verzögerung bei Bedarf.
  5. LEDs blinken nicht: Überprüfe die Verkabelung. Die rote LED ist mit D12 verbunden, die grüne mit D10. Beide Kathoden gehen an GND.

Vorschläge für Erweiterungen

Probier es selbst aus!

Bereit zum Experimentieren? Öffne das Live-Beispiel in Velxio:

Pico I2C EEPROM R/W starten

Klicke auf die Schaltfläche Ausführen in der Editor-Symbolleiste, um zu kompilieren und zu simulieren. Beobachte die serielle Ausgabe in der Konsole – du solltest sehen, dass alle 8 Bytes erfolgreich zurückgelesen werden.

Velxio-Editor-Symbolleiste mit Kompilieren- und Ausführen-Steuerelementen

Nutze die Leinwand-Symbolleiste, um zu zoomen, zu schwenken und die Schaltung zu inspizieren.

Velxio-Leinwand-Symbolleiste über dem Simulations-Viewport

Musst du weitere Komponenten hinzufügen? Öffne die Komponentenauswahl, um Teile zu durchsuchen.

Velxio-Komponentenauswahl-Modal zum Durchsuchen von Teilen nach Kategorie

Viel Spaß beim Simulieren!


Teilen auf:
David Montero

Geschrieben von

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Ähnliche Artikel


Vorheriger Artikel
Pico SPI Loopback: Testen Sie die serielle Kommunikation Ihres RP2040
Nächster Artikel
Virtuelle DS1307 Echtzeituhr mit Raspberry Pi Pico I2C auslesen