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

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 */
#define ISA_BASE_RD 0x60000000U
#define ISA_BASE_WR 0x60400000U
#define FLASH_BASE_WR 0x08060000U
#define FLASH_BASE_EMS_G 0U
#define FLASH_BASE_KEMS_B 0U
#define FLASH_BASE_EMS_B0 1200U
#define FLASH_BASE_EMS_B1 2400U
#define FLASH_BASE_WR 0x081E0000U
#define FLASH_BASE_EMS_B0 0x081A0000U
#define FLASH_BASE_EMS_B1 0x081C0000U
#define WORDS_TO_KEMS 60U
#define WORDS_TO_KEMS 76U
/* USER CODE END Private defines */
#ifdef __cplusplus

View File

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

View File

@@ -57,7 +57,6 @@ uint32_t pribor; // Прибор в котором стоит ячейк
uint32_t pribor_type; // Тип прибора в котором стоит ячейка
ip_addr_t rx_addr; // Адрес с которого принят пакет.
// Флаги загрузки ячеек ЭМС/КЭМС
_Bool flag_load_ems_g = 0;
_Bool flag_load_ems_b0 = 0;
_Bool flag_load_ems_b1 = 0;
_Bool flag_load_kems_b = 0;
@@ -174,16 +173,11 @@ int main(void)
flash_counter = 0;
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:
{
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_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_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_EMS_B1, BASE_ADDR_EMS_B1);
break;
}
}
@@ -384,8 +378,8 @@ uint16_t create_header(void)
tx_msg.tx_buf[1] = 0;
tx_msg.tx_buf[2] = rx_msg.rx_buf[2];
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[6] = 0;
tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6;
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];
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
tx_msg.tx_buf[5] = 1;
rx_counter = 0;
switch(rx_msg.cmd_code) // код команды
{
@@ -600,7 +595,7 @@ void rcv_command(void)
//-----------------------------------------------------------
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))
@@ -618,10 +613,13 @@ void rcv_command(void)
{
// Установить ВЫПОЛНЕНО
cmd_buf[1] = NO_ERROR;
uint16_t flash_addr = rx_msg.rx_buf[7] + (rx_msg.rx_buf[8] << 8);
uint32_t sector = FLASH_BASE_WR;
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);
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;
}
@@ -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_ok = 0;
uint16_t ports_data, i;
uint32_t flash_data;
write_isa( base_port + 0x2, 200);
uint16_t ports_data = 0, i = 0;
uint32_t flash_data[2] = {0,0};
write_isa(base_port + 0x2, 200);
ports_data = read_isa(base_port + 0x2);
if (ports_data != 200) return load_ok;
for (i = 0; i<=WORDS_TO_KEMS; i++)
{
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);
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);
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);
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);
write_isa(base_port + 0xa, flash_data);
write_isa(base_port + 0xa, flash_data[0]);
}
load_ok = 1;
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 ports_data, i;
buf[6] = 27;
buf[6] = 31;
buf[7] = 0;
ports_data = read_isa(BASE_ADDR_EMS_G);
buf[8] = 0;
if( ports_data != 0xFFFF )
{
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);
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1);
ports_data = read_isa(BASE_ADDR_UKP0);
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1);
ports_data = read_isa(BASE_ADDR_UKP1);
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 );
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;
return 29;
return 33;
}
uint16_t set_status_uf(unsigned char *buf)
{
uint16_t ports_data, i;
buf[6] = 67;
buf[6] = 79;
buf[7] = 0;
buf[8] = 0;
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);
}
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 );
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;
write_isa( BASE_ADDR_EMS_B0 + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE );
buf[9+(i-1)*2 + 22] = ports_data & 0xFF;
buf[10+(i-1)*2 + 22] = ports_data >> 8;
buf[9+(i-1)*2 + 26] = ports_data & 0xFF;
buf[10+(i-1)*2 + 26] = ports_data >> 8;
write_isa( BASE_ADDR_EMS_B1 + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE );
buf[9+(i-1)*2 + 44] = ports_data & 0xFF;
buf[10+(i-1)*2 + 44] = ports_data >> 8;
buf[9+(i-1)*2 + 52] = ports_data & 0xFF;
buf[10+(i-1)*2 + 52] = ports_data >> 8;
}
pribor_type = PRIBOR_TYPE_UF;
return 69;
return 81;
}
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