i2c_master_write.ino
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;
}