149 lines
4.0 KiB
C
149 lines
4.0 KiB
C
/**
|
|
* @file eeprom_fm24.h
|
|
* @author xxx
|
|
* @date 2023-08-30 14:05:55
|
|
* @brief FM24系列EEPROM驱动 https://zhuanlan.zhihu.com/p/598934638
|
|
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
|
|
*/
|
|
|
|
#ifndef __EEPROM_FM24_H__
|
|
#define __EEPROM_FM24_H__
|
|
#include "main.h"
|
|
#include "spis.h"
|
|
//========在此设定芯片地址=============
|
|
|
|
#define W_ADD_COM 0xa0 // 写字节命令及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 0
|
|
|
|
#define R_ADD_COM 0xa1 // 读命令字节及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 1
|
|
|
|
//=======在此设定芯片型号, 1代表24C01; 16代表24C16; 512代表24C512
|
|
|
|
//=======在此设定芯片型号, 1代表24C01; 16代表24C16; 512代表24C512
|
|
|
|
#define e2prom 256 //
|
|
|
|
#if e2prom == 1
|
|
#define FM24_PAGE_SIZE 16
|
|
#define FM24_SIZE (128 * 8)
|
|
#elif e2prom == 2
|
|
#define FM24_PAGE_SIZE 16
|
|
#define FM24_SIZE (256 * 8)
|
|
#elif e2prom == 4
|
|
#define FM24_PAGE_SIZE 32
|
|
#define FM24_SIZE (512 * 8)
|
|
#elif e2prom == 8
|
|
#define FM24_PAGE_SIZE 64
|
|
#define FM24_SIZE (1024 * 8)
|
|
#elif e2prom == 16
|
|
#define FM24_PAGE_SIZE 128
|
|
#define FM24_SIZE (2048 * 8)
|
|
#elif e2prom == 32
|
|
#define FM24_PAGE_SIZE 128
|
|
#define FM24_SIZE (4096 * 8)
|
|
#elif e2prom == 64
|
|
#define FM24_PAGE_SIZE 256
|
|
#define FM24_SIZE (8192 * 8)
|
|
#elif e2prom == 128
|
|
#define FM24_PAGE_SIZE 256
|
|
#define FM24_SIZE (16384)
|
|
#elif e2prom == 256
|
|
#define FM24_PAGE_SIZE 256
|
|
#define FM24_SIZE (32768) // 32K 128页
|
|
#elif e2prom == 512
|
|
#define FM24_PAGE_SIZE 512
|
|
#define FM24_SIZE (65536)
|
|
#endif
|
|
|
|
#define FM24_CMD_RDSR 0x05 /*!< Read Status Register instruction */
|
|
#define FM24_CMD_WRSR 0x01 /*!< Write Status Register instruction */
|
|
|
|
#define FM24_CMD_WREN 0x06 /*!< Write enable instruction */
|
|
#define FM24_CMD_WRDI 0x04 /*!< Write disable instruction */
|
|
|
|
#define FM24_CMD_READ 0x03 /*!< Read from Memory instruction */
|
|
#define FM24_CMD_WRITE 0x02 /*!< Write to Memory instruction */
|
|
|
|
#define FM24_DUMMY_BYTE 0x00 ///< 无用数据
|
|
|
|
typedef union
|
|
{
|
|
uint8_t data;
|
|
struct
|
|
{
|
|
uint8_t reserve1 : 1;
|
|
uint8_t wel : 1; ///< Write enable latch
|
|
uint8_t bp0 : 1; ///< Block protect 0
|
|
uint8_t bp1 : 1; ///< Block protect 1
|
|
uint8_t reserve2 : 3;
|
|
uint8_t wpen : 1; ///< Write protect enable
|
|
} bits;
|
|
} fm24_write_protection_u;
|
|
|
|
typedef struct
|
|
{
|
|
fm24_write_protection_u write_protection;
|
|
spi_t *spi;
|
|
} fm24_t;
|
|
|
|
/**
|
|
* @brief Initializes the FM24 EEPROM module.
|
|
*/
|
|
extern void eeprom_fm24_init(void);
|
|
|
|
/**
|
|
* @brief Deinitializes the FM24 EEPROM module.
|
|
*/
|
|
extern void eeprom_fm24_dinit(void);
|
|
|
|
/**
|
|
* @brief Gets the fm24_t handle of the FM24 EEPROM module.
|
|
* @return The fm24_t handle of the FM24 EEPROM module.
|
|
*/
|
|
extern fm24_t *eeprom_fm24_get(void);
|
|
|
|
/**
|
|
* @brief Enables the FM24 EEPROM module.
|
|
*/
|
|
extern void eeprom_fm24_enable(void);
|
|
|
|
/**
|
|
* @brief Disables the FM24 EEPROM module.
|
|
*/
|
|
extern void eeprom_fm24_disable(void);
|
|
|
|
/**
|
|
* @brief Reads data from the FM24 EEPROM module.
|
|
* @param read_addr The starting address to read from.
|
|
* @param data Pointer to the buffer to store the read data.
|
|
* @param length The number of bytes to read.
|
|
* @return TRUE if the read operation is successful, FALSE otherwise.
|
|
*/
|
|
extern BOOL eeprom_fm24_read(uint32_t read_addr, uint8_t *data, uint16_t length);
|
|
|
|
/**
|
|
* @brief Writes data to the FM24 EEPROM module.
|
|
* @param write_addr The starting address to write to.
|
|
* @param data Pointer to the data to be written.
|
|
* @param length The number of bytes to write.
|
|
* @return TRUE if the write operation is successful, FALSE otherwise.
|
|
*/
|
|
extern BOOL eeprom_fm24_write(uint32_t write_addr, uint8_t *data, uint16_t length);
|
|
|
|
/**
|
|
* @brief Closes the write protection of the FM24 EEPROM module.
|
|
*/
|
|
extern void eeprom_fm24_write_protection_close(void);
|
|
|
|
/**
|
|
* @brief Gets the write protection state of the FM24 EEPROM module.
|
|
* @return TRUE if the FM24 EEPROM module is not write-protected, FALSE otherwise.
|
|
*/
|
|
extern BOOL eeprom_fm24_write_protection_state(void);
|
|
|
|
/**
|
|
* @brief Performs a test on the FM24 EEPROM module.
|
|
*/
|
|
extern void eeprom_fm24_test(void);
|
|
|
|
#endif // __EEPROM_FM24_H__
|