182 lines
9.1 KiB
C
182 lines
9.1 KiB
C
#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上限,tag:0,EE_START_ADDR + 0*EE_INTERVAL
|
||
#define VOL_V_LOW_ADDR (VOL_V_UP_ADDR + EE_INTERVAL) //电压V下限,tag:0,EE_START_ADDR + 1*EE_INTERVAL
|
||
#define VOL_MV_UP_ADDR (VOL_V_LOW_ADDR + EE_INTERVAL) //电压mV上限,tag:0,EE_START_ADDR + 2*EE_INTERVAL
|
||
#define VOL_MV_LOW_ADDR (VOL_MV_UP_ADDR + EE_INTERVAL) //电压mV下限,tag:0,EE_START_ADDR + 3*EE_INTERVAL
|
||
|
||
//电流量程
|
||
#define EEPROM_TAG_CURRENT 1
|
||
#define CUR_UP_ADDR (VOL_MV_LOW_ADDR + EE_INTERVAL) //电流上限,tag:1,EE_START_ADDR + 4*EE_INTERVAL
|
||
#define CUR_LOW_ADDR (CUR_UP_ADDR + EE_INTERVAL) //电流下限,tag:1,EE_START_ADDR + 5*EE_INTERVAL
|
||
|
||
//电阻量程
|
||
#define EEPROM_TAG_RESISTANCE 2
|
||
#define RES_UP_ADDR (CUR_LOW_ADDR + EE_INTERVAL) //电阻上限,tag:2,EE_START_ADDR + 6*EE_INTERVAL
|
||
#define RES_LOW_ADDR (RES_UP_ADDR + EE_INTERVAL) //电阻下限,tag:2,EE_START_ADDR + 7*EE_INTERVAL
|
||
|
||
//频率量程
|
||
#define EEPROM_TAG_FREQUENCE 3
|
||
#define FRE_UP_ADDR (RES_LOW_ADDR + EE_INTERVAL) //频率上限,tag:3,EE_START_ADDR + 8*EE_INTERVAL
|
||
#define FRE_LOW_ADDR (FRE_UP_ADDR + EE_INTERVAL) //频率下限,tag:3,EE_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上限,tag:4,EE_START_ADDR + 10*EE_INTERVAL
|
||
#define TC_K_LOW_ADDR (TC_K_UP_ADDR + EE_INTERVAL) //TC_K下限,tag:4,EE_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上限,tag:5,EE_START_ADDR + 12*EE_INTERVAL
|
||
#define TC_S_LOW_ADDR (TC_S_UP_ADDR + EE_INTERVAL) //TC_S下限,tag:5,EE_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上限,tag:6,EE_START_ADDR + 14*EE_INTERVAL
|
||
#define TC_N_LOW_ADDR (TC_N_UP_ADDR + EE_INTERVAL) //TC_N下限,tag:6,EE_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上限,tag:7,EE_START_ADDR + 16*EE_INTERVAL
|
||
#define TC_B_LOW_ADDR (TC_B_UP_ADDR + EE_INTERVAL) //TC_B下限,tag:7,EE_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上限,tag:8,EE_START_ADDR + 18*EE_INTERVAL
|
||
#define TC_E_LOW_ADDR (TC_E_UP_ADDR + EE_INTERVAL) //TC_E下限,tag:8,EE_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上限,tag:9,EE_START_ADDR + 20*EE_INTERVAL
|
||
#define TC_J_LOW_ADDR (TC_J_UP_ADDR + EE_INTERVAL) //TC_J下限,tag:9,EE_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上限,tag:10,EE_START_ADDR + 22*EE_INTERVAL
|
||
#define TC_R_LOW_ADDR (TC_R_UP_ADDR + EE_INTERVAL) //TC_R下限,tag:10,EE_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上限,tag:11,EE_START_ADDR + 24*EE_INTERVAL
|
||
#define TC_T_LOW_ADDR (TC_T_UP_ADDR + EE_INTERVAL) //TC_T下限,tag:11,EE_START_ADDR + 25*EE_INTERVAL
|
||
|
||
//RTD量程
|
||
#define EEPROM_TAG_RTD 12
|
||
#define RTD_UP_ADDR (TC_T_LOW_ADDR + EE_INTERVAL) //RTD上限,tag:12,EE_START_ADDR + 26*EE_INTERVAL
|
||
#define RTD_LOW_ADDR (RTD_UP_ADDR + EE_INTERVAL) //RTD下限,tag:12,EE_START_ADDR + 27*EE_INTERVAL
|
||
|
||
//采样间隔
|
||
#define EEPROM_TAG_SAMPLE_INTERVAL 13
|
||
#define SAMPLE_INTERVAL_ADDR (RTD_LOW_ADDR + EE_INTERVAL) //采样间隔(画点时间间隔),tag:13,EE_START_ADDR + 28*EE_INTERVAL
|
||
|
||
//描点数量
|
||
#define EEPROM_TAG_PLOT_COUNT 14
|
||
#define PLOT_COUNT_ADDR (SAMPLE_INTERVAL_ADDR + EE_INTERVAL) //描点数量,tag:14,EE_START_ADDR + 29*EE_INTERVAL
|
||
|
||
//输入曲线&图例颜色
|
||
#define EEPROM_TAG_INPUT_COLOR 15
|
||
#define INPUT_COLOR_ADDR (PLOT_COUNT_ADDR + EE_INTERVAL) //输入曲线颜色,tag:15,EE_START_ADDR + 30*EE_INTERVAL
|
||
|
||
//输出曲线&图例颜色
|
||
#define EEPROM_TAG_OUTPUT_COLOR 16
|
||
#define OUTPUT_COLOR_ADDR (INPUT_COLOR_ADDR + EE_INTERVAL) //输出曲线颜色,tag:16,EE_START_ADDR + 31*EE_INTERVAL
|
||
|
||
//语言选择
|
||
#define EEPROM_TAG_LANGUAGE 17
|
||
#define LANGUAGE_SELECT_ADDR (OUTPUT_COLOR_ADDR + EE_INTERVAL) //语言选择,tag:17,EE_START_ADDR + 32*EE_INTERVAL
|
||
|
||
//电流输出校准mA(11个点,10个间隔)
|
||
#define EEPROM_TAG_CAL_CUR_MA_OUT 18 //电流mA输出值校准,tag:18
|
||
#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
|
||
|
||
//电压输出校准V(11个点,10个间隔)
|
||
#define EEPROM_TAG_CAL_VOL_V_OUT 19 //电压V输出值校准,tag:19
|
||
#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
|
||
|
||
//电压输出校准mV(11个点,10个间隔)
|
||
#define EEPROM_TAG_CAL_VOL_MV_OUT 20 //电压mV输出值校准,tag:20
|
||
#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 //电阻Ω输出值校准,tag:21
|
||
#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
|
||
|
||
|