Modify EEPROM

This commit is contained in:
2024-09-01 22:16:57 +03:00
parent db3528f502
commit e52fa2fc21
2 changed files with 147 additions and 63 deletions

View File

@ -1,52 +1,79 @@
#include "stm32f1xx_hal.h"
#define AT24C_ADRESS 0x50 // i2c slave adress EEPROM
#ifndef INC_EEPROM_H_
#define INC_EEPROM_H_
#define FLASH_BLOCKSIZE 64
#define START_ADR_SHOT 0x0000 //00000
#define START_ADR_PROGRAM 0x3000 //12288
#define START_ADR_MACRO 0x6000 //24576
#define AT24C_ADRESS 0x50 // i2c slave adress EEPROM
#define MAX_NUMBER_MACRO 100
#define MAX_NUMBER_SHOTS 160
#define MAX_NUMBER_PROGRAMS 100
#define MAX_NUMBER_SHOTS_IN_PROGRAMS 31
#define MAX_NUMBER_PROGRAMS_IN_MACRO 16
#define START_ADR_STAT 0x0000 //00000
#define STAT_BLOCKSIZE 20
typedef struct MacroProgram{
unsigned char id;
unsigned char speedScrew;
unsigned char countRepeat;
unsigned char options;
}MacroProgram;
typedef struct ProgramShot{
unsigned char id;
unsigned char speedScrew;
}ProgramShot;
#define START_ADR_SHOT (START_ADR_STAT+STAT_BLOCKSIZE) // 0x0014 = 20
#define SHOT_BLOCKSIZE 10
#define MAX_NUMBER_SHOTS 255
#define START_ADR_PROGRAM (START_ADR_SHOT + (SHOT_BLOCKSIZE*MAX_NUMBER_SHOTS)) // 0x0A0A = 2570
#define PROGRAM_BLOCKSIZE 203
#define MAX_NUMBER_PROGRAMS 100
#define MAX_NUMBER_SHOTS_IN_PROGRAMS \
(PROGRAM_BLOCKSIZE-sizeof(ProgramHeader)) /sizeof(ProgramShot) // 100
#define START_ADR_MACRO (START_ADR_PROGRAM + (PROGRAM_BLOCKSIZE*MAX_NUMBER_PROGRAMS)) // 0x5956 = 22870
#define MACRO_BLOCKSIZE 81
#define MAX_NUMBER_MACRO 100
#define MAX_NUMBER_PROGRAMS_IN_MACRO \
(MACRO_BLOCKSIZE-sizeof(MacroHeader)) /sizeof(MacroProgram) // 20
#define MEMORY_END (START_ADR_MACRO + (MACRO_BLOCKSIZE*MAX_NUMBER_MACRO)) // 0x78FA = 30970
typedef struct Shot {
unsigned char isExist;
unsigned char countRepeatShot;
unsigned char speedRollerTop;
unsigned char speedRollerBottom;
unsigned char speedScrew;
unsigned char rotationAxial;
unsigned char rotationHorizontal;
unsigned char rotationVertical;
unsigned char speedRollerTop; // 0 .. 100 .. 200
unsigned char speedRollerBottom; // 0 .. 100 .. 200
unsigned char speedScrew; // 0 .. 100
unsigned char rotationAxial; // 0 .. 90 .. 180
unsigned char rotationHorizontal; // 0 .. 90 .. 180
unsigned char rotationVertical; // 0 .. 90 .. 180
}Shot;
typedef struct ProgramHeader {
unsigned char isExist;
unsigned char countRepeat;
unsigned char options;
}ProgramHeader;
typedef struct ProgramShot {
unsigned char id;
unsigned char speedScrew;
}ProgramShot;
typedef struct Program {
unsigned char countRepeat;
unsigned char options;
ProgramShot shots[MAX_NUMBER_SHOTS_IN_PROGRAMS];
}Program;
ProgramHeader header;
ProgramShot shots[MAX_NUMBER_SHOTS_IN_PROGRAMS];
}Program;
typedef struct MacroHeader {
unsigned char isExist;
}MacroHeader;
typedef struct MacroProgram {
unsigned char id;
unsigned char speedScrew;
unsigned char countRepeat;
unsigned char options;
}MacroProgram;
typedef struct Macro {
MacroHeader header;
MacroProgram programs[MAX_NUMBER_PROGRAMS_IN_MACRO];
} Macro;
void SaveShot(unsigned char number, struct Shot* shot);
void FLASH_WriteBlock(uint8_t *writeAddr, unsigned char *flashWrBufPtr);
void FLASH_WriteBlock(uint16_t startAddr, uint8_t number,uint8_t *writeData);
void FLASH_ReadBlock(uint16_t startAddr, uint8_t number, uint8_t *outData);
void SaveShot(unsigned char number, struct Shot* shot);
Shot GetShot( unsigned char number );
#endif /* INC_EEPROM_H_ */