2017-02-23 4 views
0

Ich habe Schwierigkeiten zu schreiben oder lesen zu AT24C256 I2C EEPROM. Ich benutze STM32F0 Discovery Board zum Lesen/Schreiben in EEPROM.Fehler beim Schreiben/Lesen auf I2C EEPROM + STM32F0 Discovery

Ich benutze HAL-Bibliothek und CUBEMX für die grundlegende Struktur. Ich habe einen kleinen Code geschrieben, um die Lese- und Schreibfunktion zu testen. Beim Debuggen der Werte von Test ist immer '2', während es bei einem erfolgreichen Schreiben in den Speicher '1' sein sollte. Hier ist sie: -

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

    } 

Antwort

0

Sie in der Funktion Schritt sollen HAL_I2C_Mem_Write zu verstehen, warum es nicht HAL_OK zurück. Insbesondere sollten Sie überprüfen, was es genau zurückgibt, es würde Ihnen helfen. Mit Blick auf Ihren Code bin ich zuversichtlich, dass das Problem mit I2C-Adresse ist. Im AT24C256 Datenblatt, sagen sie, dass die I2C-Adresse ist:

1 0 1 0 0 A1 A2 R/W

Unter der Annahme, dass man die Stifte A1 und A2 mit GND verbunden, die I2C-Adresse ist: 0xA0

1 0 1 0 0 0 0 R/W

In hex, ist die I2C-Adresse. Also, Ihre Adresse Definition wie folgt ändern:

#define ADDR_24LCxx 0xA0 

Und in den HAL-Funktionen:

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) 

Bitte beachten Sie, dass ich auch das Timeout auf 100 ms erhöht. Zum Testen möchten Sie nicht wirklich Timeout-Probleme haben ....