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 старших байта адреса