Автоопределение JTAG

This commit is contained in:
cfif 2026-07-03 11:20:16 +03:00
parent 3651bb6161
commit 6f14e36bf9
1 changed files with 17 additions and 45 deletions

View File

@ -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);