Voltar

Leitura/Gravação de EEPROM I2C com Pico: Simule Memória Não Volátil no Seu Navegador

Introdução

Você já quis armazenar dados que sobrevivem a um ciclo de energia? Em sistemas embarcados, a EEPROM (Memória Somente de Leitura Programável e Apagável Eletricamente) é a escolha ideal para armazenamento não volátil. Hoje, vamos simular uma operação de leitura/gravação de EEPROM I2C usando o Raspberry Pi Pico — tudo dentro do seu navegador com o Velxio. Nenhum hardware necessário!

Vamos escrever alguns bytes na EEPROM, lê-los de volta e verificar se eles coincidem. Ao longo do caminho, você aprenderá sobre o protocolo I2C, a biblioteca Wire e como depurar a saída serial. Vamos mergulhar!

Montagem do Circuito

Abra o exemplo no Velxio e você verá o circuito na tela. Os componentes principais são:

Diagrama do circuito pico-i2c-eeprom-rw na tela de simulação do Velxio

Detalhes da Fiação

De (pino do Pico)Para (Componente)Cor do Fio
D12 (GPIO12)Anodo do LED VermelhoVermelho (#ff4444)
D10 (GPIO10)Anodo do LED VerdeVerde (#00cc00)
Catodo do LED VermelhoGND.1Preto (#000000)
Catodo do LED VerdeGND.1Preto (#000000)

Nota: Nesta simulação, a EEPROM I2C é virtual — ela está integrada ao ambiente Velxio. Os LEDs são usados como indicadores visuais: o LED vermelho pisca durante uma gravação, o LED verde durante uma leitura. Em um circuito real, você conectaria as linhas SDA e SCL da EEPROM aos pinos I2C do Pico (GPIO4 e GPIO5 por padrão, mas aqui usamos D12 e D10 para os LEDs).

Explicação do Código

Vamos detalhar o sketch Arduino. O código usa a biblioteca Wire para se comunicar via I2C.

Includes e Definições

#include <Wire.h>

#define EEPROM_ADDR 0x50

Incluímos a biblioteca Wire e definimos o endereço I2C da EEPROM como 0x50. Este é um endereço comum para EEPROMs da série 24LC.

Funções Auxiliares

void eepromWrite(byte memAddr, byte data) {
  Wire.beginTransmission(EEPROM_ADDR);
  Wire.write(memAddr);
  Wire.write(data);
  Wire.endTransmission();
  delay(5); // Ciclo de gravação da EEPROM
}

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("=== Teste de EEPROM I2C com Pico ===");
  Serial.println();

  // Grava 8 bytes
  Serial.println("Gravando 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();

  // Leitura de volta
  Serial.println("Lendo de volta...");
  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(" FALHOU (esperado 0x");
      Serial.print(testData[i], HEX);
      Serial.println(")");
    }
  }

  Serial.println();
  Serial.print("Resultado: ");
  Serial.print(pass);
  Serial.println("/8 passaram");
}

Loop

void loop() {
  delay(10000);
}

Nada a fazer repetidamente — o teste é executado uma vez no setup(). O loop apenas atrasa para manter a saída serial visível.

Conceitos Principais

Armadilhas Comuns e Dicas de Depuração

  1. Endereço I2C Errado: Verifique novamente o endereço da EEPROM. Endereços comuns são 0x50 a 0x57 (dependendo dos pinos A0/A1/A2).
  2. Resistores de Pull-up Ausentes: Em hardware real, SDA e SCL precisam de resistores de pull-up (4,7kΩ). A EEPROM virtual do Velxio lida com isso internamente.
  3. Taxa de Baud do Monitor Serial: Certifique-se de que o monitor serial está configurado para 115200 baud. Incompatibilidade causa caracteres ilegíveis.
  4. Tempo do Ciclo de Gravação: Se você pular o delay(5), a EEPROM pode não armazenar os dados corretamente. Aumente o atraso se necessário.
  5. LEDs Não Piscando: Verifique a fiação. O LED vermelho está conectado ao D12, o verde ao D10. Ambos os catodos vão para o GND.

Extensões Sugeridas

Experimente Você Mesmo!

Pronto para experimentar? Abra o exemplo ao vivo no Velxio:

Iniciar Leitura/Gravação de EEPROM I2C com Pico

Clique no botão Executar na barra de ferramentas do editor para compilar e simular. Observe a saída serial no console — você deve ver todos os 8 bytes lidos com sucesso.

Barra de ferramentas do editor Velxio com controles de compilar e executar

Use a barra de ferramentas da tela para ampliar, mover e inspecionar o circuito.

Barra de ferramentas da tela Velxio acima da janela de simulação

Precisa adicionar mais componentes? Abra o seletor de componentes para navegar pelas peças.

Seletor de componentes Velxio navegando por peças por categoria

Boas simulações!


Compartilhar em:
David Montero

Escrito por

David Montero

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

GitHub velxio.dev

Artigos relacionados


Artigo anterior
Loopback SPI no Pico: Teste a Comunicação Serial do seu RP2040
Próximo artigo
Leia um RTC DS1307 Virtual com I2C no Raspberry Pi Pico