From 775635019c2ccab9b726b76510e84c393e8abc67 Mon Sep 17 00:00:00 2001 From: bogd Date: Mon, 24 Jun 2024 14:36:16 +0200 Subject: [PATCH] check eeprom ready before read, disabled debug messages in eeprom driver --- src/EEPROM.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/EEPROM.c b/src/EEPROM.c index 8a60751..c1a4932 100644 --- a/src/EEPROM.c +++ b/src/EEPROM.c @@ -33,6 +33,9 @@ #define EEPR24CXX_ADDR 0xA0 /*!< Slave address of 24Cxx devices*/ +#define EEPROM_WRITE_PAGE_SIZE 32 +#define EEPROM_WRITE_MAX_ATTEMPTS 20 + typedef struct { i2c_port_t port; // I2C port number @@ -96,14 +99,27 @@ static esp_err_t i2c_dev_write(const i2c_dev_t *dev, const void *out_reg, size_t return res; } + + esp_err_t eepr_i2c_read(uint16_t addr, uint8_t *data, int length) { + + int attempts = 0; + esp_err_t err; uint8_t adr[] = { (uint8_t)(addr >> 8), (uint8_t)(addr & 0xff) }; - return i2c_dev_read(&eepr_24c32, adr, 2, data, length); + while ((err = i2c_dev_read(&eepr_24c32, adr, 2, data, length)) != ESP_OK) + { + //ESP_LOGW(TAG, "EEPROM not ready attempt %d", attempts); + if (++attempts >= EEPROM_WRITE_MAX_ATTEMPTS) //Critical error + { + ESP_LOGE(TAG, "EEPROM read critical error!"); + return err; + } + vTaskDelay(pdMS_TO_TICKS(10)); + } + return ESP_OK; } -#define EEPROM_WRITE_PAGE_SIZE 32 -#define EEPROM_WRITE_MAX_ATTEMPTS 20 esp_err_t eepr_i2c_write(uint16_t addr, uint8_t *data, int length) { @@ -116,7 +132,7 @@ esp_err_t eepr_i2c_write(uint16_t addr, uint8_t *data, int length) uint8_t adr[] = { (uint8_t)(block_addr >> 8), (uint8_t)(block_addr & 0xff) }; while ((err = i2c_dev_write(&eepr_24c32, adr, 2, data + written, block_len)) != ESP_OK) { - ESP_LOGW(TAG, "EEPROM not ready attempt %d", attempts); + //ESP_LOGW(TAG, "EEPROM not ready attempt %d", attempts); if (++attempts >= EEPROM_WRITE_MAX_ATTEMPTS) //Critical error { ESP_LOGE(TAG, "EEPROM write critical error!"); @@ -126,7 +142,7 @@ esp_err_t eepr_i2c_write(uint16_t addr, uint8_t *data, int length) } attempts = 0; written += block_len; - ESP_LOGI(TAG, "written %d byte from addr %d", written, block_addr); + //ESP_LOGI(TAG, "written %d byte from addr %d", written, block_addr); block_addr += EEPROM_WRITE_PAGE_SIZE; }