sggt/App/EEPROM/eeprom_spi.h

178 lines
5.8 KiB
C
Raw Permalink 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"
//模拟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
//my address
//{
//0x7D0 - 0x7E0(2000 - 2016)标记后写入0xAAAA连续16位“1”“0”交替
#define DEVICE_CHECK 0x0007D0
#define EE_START_ADDR 0x000000
#define EE_INTERVAL 16
//电压V上限tag0EE_START_ADDR + 0*EE_INTERVAL
#define VOL_V_UP_ADDR EE_START_ADDR
//电压V下限tag0EE_START_ADDR + 1*EE_INTERVAL
#define VOL_V_LOW_ADDR (VOL_V_UP_ADDR + EE_INTERVAL)
//电压mV上限tag0EE_START_ADDR + 2*EE_INTERVAL
#define VOL_MV_UP_ADDR (VOL_V_LOW_ADDR + EE_INTERVAL)
//电压mV下限tag0EE_START_ADDR + 3*EE_INTERVAL
#define VOL_MV_LOW_ADDR (VOL_MV_UP_ADDR + EE_INTERVAL)
//电流上限tag1EE_START_ADDR + 4*EE_INTERVAL
#define CUR_UP_ADDR (VOL_MV_LOW_ADDR + EE_INTERVAL)
//电流下限tag1EE_START_ADDR + 5*EE_INTERVAL
#define CUR_LOW_ADDR (CUR_UP_ADDR + EE_INTERVAL)
//电阻上限tag2EE_START_ADDR + 6*EE_INTERVAL
#define RES_UP_ADDR (CUR_LOW_ADDR + EE_INTERVAL)
//电阻下限tag2EE_START_ADDR + 7*EE_INTERVAL
#define RES_LOW_ADDR (RES_UP_ADDR + EE_INTERVAL)
//频率上限tag3EE_START_ADDR + 8*EE_INTERVAL
#define FRE_UP_ADDR (RES_LOW_ADDR + EE_INTERVAL)
//频率下限tag3EE_START_ADDR + 9*EE_INTERVAL
#define FRE_LOW_ADDR (FRE_UP_ADDR + EE_INTERVAL)
//TC_K上限tag4EE_START_ADDR + 10*EE_INTERVAL
#define TC_K_UP_ADDR (FRE_LOW_ADDR + EE_INTERVAL)
//TC_K下限tag4EE_START_ADDR + 11*EE_INTERVAL
#define TC_K_LOW_ADDR (TC_K_UP_ADDR + EE_INTERVAL)
//TC_S上限tag5EE_START_ADDR + 12*EE_INTERVAL
#define TC_S_UP_ADDR (TC_K_LOW_ADDR + EE_INTERVAL)
//TC_S下限tag5EE_START_ADDR + 13*EE_INTERVAL
#define TC_S_LOW_ADDR (TC_S_UP_ADDR + EE_INTERVAL)
//TC_N上限tag6EE_START_ADDR + 14*EE_INTERVAL
#define TC_N_UP_ADDR (TC_S_LOW_ADDR + EE_INTERVAL)
//TC_N下限tag6EE_START_ADDR + 15*EE_INTERVAL
#define TC_N_LOW_ADDR (TC_N_UP_ADDR + EE_INTERVAL)
//TC_B上限tag7EE_START_ADDR + 16*EE_INTERVAL
#define TC_B_UP_ADDR (TC_N_LOW_ADDR + EE_INTERVAL)
//TC_B下限tag7EE_START_ADDR + 17*EE_INTERVAL
#define TC_B_LOW_ADDR (TC_B_UP_ADDR + EE_INTERVAL)
//TC_E上限tag8EE_START_ADDR + 18*EE_INTERVAL
#define TC_E_UP_ADDR (TC_B_LOW_ADDR + EE_INTERVAL)
//TC_E下限tag8EE_START_ADDR + 19*EE_INTERVAL
#define TC_E_LOW_ADDR (TC_E_UP_ADDR + EE_INTERVAL)
//TC_J上限tag9EE_START_ADDR + 20*EE_INTERVAL
#define TC_J_UP_ADDR (TC_E_LOW_ADDR + EE_INTERVAL)
//TC_J下限tag9EE_START_ADDR + 21*EE_INTERVAL
#define TC_J_LOW_ADDR (TC_J_UP_ADDR + EE_INTERVAL)
//TC_R上限tag10EE_START_ADDR + 22*EE_INTERVAL
#define TC_R_UP_ADDR (TC_J_LOW_ADDR + EE_INTERVAL)
//TC_R下限tag10EE_START_ADDR + 23*EE_INTERVAL
#define TC_R_LOW_ADDR (TC_R_UP_ADDR + EE_INTERVAL)
//TC_T上限tag11EE_START_ADDR + 24*EE_INTERVAL
#define TC_T_UP_ADDR (TC_R_LOW_ADDR + EE_INTERVAL)
//TC_T下限tag11EE_START_ADDR + 25*EE_INTERVAL
#define TC_T_LOW_ADDR (TC_T_UP_ADDR + EE_INTERVAL)
//RTD上限tag12EE_START_ADDR + 26*EE_INTERVAL
#define RTD_UP_ADDR (TC_T_LOW_ADDR + EE_INTERVAL)
//RTD下限tag12EE_START_ADDR + 27*EE_INTERVAL
#define RTD_LOW_ADDR (RTD_UP_ADDR + EE_INTERVAL)
//采样间隔画点时间间隔tag13EE_START_ADDR + 28*EE_INTERVAL
#define SAMPLE_INTERVAL_ADDR (RTD_LOW_ADDR + EE_INTERVAL)
//描点数量tag14EE_START_ADDR + 29*EE_INTERVAL
#define PLOT_COUNT_ADDR (SAMPLE_INTERVAL_ADDR + EE_INTERVAL)
//输入曲线颜色tag15EE_START_ADDR + 30*EE_INTERVAL
#define INPUT_COLOR_ADDR (PLOT_COUNT_ADDR + EE_INTERVAL)
//输出曲线颜色tag16EE_START_ADDR + 31*EE_INTERVAL
#define OUTPUT_COLOR_ADDR (INPUT_COLOR_ADDR + EE_INTERVAL)
//语言选择tag17EE_START_ADDR + 32*EE_INTERVAL
#define LANGUAGE_SELECT_ADDR (OUTPUT_COLOR_ADDR + EE_INTERVAL)
//根据需求后续在此处向后添加
//}
#define DATA_SAVE_ALL 0
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);
#if DATA_SAVE_ALL
//存储参数,全部
void eeprom_datasave(void);
#else
//保存修改过的数据
void eeprom_datasave_changed(void);
#endif
#endif