i2c_master_write.ino

Efinix Sapphire RV64: SoC RISC-V de 64 bits configurable para FPGA · Archivo : i2c_master_write.ino · Lenguaje : C (RISC-V) · Uso : Écrire dans une EEPROM I2C pour la persistance de données simples.

Ilustra la gestión del bus I2C para almacenamiento no volátil, útil para la configuración del sistema.

Habilite un maestro I2C en Efinity. Conecte una EEPROM estándar (ej: AT24C02). Los registros de control dependen en gran medida de la IP específica utilizada en su diseño Efinity. Pruebe con un osciloscopio para validar los tiempos.

i2c_master_write.ino

#include <stdint.h>

#define I2C_BASE 0x80003000
#define I2C_CTRL (*(volatile uint32_t *)(I2C_BASE + 0x00))
#define I2C_DATA (*(volatile uint32_t *)(I2C_BASE + 0x04))
#define I2C_STAT (*(volatile uint32_t *)(I2C_BASE + 0x08))

void i2c_start() { I2C_CTRL |= 0x01; while(!(I2C_STAT & 0x01)); }
void i2c_stop() { I2C_CTRL |= 0x02; while(!(I2C_STAT & 0x02)); }
void i2c_write(uint8_t data) { I2C_DATA = data; while(!(I2C_STAT & 0x04)); }

int main() {
    uint8_t addr = 0x50 << 1; // Adresse EEPROM
    uint8_t data = 0xAA;
    
    while(1) {
        i2c_start();
        i2c_write(addr);
        i2c_write(0x00); // Adresse mémoire
        i2c_write(data);
        i2c_stop();
        // Délai avant réécriture
        for(volatile int i=0; i<1000000; i++);
    }
    return 0;
}

← Volver a la ficha