Исправления. Переписанный флеш.

This commit is contained in:
MaD_CaT
2024-10-01 11:32:16 +03:00
parent 71964ae625
commit 85983291c8
6 changed files with 57401 additions and 57096 deletions

View File

@@ -80,13 +80,11 @@ void Error_Handler(void);
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
#define ISA_BASE_RD 0x60000000U #define ISA_BASE_RD 0x60000000U
#define ISA_BASE_WR 0x60400000U #define ISA_BASE_WR 0x60400000U
#define FLASH_BASE_WR 0x08060000U #define FLASH_BASE_WR 0x081E0000U
#define FLASH_BASE_EMS_G 0U #define FLASH_BASE_EMS_B0 0x081A0000U
#define FLASH_BASE_KEMS_B 0U #define FLASH_BASE_EMS_B1 0x081C0000U
#define FLASH_BASE_EMS_B0 1200U
#define FLASH_BASE_EMS_B1 2400U
#define WORDS_TO_KEMS 60U #define WORDS_TO_KEMS 76U
/* USER CODE END Private defines */ /* USER CODE END Private defines */
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -68,7 +68,7 @@ static uint32_t GetSector(uint32_t Address)
{ {
sector = FLASH_SECTOR_7; sector = FLASH_SECTOR_7;
} }
/* else if((Address < 0x0809FFFF) && (Address >= 0x08080000)) else if((Address < 0x0809FFFF) && (Address >= 0x08080000))
{ {
sector = FLASH_SECTOR_8; sector = FLASH_SECTOR_8;
} }
@@ -128,10 +128,10 @@ static uint32_t GetSector(uint32_t Address)
{ {
sector = FLASH_SECTOR_22; sector = FLASH_SECTOR_22;
} }
else if (Address < 0x081FFFFF) && (Address >= 0x081E0000) else if ((Address < 0x081FFFFF) && (Address >= 0x081E0000))
{ {
sector = FLASH_SECTOR_23; sector = FLASH_SECTOR_23;
}*/ }
return sector; return sector;
} }

View File

@@ -57,7 +57,6 @@ uint32_t pribor; // Прибор в котором стоит ячейк
uint32_t pribor_type; // Тип прибора в котором стоит ячейка uint32_t pribor_type; // Тип прибора в котором стоит ячейка
ip_addr_t rx_addr; // Адрес с которого принят пакет. ip_addr_t rx_addr; // Адрес с которого принят пакет.
// Флаги загрузки ячеек ЭМС/КЭМС // Флаги загрузки ячеек ЭМС/КЭМС
_Bool flag_load_ems_g = 0;
_Bool flag_load_ems_b0 = 0; _Bool flag_load_ems_b0 = 0;
_Bool flag_load_ems_b1 = 0; _Bool flag_load_ems_b1 = 0;
_Bool flag_load_kems_b = 0; _Bool flag_load_kems_b = 0;
@@ -174,16 +173,11 @@ int main(void)
flash_counter = 0; flash_counter = 0;
switch(pribor_type) switch(pribor_type)
{ {
case PRIBOR_TYPE_PRD:
{
if (flag_load_ems_g == 0) flag_load_ems_g = load_flash_to_ems(FLASH_BASE_WR, BASE_ADDR_EMS_G);
break;
}
case PRIBOR_TYPE_UF: case PRIBOR_TYPE_UF:
{ {
if (flag_load_kems_b == 0) flag_load_kems_b = load_flash_to_ems(FLASH_BASE_WR, BASE_ADDR_KEMS_B); if (flag_load_kems_b == 0) flag_load_kems_b = load_flash_to_ems(FLASH_BASE_WR, BASE_ADDR_KEMS_B);
if (flag_load_ems_b0 == 0) flag_load_ems_b0 = load_flash_to_ems(FLASH_BASE_WR + FLASH_BASE_EMS_B0, BASE_ADDR_EMS_B0); if (flag_load_ems_b0 == 0) flag_load_ems_b0 = load_flash_to_ems(FLASH_BASE_EMS_B0, BASE_ADDR_EMS_B0);
if (flag_load_ems_b1 == 0) flag_load_ems_b1 = load_flash_to_ems(FLASH_BASE_WR + FLASH_BASE_EMS_B1, BASE_ADDR_EMS_B1); if (flag_load_ems_b1 == 0) flag_load_ems_b1 = load_flash_to_ems(FLASH_BASE_EMS_B1, BASE_ADDR_EMS_B1);
break; break;
} }
} }
@@ -384,8 +378,8 @@ uint16_t create_header(void)
tx_msg.tx_buf[1] = 0; tx_msg.tx_buf[1] = 0;
tx_msg.tx_buf[2] = rx_msg.rx_buf[2]; tx_msg.tx_buf[2] = rx_msg.rx_buf[2];
tx_msg.tx_buf[3] = rx_msg.rx_buf[3]; tx_msg.tx_buf[3] = rx_msg.rx_buf[3];
tx_msg.tx_buf[4] = 0;
tx_msg.tx_buf[5] = 0; tx_msg.tx_buf[5] = 0;
tx_msg.tx_buf[6] = 0;
tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6; tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6;
return tx_msg.status_len; return tx_msg.status_len;
} }
@@ -464,6 +458,7 @@ void rcv_command(void)
unsigned char *cmd_buf = &tx_msg.tx_buf[tx_msg.status_len]; unsigned char *cmd_buf = &tx_msg.tx_buf[tx_msg.status_len];
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
tx_msg.tx_buf[5] = 1;
rx_counter = 0; rx_counter = 0;
switch(rx_msg.cmd_code) // код команды switch(rx_msg.cmd_code) // код команды
{ {
@@ -600,7 +595,7 @@ void rcv_command(void)
//----------------------------------------------------------- //-----------------------------------------------------------
cmd_buf[0] = rx_msg.cmd_code; // - код команды cmd_buf[0] = rx_msg.cmd_code; // - код команды
bytes_amount = rx_msg.rx_buf[9] + (rx_msg.rx_buf[10] << 8); bytes_amount = rx_msg.rx_buf[10] + (rx_msg.rx_buf[11] << 8);
// Проверка размера принятого буфера // Проверка размера принятого буфера
if( rx_msg.length < (10 + bytes_amount)) if( rx_msg.length < (10 + bytes_amount))
@@ -618,10 +613,13 @@ void rcv_command(void)
{ {
// Установить ВЫПОЛНЕНО // Установить ВЫПОЛНЕНО
cmd_buf[1] = NO_ERROR; cmd_buf[1] = NO_ERROR;
uint32_t sector = FLASH_BASE_WR;
uint16_t flash_addr = rx_msg.rx_buf[7] + (rx_msg.rx_buf[8] << 8); unsigned char flash_sector = rx_msg.rx_buf[7];
if (flash_sector == 1) sector = FLASH_BASE_EMS_B0;
if (flash_sector == 2) sector = FLASH_BASE_EMS_B1;
uint16_t flash_addr = rx_msg.rx_buf[8] + (rx_msg.rx_buf[9] << 8);
uint16_t numofwords = (bytes_amount/4)+((bytes_amount%4)!=0); uint16_t numofwords = (bytes_amount/4)+((bytes_amount%4)!=0);
Flash_Write_Data(FLASH_BASE_WR + flash_addr, (uint32_t *)&rx_msg.rx_buf[11], numofwords); Flash_Write_Data(sector + flash_addr, (uint32_t *)&rx_msg.rx_buf[12], numofwords);
// Установить размер буфера // Установить размер буфера
tx_msg.cmd_len = 2; tx_msg.cmd_len = 2;
} }
@@ -745,23 +743,23 @@ void write_isa(uint16_t addr, uint16_t data)
_Bool load_flash_to_ems(uint32_t base_addr, uint16_t base_port) _Bool load_flash_to_ems(uint32_t base_addr, uint16_t base_port)
{ {
_Bool load_ok = 0; _Bool load_ok = 0;
uint16_t ports_data, i; uint16_t ports_data = 0, i = 0;
uint32_t flash_data; uint32_t flash_data[2] = {0,0};
write_isa( base_port + 0x2, 200); write_isa(base_port + 0x2, 200);
ports_data = read_isa(base_port + 0x2); ports_data = read_isa(base_port + 0x2);
if (ports_data != 200) return load_ok; if (ports_data != 200) return load_ok;
for (i = 0; i<=WORDS_TO_KEMS; i++) for (i = 0; i<=WORDS_TO_KEMS; i++)
{ {
Flash_Read_Data(base_addr + i * 10, (uint32_t *)&flash_data, 1); Flash_Read_Data(base_addr + i * 10, (uint32_t *)&flash_data, 1);
write_isa(base_port + 0x2, flash_data); write_isa(base_port + 0x2, flash_data[0]);
Flash_Read_Data(base_addr + i * 10 + 2, (uint32_t *)&flash_data, 1); Flash_Read_Data(base_addr + i * 10 + 2, (uint32_t *)&flash_data, 1);
write_isa(base_port + 0x4, flash_data); write_isa(base_port + 0x4, flash_data[0]);
Flash_Read_Data(base_addr + i * 10 + 4, (uint32_t *)&flash_data, 1); Flash_Read_Data(base_addr + i * 10 + 4, (uint32_t *)&flash_data, 1);
write_isa(base_port + 0x6, flash_data); write_isa(base_port + 0x6, flash_data[0]);
Flash_Read_Data(base_addr + i * 10 + 6, (uint32_t *)&flash_data, 1); Flash_Read_Data(base_addr + i * 10 + 6, (uint32_t *)&flash_data, 1);
write_isa(base_port + 0x8, flash_data); write_isa(base_port + 0x8, flash_data[0]);
Flash_Read_Data(base_addr + i * 10 + 8, (uint32_t *)&flash_data, 1); Flash_Read_Data(base_addr + i * 10 + 8, (uint32_t *)&flash_data, 1);
write_isa(base_port + 0xa, flash_data); write_isa(base_port + 0xa, flash_data[0]);
} }
load_ok = 1; load_ok = 1;
return load_ok; return load_ok;

View File

@@ -91,23 +91,21 @@ uint16_t set_status(unsigned char *buf, uint32_t pribor)
uint16_t set_status_prd(unsigned char *buf) uint16_t set_status_prd(unsigned char *buf)
{ {
uint16_t ports_data, i; uint16_t ports_data, i;
buf[6] = 27; buf[6] = 31;
buf[7] = 0; buf[7] = 0;
ports_data = read_isa(BASE_ADDR_EMS_G); ports_data = read_isa(BASE_ADDR_EMS_G);
buf[8] = 0; buf[8] = 0;
if( ports_data != 0xFFFF ) if( ports_data != 0xFFFF )
{ {
buf[8] = set_bit(buf[8], 0, 1); buf[8] = set_bit(buf[8], 0, 1);
buf[8] = set_bit(buf[8], 4, flag_load_ems_g);
} }
else flag_load_ems_g = 0;
ports_data = read_isa(BASE_ADDR_UG); ports_data = read_isa(BASE_ADDR_UG);
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1); if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1);
ports_data = read_isa(BASE_ADDR_UKP0); ports_data = read_isa(BASE_ADDR_UKP0);
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1); if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1);
ports_data = read_isa(BASE_ADDR_UKP1); ports_data = read_isa(BASE_ADDR_UKP1);
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 3, 1); if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 3, 1);
for (i = 1; i <12; i++) for (i = 1; i <14; i++)
{ {
write_isa( BASE_ADDR_EMS_G + 0xC, i ); write_isa( BASE_ADDR_EMS_G + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_G + 0xE ); ports_data = read_isa( BASE_ADDR_EMS_G + 0xE );
@@ -123,13 +121,13 @@ uint16_t set_status_prd(unsigned char *buf)
pribor_type = PRIBOR_TYPE_PRD; pribor_type = PRIBOR_TYPE_PRD;
return 29; return 33;
} }
uint16_t set_status_uf(unsigned char *buf) uint16_t set_status_uf(unsigned char *buf)
{ {
uint16_t ports_data, i; uint16_t ports_data, i;
buf[6] = 67; buf[6] = 79;
buf[7] = 0; buf[7] = 0;
buf[8] = 0; buf[8] = 0;
ports_data = read_isa(BASE_ADDR_KEMS_B); ports_data = read_isa(BASE_ADDR_KEMS_B);
@@ -153,7 +151,7 @@ uint16_t set_status_uf(unsigned char *buf)
buf[8] = set_bit(buf[8], 5, flag_load_ems_b1); buf[8] = set_bit(buf[8], 5, flag_load_ems_b1);
} }
else flag_load_ems_b1 = 0; else flag_load_ems_b1 = 0;
for (i = 1; i <12; i++) for (i = 1; i <14; i++)
{ {
write_isa( BASE_ADDR_KEMS_B + 0xC, i ); write_isa( BASE_ADDR_KEMS_B + 0xC, i );
ports_data = read_isa( BASE_ADDR_KEMS_B + 0xE ); ports_data = read_isa( BASE_ADDR_KEMS_B + 0xE );
@@ -161,17 +159,17 @@ uint16_t set_status_uf(unsigned char *buf)
buf[10+(i-1)*2] = ports_data >> 8; buf[10+(i-1)*2] = ports_data >> 8;
write_isa( BASE_ADDR_EMS_B0 + 0xC, i ); write_isa( BASE_ADDR_EMS_B0 + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE ); ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE );
buf[9+(i-1)*2 + 22] = ports_data & 0xFF; buf[9+(i-1)*2 + 26] = ports_data & 0xFF;
buf[10+(i-1)*2 + 22] = ports_data >> 8; buf[10+(i-1)*2 + 26] = ports_data >> 8;
write_isa( BASE_ADDR_EMS_B1 + 0xC, i ); write_isa( BASE_ADDR_EMS_B1 + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE ); ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE );
buf[9+(i-1)*2 + 44] = ports_data & 0xFF; buf[9+(i-1)*2 + 52] = ports_data & 0xFF;
buf[10+(i-1)*2 + 44] = ports_data >> 8; buf[10+(i-1)*2 + 52] = ports_data >> 8;
} }
pribor_type = PRIBOR_TYPE_UF; pribor_type = PRIBOR_TYPE_UF;
return 69; return 81;
} }
unsigned char set_bit(unsigned char bits, unsigned char index, _Bool val) unsigned char set_bit(unsigned char bits, unsigned char index, _Bool val)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff