/**
 * @brief EEPROM-读写
 * @details 使用芯片内置EEPROM模块对EEPROM进行操作。
 * 写入完成后从 eeprom 里读回来。
 * 判断写入的数据和读回来的是否一致。
 */
#include "lks32mc09x_eeprom.h"
#include "lks32mc09x_gpio.h"
void SoftDelaymS(uint32_t n);
volatile uint32_t testflg = 0; // 测试状态，0空闲 1进行中 2写入数据&读回数据一致 3写入数据&读回数据不一致
uint8_t read_data[32];
uint8_t read_data1[32];
uint8_t write_data[32] = {0};
#define EEPROMADDR 0xa0
/**
 * @brief 主函数，用于测试HSI时钟输出及GPIO翻转
 */
int main(void)
{
    GPIO_Config(GPIO0, 0, GPIO_Mode_OUT, GPIO_AF_GPIO);
    GPIO_Config(GPIO2, 1, GPIO_Mode_IO, GPIO_AF_I2C);
    GPIO_Config(GPIO2, 2, GPIO_Mode_IO, GPIO_AF_I2C);
    EEPROM_InitDefault(); // 初始化时会自动使能
    for (;;)
    {
        if (testflg == 1)
        {
            for (int len = 1; len <= 32; len++) // 从1个数据到32个数据进行测试，以确保不同数据长度下i2c通信是否正常
            {
                for (int i = 0; i < len; i++)
                {
                    write_data[i] = i + len; // 确保每次写入的数据都不一样
                }
                EEPROM_WriteData(EEPROMADDR, 0, write_data, len);
                SoftDelaymS(10);
                EEPROM_ReadData(EEPROMADDR, 0, read_data, len);
                for (int i = 0; i < len; i++)
                {
                    if (read_data[i] != write_data[i])
                    {
                        testflg = 3;
                    }
                }
            }
            if (testflg != 3)
            {
                testflg = 2; // 测试完成，并且没有出现错误
            }
        }
    }
}

