2017-02-23 33 views
0

AT24C256 I2C EEPROMへの書き込みまたは読み出しに苦労しています。私はSTM32F0ディスカバリーボードを使ってEEPROMに読み書きしています。I2C EEPROM + STM32F0への書き込み/読み出しエラー。

私は基本構造にHALライブラリとCUBEMXを使用しています。私は読み書き機能をテストするための小さなコードを書いています。デバッグでは、Testの値は常に '2'ですが、メモリへの書き込みに成功すると '1'にな​​ります。ここでは、次のとおりです。 -

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

    } 

答えて

0

あなたはそれがHAL_OKを返さない理由を理解するために機能HAL_I2C_Mem_Writeにステップする必要があります。具体的には、それが正確に何を返すかを確認してください。 コードを見ると、問題はI2Cアドレスであると確信しています。

W

1 0 1 0 0 A1 A2 R /あなたがGND、I2CアドレスにピンA1とA2を接続すると仮定すると:AT24C256のデータシートでは、彼らは、I2Cアドレスがあることを言いますである:Hex中

1 0 1 0 0 0 0 R/W

、I2Cアドレス0xA0をです。だから、次のように自分のアドレスの定義を変更します。

#define ADDR_24LCxx 0xA0 

そして、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) 

私は100ミリ秒にタイムアウトをも増加していることに注意してください。テストのために、あなたはタイムアウトの問題を本当に望んでいません....

関連する問題