sggt/App/EEPROM/eeprom_spi.h

182 lines
9.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _EEPROM_SPI_H_
#define _EEPROM_SPI_H_
#include "apps_gather.h"
#include "dac.h"
#include "dac8552.h"
#include "dac7811.h"
//模拟SPI, CS->PB9, WR->PD6, SCLK->PB3, MOSI->PB5, MISO->PB4
//CS->PB9
#define EEPROM_CS_H HAL_GPIO_WritePin(EEPROM_CS_GPIO_Port, EEPROM_CS_Pin, GPIO_PIN_SET)
#define EEPROM_CS_L HAL_GPIO_WritePin(EEPROM_CS_GPIO_Port, EEPROM_CS_Pin, GPIO_PIN_RESET)
//WR->PD6
#define EEPROM_WR_H HAL_GPIO_WritePin(EEPROM_WR_GPIO_Port, EEPROM_WR_Pin, GPIO_PIN_SET)
#define EEPROM_WR_L HAL_GPIO_WritePin(EEPROM_WR_GPIO_Port, EEPROM_WR_Pin, GPIO_PIN_RESET)
//SCLK->PB3
#define EEPROM_SCLK_H HAL_GPIO_WritePin(EEPROM_SCLK_GPIO_Port, EEPROM_SCLK_Pin, GPIO_PIN_SET)
#define EEPROM_SCLK_L HAL_GPIO_WritePin(EEPROM_SCLK_GPIO_Port, EEPROM_SCLK_Pin, GPIO_PIN_RESET)
//MOSI->PB5
#define EEPROM_MOSI_H HAL_GPIO_WritePin(EEPROM_MOSI_GPIO_Port, EEPROM_MOSI_Pin, GPIO_PIN_SET)
#define EEPROM_MOSI_L HAL_GPIO_WritePin(EEPROM_MOSI_GPIO_Port, EEPROM_MOSI_Pin, GPIO_PIN_RESET)
//MISO->PB4
#define EEPROM_MISO HAL_GPIO_ReadPin(EEPROM_MISO_GPIO_Port, EEPROM_MISO_Pin)
//eeprom cmd
#define WRITE_ENABLE 0x06
#define WRITE_DISABLE 0x04
#define WRITE_MEMORY 0x02
#define READ_MEMORY 0x03
#define READ_STATUS 0x05
//0x7D0 - 0x7E0(2000 - 2016)标记后写入0xAAAA连续16位“1”“0”交替
#define DEVICE_CHECK 0x0007D0
#define EE_START_ADDR 0x000000
#define EE_INTERVAL 16
//电压量程
#define EEPROM_TAG_VOLTAGE 0
#define VOL_V_UP_ADDR EE_START_ADDR //电压V上限tag0EE_START_ADDR + 0*EE_INTERVAL
#define VOL_V_LOW_ADDR (VOL_V_UP_ADDR + EE_INTERVAL) //电压V下限tag0EE_START_ADDR + 1*EE_INTERVAL
#define VOL_MV_UP_ADDR (VOL_V_LOW_ADDR + EE_INTERVAL) //电压mV上限tag0EE_START_ADDR + 2*EE_INTERVAL
#define VOL_MV_LOW_ADDR (VOL_MV_UP_ADDR + EE_INTERVAL) //电压mV下限tag0EE_START_ADDR + 3*EE_INTERVAL
//电流量程
#define EEPROM_TAG_CURRENT 1
#define CUR_UP_ADDR (VOL_MV_LOW_ADDR + EE_INTERVAL) //电流上限tag1EE_START_ADDR + 4*EE_INTERVAL
#define CUR_LOW_ADDR (CUR_UP_ADDR + EE_INTERVAL) //电流下限tag1EE_START_ADDR + 5*EE_INTERVAL
//电阻量程
#define EEPROM_TAG_RESISTANCE 2
#define RES_UP_ADDR (CUR_LOW_ADDR + EE_INTERVAL) //电阻上限tag2EE_START_ADDR + 6*EE_INTERVAL
#define RES_LOW_ADDR (RES_UP_ADDR + EE_INTERVAL) //电阻下限tag2EE_START_ADDR + 7*EE_INTERVAL
//频率量程
#define EEPROM_TAG_FREQUENCE 3
#define FRE_UP_ADDR (RES_LOW_ADDR + EE_INTERVAL) //频率上限tag3EE_START_ADDR + 8*EE_INTERVAL
#define FRE_LOW_ADDR (FRE_UP_ADDR + EE_INTERVAL) //频率下限tag3EE_START_ADDR + 9*EE_INTERVAL
//TC_K量程
#define EEPROM_TAG_TC_K 4
#define TC_K_UP_ADDR (FRE_LOW_ADDR + EE_INTERVAL) //TC_K上限tag4EE_START_ADDR + 10*EE_INTERVAL
#define TC_K_LOW_ADDR (TC_K_UP_ADDR + EE_INTERVAL) //TC_K下限tag4EE_START_ADDR + 11*EE_INTERVAL
//TC_S量程
#define EEPROM_TAG_TC_S 5
#define TC_S_UP_ADDR (TC_K_LOW_ADDR + EE_INTERVAL) //TC_S上限tag5EE_START_ADDR + 12*EE_INTERVAL
#define TC_S_LOW_ADDR (TC_S_UP_ADDR + EE_INTERVAL) //TC_S下限tag5EE_START_ADDR + 13*EE_INTERVAL
//TC_N量程
#define EEPROM_TAG_TC_N 6
#define TC_N_UP_ADDR (TC_S_LOW_ADDR + EE_INTERVAL) //TC_N上限tag6EE_START_ADDR + 14*EE_INTERVAL
#define TC_N_LOW_ADDR (TC_N_UP_ADDR + EE_INTERVAL) //TC_N下限tag6EE_START_ADDR + 15*EE_INTERVAL
//TC_B量程
#define EEPROM_TAG_TC_B 7
#define TC_B_UP_ADDR (TC_N_LOW_ADDR + EE_INTERVAL) //TC_B上限tag7EE_START_ADDR + 16*EE_INTERVAL
#define TC_B_LOW_ADDR (TC_B_UP_ADDR + EE_INTERVAL) //TC_B下限tag7EE_START_ADDR + 17*EE_INTERVAL
//TC_E量程
#define EEPROM_TAG_TC_E 8
#define TC_E_UP_ADDR (TC_B_LOW_ADDR + EE_INTERVAL) //TC_E上限tag8EE_START_ADDR + 18*EE_INTERVAL
#define TC_E_LOW_ADDR (TC_E_UP_ADDR + EE_INTERVAL) //TC_E下限tag8EE_START_ADDR + 19*EE_INTERVAL
//TC_J量程
#define EEPROM_TAG_TC_J 9
#define TC_J_UP_ADDR (TC_E_LOW_ADDR + EE_INTERVAL) //TC_J上限tag9EE_START_ADDR + 20*EE_INTERVAL
#define TC_J_LOW_ADDR (TC_J_UP_ADDR + EE_INTERVAL) //TC_J下限tag9EE_START_ADDR + 21*EE_INTERVAL
//TC_R量程
#define EEPROM_TAG_TC_R 10
#define TC_R_UP_ADDR (TC_J_LOW_ADDR + EE_INTERVAL) //TC_R上限tag10EE_START_ADDR + 22*EE_INTERVAL
#define TC_R_LOW_ADDR (TC_R_UP_ADDR + EE_INTERVAL) //TC_R下限tag10EE_START_ADDR + 23*EE_INTERVAL
//TC_T量程
#define EEPROM_TAG_TC_T 11
#define TC_T_UP_ADDR (TC_R_LOW_ADDR + EE_INTERVAL) //TC_T上限tag11EE_START_ADDR + 24*EE_INTERVAL
#define TC_T_LOW_ADDR (TC_T_UP_ADDR + EE_INTERVAL) //TC_T下限tag11EE_START_ADDR + 25*EE_INTERVAL
//RTD量程
#define EEPROM_TAG_RTD 12
#define RTD_UP_ADDR (TC_T_LOW_ADDR + EE_INTERVAL) //RTD上限tag12EE_START_ADDR + 26*EE_INTERVAL
#define RTD_LOW_ADDR (RTD_UP_ADDR + EE_INTERVAL) //RTD下限tag12EE_START_ADDR + 27*EE_INTERVAL
//采样间隔
#define EEPROM_TAG_SAMPLE_INTERVAL 13
#define SAMPLE_INTERVAL_ADDR (RTD_LOW_ADDR + EE_INTERVAL) //采样间隔画点时间间隔tag13EE_START_ADDR + 28*EE_INTERVAL
//描点数量
#define EEPROM_TAG_PLOT_COUNT 14
#define PLOT_COUNT_ADDR (SAMPLE_INTERVAL_ADDR + EE_INTERVAL) //描点数量tag14EE_START_ADDR + 29*EE_INTERVAL
//输入曲线&图例颜色
#define EEPROM_TAG_INPUT_COLOR 15
#define INPUT_COLOR_ADDR (PLOT_COUNT_ADDR + EE_INTERVAL) //输入曲线颜色tag15EE_START_ADDR + 30*EE_INTERVAL
//输出曲线&图例颜色
#define EEPROM_TAG_OUTPUT_COLOR 16
#define OUTPUT_COLOR_ADDR (INPUT_COLOR_ADDR + EE_INTERVAL) //输出曲线颜色tag16EE_START_ADDR + 31*EE_INTERVAL
//语言选择
#define EEPROM_TAG_LANGUAGE 17
#define LANGUAGE_SELECT_ADDR (OUTPUT_COLOR_ADDR + EE_INTERVAL) //语言选择tag17EE_START_ADDR + 32*EE_INTERVAL
//电流输出校准mA11个点10个间隔
#define EEPROM_TAG_CAL_CUR_MA_OUT 18 //电流mA输出值校准tag18
#define CAL_CUR_MA_OUT_ADDR_FLAG (LANGUAGE_SELECT_ADDR + EE_INTERVAL) //有效标志是否存在数据存在0xAAAA
#define CAL_CUR_MA_OUT_ADDR_START (CAL_CUR_MA_OUT_ADDR_FLAG + EE_INTERVAL) //数据起始地址EE_START_ADDR + 34*EE_INTERVAL
#define CAL_CUR_MA_OUT_ADDR_END (CAL_CUR_MA_OUT_ADDR_START + 2 * EE_INTERVAL * CALIBRATE_CUR_MA_OUT_POINTS) //EE_START_ADDR + 56*EE_INTERVAL
//电压输出校准V11个点10个间隔
#define EEPROM_TAG_CAL_VOL_V_OUT 19 //电压V输出值校准tag19
#define CAL_VOL_V_OUT_ADDR_FLAG CAL_CUR_MA_OUT_ADDR_END //有效标志是否存在数据存在0xAAAA
#define CAL_VOL_V_OUT_ADDR_START (CAL_VOL_V_OUT_ADDR_FLAG + EE_INTERVAL) //数据起始地址EE_START_ADDR + 57*EE_INTERVAL
#define CAL_VOL_V_OUT_ADDR_END (CAL_VOL_V_OUT_ADDR_START + 2 * EE_INTERVAL * CALIBRATE_VOL_V_OUT_POINTS) //EE_START_ADDR + 79*EE_INTERVAL
//电压输出校准mV11个点10个间隔
#define EEPROM_TAG_CAL_VOL_MV_OUT 20 //电压mV输出值校准tag20
#define CAL_VOL_MV_OUT_ADDR_FLAG CAL_VOL_V_OUT_ADDR_END //有效标志是否存在数据存在0xAAAA
#define CAL_VOL_MV_OUT_ADDR_START (CAL_VOL_MV_OUT_ADDR_FLAG + EE_INTERVAL) //数据起始地址EE_START_ADDR + 80*EE_INTERVAL
#define CAL_VOL_MV_OUT_ADDR_END (CAL_VOL_MV_OUT_ADDR_START + 2 * EE_INTERVAL * CALIBRATE_VOL_MV_OUT_POINTS) //EE_START_ADDR + 102*EE_INTERVAL
//电阻输出校准Ω11个点10个间隔
#define EEPROM_TAG_CAL_RES_OHM_OUT 21 //电阻Ω输出值校准tag21
#define CAL_RES_OHM_OUT_ADDR_FLAG CAL_VOL_MV_OUT_ADDR_END //有效标志是否存在数据存在0xAAAA
#define CAL_RES_OHM_OUT_ADDR_START (CAL_RES_OHM_OUT_ADDR_FLAG + EE_INTERVAL) //数据起始地址EE_START_ADDR + 103*EE_INTERVAL
#define CAL_RES_OHM_OUT_ADDR_END (CAL_RES_OHM_OUT_ADDR_START + 2 * EE_INTERVAL * CALIBRATE_RES_OHM_OUT_POINTS) //EE_START_ADDR + 125*EE_INTERVAL
//根据需求后续在此处向后添加
void eeprom_spi_init(void);
void eeprom_spi_writebyte(uint8_t wrt_data);
uint8_t SPI_WriteReadByte(uint8_t data);
uint8_t eeprom_spi_readbyte(void);
void eeprom_writedata(int32_t addr_long, uint8_t txd);
uint8_t eeprom_readdata(int32_t addr_long);
//开机上电后读取参数
void eeprom_dataread(void);
//判断EEPROM内是否已存在数据
uint8_t eeprom_device_check(void);
//保存指定数据
void eeprom_datasave_single(uint8_t tag);
//保存修改过的数据
void eeprom_datasave_changed(void);
//读取指定数据
void eeprom_dataread_single(uint8_t tag);
#endif