From 6f14e36bf9955f7543419d3e6af821d03c28ee09 Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 3 Jul 2026 11:20:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20JTAG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/main.c | 62 +++++++++++++++--------------------------------------- 1 file changed, 17 insertions(+), 45 deletions(-) diff --git a/APP/main.c b/APP/main.c index f15c00a..e84867d 100644 --- a/APP/main.c +++ b/APP/main.c @@ -12,34 +12,6 @@ #define _BootloaderBegin 0x01000000 #define _FirmwareMainBegin (_BootloaderBegin + _BootloaderSize) -/* -static void swap_bank(uint8_t eBank) -{ - uint32_t u32RegVal = FMC1->OTA_CTRL[1]; - - if (u32RegVal == 0U) { // Аппаратный OTA не включен - - // 1. Снимаем блокировку OTA (бит 6 = 0) - u32RegVal &= ~(1u << 6u); - - // 2. Устанавливаем активный банк (бит 5) - if (0 == eBank) { - u32RegVal &= ~(1u << 5u); // Банк 0 - } else { - u32RegVal |= (1u << 5u); // Банк 1 - } - - // 3. Устанавливаем OTA_EN = 0xA (биты 4-0) - // НЕЛЬЗЯ использовать & ~0x1F, потому что это сбросит бит 5! - u32RegVal = (u32RegVal & ~0x1F) | 0xA; // ← ОСТАВЛЯЕМ БИТ 5 - - // 4. Записываем обратно - FMC1->OTA_CTRL[1] = u32RegVal; - - } -} -*/ - #define FMC_FB_FPELCK_COUNT_V2 3 #define FMC_FB_CPELCK_COUNT_V2 2 #define FMC_OTA_VER_LOC_COUNT_V2 2 @@ -81,18 +53,11 @@ static void swap_bank(uint8_t eBank) { } } - void DefaultISR(void) { -// *((volatile unsigned int *)(0x40014030)) = 0x00000A55; + } -//#define vPortSVCHandler SVC_Handler -//#define xPortPendSVHandler PendSV_Handler - -//void xPortPendSVHandler(void) __attribute__((naked)); -//void vPortSVCHandler(void) __attribute__((naked)); - static void Boot2App(void) { uint32_t u32StackAddr = *((uint32_t *) ((uint32_t) _FirmwareMainBegin)); uint32_t u32ResetAddr = *((uint32_t *) (((uint32_t) _FirmwareMainBegin) + 4U)); @@ -109,6 +74,7 @@ static void Boot2App(void) { #define CHECK_JTAG_DEBUG_ACTIVE ((CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) != 0) +#define CHECK_PARALLEL_ENABLE (((*(volatile uint32_t*)0x044000E8) & 0x0000000F) != 0x00000005) uint64_t NumberBank = 0; @@ -117,17 +83,23 @@ int main(void) { if (CHECK_JTAG_DEBUG_ACTIVE) { D_bInternalFlashPage_Clear(0x04000000, NULL, NULL); - } - - NumberBank = (*(__IO uint64_t *) (0x04000000)); - - if (NumberBank == 0x1122334455667788) { - swap_bank(1); - } else { swap_bank(0); - } -// swap_bank(0); + } else { + if (CHECK_PARALLEL_ENABLE) { + swap_bank(0); + } else { + + NumberBank = (*(__IO uint64_t *) (0x04000000)); + + if (NumberBank == 0x1122334455667788) { + swap_bank(1); + } else { + swap_bank(0); + } + + } + } // BootJumpToAddress(_FirmwareMainBegin); // BootFastJumpToAddress(_FirmwareMainBegin);