bonjour,
on ne peut pas envoyer une valeur 16 bits directement via I2C
il faut donc decomposer en bytes
envoi de la valeur x 16 bits
en C
EEPROM_Write(Address,Lo(x));
EEPROM_Write(Address+1,Hi(x));
lecture valeur 16 bits
Lo(x):=EEPROM_Read(Address);
Hi(x):=EEPROM_Read(Address+1);
attention avec les EEPROM de grande capacité
notion de pages et Bank de pages.
La longueur de page depend du type d'eeprom page de 32,64,128 ou 256bytes
un tampon RAM correspondant à la page , permet d'eviter de trop grand nombre d'ecriture
en ne sauvant les donnees que modulo page..
exemple avec un datalogger
exemple en C pour Eeeprom 128Kbytes
Code : Tout sélectionner
void Read_Page_From_24FC1026(unsigned int Page)
{
unsigned int Ad;
unsigned char Is;
unsigned char err;
erreurs=0;
if(GIE_bit) Is=1;
GIE_bit=0;
err=0;
Ad=(Page/512)<<1; Device_Adresse= EEPROM_128K_ADR + Ad;
sprintf(txt,"read page %05u From Device adresse %04X \r\n",Page,(int)Device_Adresse);
UART1_Write_Text(txt);
Ad=Page * 128 ;
I2C1_Start();
err=I2C1_Wr(Device_Adresse ); err=I2C1_Wr(Hi(Ad)); err=I2C1_Wr(Lo(Ad));
if (err>0) erreurs++;
I2C1_Repeated_Start();
err=I2C1_Wr( Device_Adresse+1 ); I2C1_Is_Idle();
for (Ad=0;Ad<126;Ad++)
{
Page_Eeprom[Ad]=I2C1_Rd(1u); }
Page_Eeprom[Ad]=I2C1_Rd(0u); I2C1_Stop();
I2C1_Is_Idle();
Delay_ms(50);
if (Is==1)GIE_bit=1;
}