i2c_master_write.ino

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

Illustre la gestion du bus I2C pour le stockage non-volatile, utile pour la configuration système.

Activez un maître I2C dans Efinity. Connectez une EEPROM standard (ex: AT24C02). Les registres de contrôle dépendent fortement de l'IP spécifique utilisée dans votre design Efinity. Testez avec un oscilloscope pour valider les timing.

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;
}

← Retour à la fiche