Class to drive a M24LR64 EEPROM with the STM32769I_DISCOVERY board. This EEPROM can be found on the additional ANT7-M24LR-A daughter board.
Dependents: DISCO-F469NI_EEPROM_demo IntegrationCAN_28jun IntegrationCAN_7jul IntegrationCAN_7julnovo ... more
EEPROM_DISCO_F469NI.h
- Committer:
- bcostm
- Date:
- 2016-01-05
- Revision:
- 0:cd22055cbc4b
File content as of revision 0:cd22055cbc4b:
/* Copyright (c) 2010-2011 mbed.org, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __EEPROM_DISCO_F469NI_H #define __EEPROM_DISCO_F469NI_H #ifdef TARGET_DISCO_F469NI #include "mbed.h" #include "stm32469i_discovery_eeprom.h" /* Class to drive a M24LR64 EEPROM. =================================================================== Note: The I2C EEPROM memory (M24LR64) is available on a separate ANT7-M24LR-A daughter board (not provided with the STM32746G_DISCOVERY board). This daughter board must be connected on the CN2 connector. =================================================================== Usage: #include "mbed.h" #include "EEPROM_DISCO_F469NI.h" EEPROM_DISCO_F469NI eep; #define BUFFER_SIZE ((uint32_t)32) #define WRITE_READ_ADDR ((uint32_t)0x0000) int main() { // 12345678901234567890123456789012 uint8_t WriteBuffer[BUFFER_SIZE+1] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"; uint8_t ReadBuffer[BUFFER_SIZE+1]; uint16_t bytes_rd; // Check initialization if (eep.Init() != EEPROM_OK) { error("Initialization FAILED\n"); } // Write buffer if (eep.WriteBuffer(WriteBuffer, WRITE_READ_ADDR, BUFFER_SIZE) != EEPROM_OK) { error("Write buffer FAILED\n"); } // Read buffer bytes_rd = BUFFER_SIZE; if (eep.ReadBuffer(ReadBuffer, WRITE_READ_ADDR, &bytes_rd) != EEPROM_OK) { error("Read buffer FAILED\n"); } else { ReadBuffer[BUFFER_SIZE] = '\0'; printf("Read buffer PASSED\n"); printf("Buffer read = [%s]\n", ReadBuffer); printf("Bytes read = %d\n", bytes_rd); } while(1) { } } */ class EEPROM_DISCO_F469NI { public: //! Constructor EEPROM_DISCO_F469NI(); //! Destructor ~EEPROM_DISCO_F469NI(); /** * @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 Init(void); /** * @brief DeInitializes the EEPROM. * @retval EEPROM state */ uint8_t DeInit(void); /** * @brief Reads a block of data from the EEPROM. * @param pBuffer: pointer to the buffer that receives the data read from * the EEPROM. * @param ReadAddr: EEPROM's internal address to start reading from. * @param NumByteToRead: pointer to the variable holding number of bytes to * be read from the EEPROM. * * @note The variable pointed by NumByteToRead is reset to 0 when all the * data are read from the EEPROM. Application should monitor this * variable in order know when the transfer is complete. * * @retval EEPROM_OK (0); if operation is correctly performed, else return value * different from EEPROM_OK (0); or the timeout user callback. */ uint32_t ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); /** * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. * * @note The number of bytes (combined to write start address); must not * cross the EEPROM page boundary. This function can only write into * the boundaries of an EEPROM page. * This function doesn't check on boundaries condition (in this driver * the function WriteBuffer(); which calls BSP_EEPROM_WritePage() is * responsible of checking on Page boundaries);. * * @param pBuffer: pointer to the buffer containing the data to be written to * the EEPROM. * @param WriteAddr: EEPROM's internal address to write to. * @param NumByteToWrite: pointer to the variable holding number of bytes to * be written into the EEPROM. * * @note The variable pointed by NumByteToWrite is reset to 0 when all the * data are written to the EEPROM. Application should monitor this * variable in order know when the transfer is complete. * * @note This function just configure the communication and enable the DMA * channel to transfer data. Meanwhile, the user application may perform * other tasks in parallel. * * @retval EEPROM_OK (0); if operation is correctly performed, else return value * different from EEPROM_OK (0); or the timeout user callback. */ uint32_t WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); /** * @brief Writes buffer of data to the I2C EEPROM. * @param pBuffer: pointer to the buffer containing the data to be written * to the EEPROM. * @param WriteAddr: EEPROM's internal address to write to. * @param NumByteToWrite: number of bytes to write to the EEPROM. * @retval EEPROM_OK (0); if operation is correctly performed, else return value * different from EEPROM_OK (0); or the timeout user callback. */ uint32_t WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); /** * @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 WaitEepromStandbyState(void); private: }; #else #error "This class must be used with DISCO_F469NI board only." #endif // TARGET_DISCO_F469NI #endif