2017-02-23 3 views
0

Je n'arrive pas à écrire ou lire dans l'EEPROM I2C AT24C256. J'utilise la carte de découverte STM32F0 pour lire/écrire dans l'EEPROM. J'utilise la bibliothèque HAL et CUBEMX pour la structure de base. J'ai écrit un petit code pour tester la fonction de lecture et d'écriture. Lors du débogage, les valeurs de Test sont toujours '2' alors qu'elles devraient être '1' si elles réussissent à écrire en mémoire. Ici, il est: -Erreur lors de l'écriture/lecture dans l'EEPROM I2C + Découverte STM32F0

#define ADDR_24LCxx_Write 0x50 
    #define ADDR_24LCxx_Read 0x50 
    #define BufferSize 5 
    uint8_t WriteBuffer[BufferSize],ReadBuffer[BufferSize],Test; 
    uint16_t i; 

    I2C_HandleTypeDef hi2c1; 

    int main(void) 
    { 

    HAL_Init(); 

    /* Configure the system clock */ 
    SystemClock_Config(); 

    /* Initialize all configured peripherals */ 
    MX_GPIO_Init(); 
    MX_I2C1_Init(); 

    for(i=0; i<5; i++) 
    { 
      WriteBuffer[i]=i; 
    } 

    if(HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Write, 0, I2C_MEMADD_SIZE_8BIT,WriteBuffer,BufferSize, 0x10) == HAL_OK) 
    { 
      Test = 1; 
    } 

    else 
    { 
      Test = 2; 
    } 

    HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, 0, I2C_MEMADD_SIZE_8BIT,ReadBuffer,BufferSize, 0x10); 

    if(memcmp(WriteBuffer,ReadBuffer,BufferSize) == 0) /* check date */ 
    { 
      Test = 3; 
    } 

    else 
    { 
      Test = 4; 
    } 

    } 

Répondre

0

Vous devriez pas dans la fonction HAL_I2C_Mem_Write de comprendre pourquoi il ne retourne pas HAL_OK. Plus particulièrement, vous devriez vérifier ce qu'il renvoie exactement, cela vous aiderait. En regardant votre code, je suis confiant que le problème est avec l'adresse I2C. Dans la fiche AT24C256, on dit que l'adresse I2C est:

1 0 1 0 0 A1 A2 R/W

En supposant que vous avez connecté les broches A1 et A2 à GND, l'adresse I2C est:

1 0 1 0 0 0 0 R/W

en hexadécimal, l'adresse I2C est 0xA0. Donc, changer la définition de votre adresse comme suit:

#define ADDR_24LCxx 0xA0 

Et dans les fonctions de HAL:

HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx, 0, I2C_MEMADD_SIZE_8BIT,WriteBuffer,BufferSize, 100) 
HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx, 0, I2C_MEMADD_SIZE_8BIT,ReadBuffer,BufferSize, 100) 

S'il vous plaît noter que j'ai également augmenté le délai d'attente à 100 ms. Pour tester, vous ne voulez pas vraiment avoir des problèmes de timeout ....