From dac54a68e3a95a1078d0e920ff966c04896c945d Mon Sep 17 00:00:00 2001 From: klassents Date: Mon, 9 Sep 2024 14:33:37 +0700 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=B8=D0=B3=D0=BD=D0=BE?= =?UTF-8?q?=D1=80=D0=B0,=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=8E=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=82=D1=8F=D0=B6=D0=BA=D1=83=20=D0=BA=20?= =?UTF-8?q?=D0=BF=D0=B8=D1=82=D0=B0=D0=BD=D0=B8=D1=8E=20=D0=BD=D0=B0=20rx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++++++ src/bootloader.c | 22 +++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8d6d49b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch +.vscode/ diff --git a/src/bootloader.c b/src/bootloader.c index ac05a7c..94c8a4e 100644 --- a/src/bootloader.c +++ b/src/bootloader.c @@ -60,7 +60,10 @@ void Bootloader_UART_Init() { PM->CLK_APB_P_SET = PM_CLOCK_APB_P_UART_0_M; // Включение тактирования UART0 - PAD_CONFIG->PORT_0_CFG |= (0b01 << (5 << 1)) | (0b01 << (6 << 1)); // Настройка выводов PORT0.5 и PORT0.6 + // Настройка выводов PORT0.5 и PORT0.6 на последовательный интерфейс + PAD_CONFIG->PORT_0_CFG |= (0b01 << (5 << 1)) | (0b01 << (6 << 1)); + // Включение притяжки к питанию на линии rx + PAD_CONFIG->PORT_0_PUPD |= (0b01 << (5 << 1)); /* * Настройки USART: @@ -89,7 +92,10 @@ void Bootloader_UART_Deinit() UART_0->FLAGS = 0xFFFFFFFF; // сброс всех флагов UART_0->TXDATA = 0x00; - PAD_CONFIG->PORT_0_CFG &= ~((0b11 << (5 << 1)) | (0b11 << (6 << 1))); // Настройка выводов PORT0.5 и PORT0.6 + // Настройка выводов PORT0.5 и PORT0.6 на порт общего назначения + PAD_CONFIG->PORT_0_CFG &= ~((0b11 << (5 << 1)) | (0b11 << (6 << 1))); + // Отключение притяжки на линии rx + PAD_CONFIG->PORT_0_PUPD &= ~(0b01 << (5 << 1)); PM->CLK_APB_P_SET &= !PM_CLOCK_APB_P_UART_0_M; // Выключение тактирования UART0 } @@ -156,17 +162,7 @@ uint8_t erase_chip(SPIFI_HandleTypeDef *spifi) /* Загрузить данные пакета в RAM */ #define SIZE_4K 4096 -void Bootloader_LoadArrayInRam(uint8_t uart_data[]) -{ - static uint32_t relative_write_address; - if ((relative_write_address % SIZE_4K) == 0) - HAL_SPIFI_W25_SectorErase4K(&spifi, relative_write_address); - - HAL_SPIFI_W25_PageProgram(&spifi, (uint32_t)hBootloader.address, hBootloader.size_package, uart_data); - hBootloader.address += hBootloader.size_package; - relative_write_address += hBootloader.size_package; -} // разметка строки в хекс-файле #define BYTE_COUNT_POS 0 // индекс счетчика байт данных @@ -217,7 +213,7 @@ void Bootloader_parseHexAndLoadInMemory(uint8_t rx_data[]) switch (rec_type) { case REC_TYPE_EXT_LIN_ADDR: - // если так получилось, что нам слали данные, буфер на 256 не заполнился, а тут прилетела команда смены адреса, то пишем сколько есть + // если так получилось, что нам слали данные, буфер на 256 не заполнился, а тут прилетела команда смены адреса, то пишем сколько есть if (page_fill_size != 0) mem_write(); // собираем адрес, с которого начинаем писать из данных команды смены адреса. нам присылают только 2 старших байта адреса