/** * @brief Wait for EEPROM Standby state. * * @note This function allows to wait and check that EEPROM has finished the * last operation. It is mostly used after Write operation: after receiving * the buffer to be written, the EEPROM may need additional time to actually * perform the write operation. During this time, it doesn't answer to * I2C packets addressed to it. Once the write operation is complete * the EEPROM responds to its address. * * @retval EEPROM_OK (0) if operation is correctly performed, else return value * different from EEPROM_OK (0) or the timeout user callback. */ uint32_t BSP_EEPROM_WaitEepromStandbyState(void) { HAL_StatusTypeDef status; EEPROMTimeout = HAL_GetTick(); do { if((HAL_GetTick() - EEPROMTimeout) < EEPROM_LONG_TIMEOUT) { BSP_EEPROM_TIMEOUT_UserCallback(); return EEPROM_TIMEOUT; } status = EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS_NUMBER); }while (status == HAL_BUSY); /* Check if the maximum allowed number of trials has bee reached */ if (status != HAL_OK) { /* If the maximum number of trials has been reached, exit the function */ BSP_EEPROM_TIMEOUT_UserCallback(); return EEPROM_FAIL; } return EEPROM_OK; }
/** * @brief Initializes peripherals used by the I2C EEPROM driver. * * @note There are 2 different versions of M24LR64 (A01 & A02). * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) * @retval EEPROM_OK (0) if operation is correctly performed, else return value * different from EEPROM_OK (0) */ uint32_t BSP_EEPROM_Init(void) { /* I2C Initialization */ EEPROM_IO_Init(); /* Select the EEPROM address for A01 and check if OK */ EEPROMAddress = EEPROM_I2C_ADDRESS_A01; if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) { /* Select the EEPROM address for A02 and check if OK */ EEPROMAddress = EEPROM_I2C_ADDRESS_A02; if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) { return EEPROM_FAIL; } } return EEPROM_OK; }
/** * @brief Waits for EEPROM Standby state. * * @note This function allows to wait and check that EEPROM has finished the * last operation. It is mostly used after Write operation: after receiving * the buffer to be written, the EEPROM may need additional time to actually * perform the write operation. During this time, it doesn't answer to * I2C packets addressed to it. Once the write operation is complete * the EEPROM responds to its address. * * @param None * @retval EEPROM_OK (0) if operation is correctly performed, else return value * different from EEPROM_OK (0) or the timeout user callback. */ static uint32_t EEPROM_WaitEepromStandbyState(void) { /* Check if the maximum allowed number of trials has bee reached */ if(EEPROM_IO_IsDeviceReady(EEPROM_I2C_ADDRESS, EEPROM_MAX_TRIALS) != HAL_OK) { /* If the maximum number of trials has been reached, exit the function */ BSP_EEPROM_TIMEOUT_UserCallback(); return EEPROM_TIMEOUT; } return EEPROM_OK; }
/** * @brief Initializes peripherals used by the I2C EEPROM driver. * * @note There are 2 different versions of M24LR64 (A01 & A02). * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) * @retval EEPROM_OK (0) if operation is correctly performed, else return value * different from EEPROM_OK (0) */ static uint32_t EEPROM_I2C_Init(void) { EEPROM_IO_Init(); /*Select the EEPROM address for M24LR64 A02 and check if OK*/ EEPROMAddress = EEPROM_ADDRESS_M24LR64_A01; EEPROMPageSize = EEPROM_PAGESIZE_M24LR64; if (EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) { /*Select the EEPROM address for M24LR64 A01 and check if OK*/ EEPROMAddress = EEPROM_ADDRESS_M24LR64_A02; EEPROMPageSize = EEPROM_PAGESIZE_M24LR64; if (EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) { return EEPROM_FAIL; } } return EEPROM_OK; }