/********************************************************************* * * ConfigTargetSettings */ int ConfigTargetSettings(void) { JLINK_SYS_Report(">>>>>>>>>>>>>>ConfigTargetSettings"); JLINK_ExecCommand("SetCFIFlash 0x60000000-0x60FFFFFF"); // Defaults: NumChips = 1, NumBits = 16 // JLINK_ExecCommand("SetCFIFlash 0x64000000-0x64FFFFFF, 1, 16"); // Identical to the above JLINK_ExecCommand("SetWorkRAM 0x20000000-0x2000FFFF"); return 0; } // int HandleBeforeFlashProg(void) { // int SetupTarget(void) { // int r; // // r = 0; // // return 0; // JLINK_SYS_Report("Configure NOR FLASH"); // JLINK_TARGET_Halt(); // JLINK_ExecCommand("SetCFIFlash 0x60000000-0x60FFFFFF"); // Defaults: NumChips = 1, NumBits = 16 // // JLINK_ExecCommand("SetCFIFlash 0x64000000-0x64FFFFFF, 1, 16"); // Identical to the above // JLINK_ExecCommand("SetWorkRAM 0x20000000-0x2000FFFF"); // // r |= JLINK_MEM_WriteU32(0x40021014, 0x00000114); // RCC_AHBENR, FSMC clock enable // // r |= JLINK_MEM_WriteU32(0x40021018, 0x000001FD); // GPIOD~G clock enable // // r |= JLINK_MEM_WriteU32(0x40011400, 0xB4BB44BB); // GPIOD low config, NOE, NWE => Output, NWAIT => Input // // r |= JLINK_MEM_WriteU32(0x40011404, 0xBBBBBBBB); // GPIOD high config, A16-A18 // // r |= JLINK_MEM_WriteU32(0x40011800, 0xBBBBBBBB); // GPIOE low config, A19-A23 // // r |= JLINK_MEM_WriteU32(0x40011804, 0xBBBBBBBB); // GPIOE high config, D5-D12 // // r |= JLINK_MEM_WriteU32(0x40011C00, 0x44BBBBBB); // GPIOF low config, A0-A5 // // r |= JLINK_MEM_WriteU32(0x40011C04, 0xBBBB4444); // GPIOF high config, A6-A9 // // r |= JLINK_MEM_WriteU32(0x40012000, 0x44BBBBBB); // GPIOG low config, A10-A15 // // r |= JLINK_MEM_WriteU32(0x40012004, 0x444B4BB4); // GPIOG high config, NE2 => output // // r |= JLINK_MEM_WriteU32(0xA0000008, 0x00001059); // CS control reg 2, 16-bit, write enable, Type: NOR flash // // r |= JLINK_MEM_WriteU32(0xA000000C, 0x10000505); // CS2 timing reg (read access) // // r |= JLINK_MEM_WriteU32(0xA000010C, 0x10000505); // CS2 timing reg (write access) // // // // // RCCKj // JLINK_SYS_Sleep(200); // JLINK_MEM_WriteU32(0x58024410, 0x3); // JLINK_MEM_WriteU32(0x58024428, 0x120052); // JLINK_MEM_WriteU32(0x5802442C, 0x1FF0000); // JLINK_MEM_WriteU32(0x58024430, 0x1010A9F); // JLINK_MEM_WriteU32(0x58024418, 0x8); // JLINK_MEM_WriteU32(0x5802444C, 0x0); // JLINK_MEM_WriteU32(0x58024400, 0x15010083); // JLINK_SYS_Sleep(200); // JLINK_MEM_WriteU32(0x580244D4, 0x1000); // JLINK_MEM_WriteU32(0x58024534, 0x1000); // JLINK_MEM_WriteU32(0x580244E0, 0x7F8); // JLINK_SYS_Sleep(200); // // // TODO: // // Disable watchdog // // Set flash wait states // // Set PLL / RCC // // Delay // // Set PLL and Devider // // Delay // // select amster clock // // // Enable FMC AHB Clock // r |= JLINK_MEM_WriteU32(0x580244D4, 0x1000); // r |= JLINK_MEM_WriteU32(0x58024534, 0x1000); // // // Enable Clock of GPIOD-I // r |= JLINK_MEM_WriteU32(0x580244E0, 0x7F8); // // // JLINK_SYS_Sleep(200); // // // Set GPIOs to alternate function for FMC // // // GPIOD // r |= JLINK_MEM_WriteU32(0x58020C0C, 0x15555500); // r |= JLINK_MEM_WriteU32(0x58020C00, 0xAAAAAAFF); // r |= JLINK_MEM_WriteU32(0x58020C04, 0x0); // r |= JLINK_MEM_WriteU32(0x58020C08, 0xFFFFF00); // r |= JLINK_MEM_WriteU32(0x58020C20, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58020C24, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58020C14, 0x0); // // // GPIOE // r |= JLINK_MEM_WriteU32(0x5802100C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58021000, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58021004, 0x0); // r |= JLINK_MEM_WriteU32(0x58021008, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58021020, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021024, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021014, 0x0); // // // GPIOF // r |= JLINK_MEM_WriteU32(0x5802140C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58021400, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58021404, 0x0); // r |= JLINK_MEM_WriteU32(0x58021408, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58021420, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021424, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021414, 0x0); // // // GPIOG // r |= JLINK_MEM_WriteU32(0x5802180C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58021800, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58021804, 0x0); // r |= JLINK_MEM_WriteU32(0x58021808, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58021820, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021824, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021814, 0x0); // // // GPIOH // r |= JLINK_MEM_WriteU32(0x58021C0C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58021C00, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58021C04, 0x0); // r |= JLINK_MEM_WriteU32(0x58021C08, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58021C20, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021C24, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58021C14, 0x0); // // // GPIOI // r |= JLINK_MEM_WriteU32(0x5802200C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58022000, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58022004, 0x0); // r |= JLINK_MEM_WriteU32(0x58022008, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58022020, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58022024, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58022014, 0x0); // // // GPIOJ // r |= JLINK_MEM_WriteU32(0x5802240C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58022400, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58022404, 0x0); // r |= JLINK_MEM_WriteU32(0x58022408, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58022420, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58022424, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58022414, 0x0); // // // GPIOK // r |= JLINK_MEM_WriteU32(0x5802280C, 0x55555555); // r |= JLINK_MEM_WriteU32(0x58022800, 0xAAAAAAAA); // r |= JLINK_MEM_WriteU32(0x58022804, 0x0); // r |= JLINK_MEM_WriteU32(0x58022808, 0xFFFFFFFF); // r |= JLINK_MEM_WriteU32(0x58022820, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58022824, 0xCCCCCCCC); // r |= JLINK_MEM_WriteU32(0x58022814, 0x0); // // // FMC (Just copied from svd dump) // r |= JLINK_MEM_WriteU32(0x52004000, 0x8010B0D9); // BCR1 // r |= JLINK_MEM_WriteU32(0x52004004, 0x10340519); // BTR1 // // r |= JLINK_MEM_WriteU32(0x52004008, 0x000030D2); // BCR2 // // r |= JLINK_MEM_WriteU32(0x5200400C, 0x0FFFFFFF); // BTR2 // // r |= JLINK_MEM_WriteU32(0x52004010, 0x000030D2); // BCR3 // // r |= JLINK_MEM_WriteU32(0x52004014, 0x0FFFFFFF); // BTR3 // // r |= JLINK_MEM_WriteU32(0x52004018, 0x000030D2); // BCR4 // // r |= JLINK_MEM_WriteU32(0x5200401C, 0x0FFFFFFF); // BTR4 // // r |= JLINK_MEM_WriteU32(0x52004080, 0x00000018); // PCR // // r |= JLINK_MEM_WriteU32(0x52004088, 0xFCFCFCFC); // PMEM // NAND FLASH TIMING // // r |= JLINK_MEM_WriteU32(0x5200408C, 0xFCFCFCFC); // PATT // NAND FLASH TIMING // // r |= JLINK_MEM_WriteU32(0x52004104, 0x0FFFFFFF); // BWTR1 // REST VALUE // // r |= JLINK_MEM_WriteU32(0x5200410C, 0x0FFFFFFF); // BWTR2 // REST VALUE // // r |= JLINK_MEM_WriteU32(0x52004114, 0x0FFFFFFF); // BWTR3 // REST VALUE // // r |= JLINK_MEM_WriteU32(0x5200411C, 0x0FFFFFFF); // BWTR4 // REST VALUE // // r |= JLINK_MEM_WriteU32(0x52004140, 0x00001AD0); // SDCR1 // CONTROL / TIMING SDRAM // // r |= JLINK_MEM_WriteU32(0x52004144, 0x000001E5); // SDCR2 // CONTROL / TIMING SDRAM // // r |= JLINK_MEM_WriteU32(0x52004148, 0x0F1F6FFF); // SDTR1 // CONTROL / TIMING SDRAM // // r |= JLINK_MEM_WriteU32(0x5200414C, 0x01010361); // SDTR2 // CONTROL / TIMING SDRAM // // r |= JLINK_MEM_WriteU32(0x52004150, 0x00046000); // SDCMR // SDRAM COMMAND MEMORY REGISTER // // r |= JLINK_MEM_WriteU32(0x52004154, 0x00001844); // SDRTR // SDRAM REFRESH RATE // // // r |= JLINK_MEM_WriteU32(SDSR, 0x00000000); // // r |= JLINK_MEM_WriteU32(SR, 0x00000040); // // r |= JLINK_MEM_WriteU32(ECCR, 0x00000000); // // if (r < 0) { // return -1; // } // return 0; // } int SetupTarget(void) { int r; r = 0; JLINK_SYS_Report(">>>>>>>>>>>>>>Configure NOR FLASH"); JLINK_TARGET_Halt(); JLINK_ExecCommand("SetCFIFlash 0x60000000-0x60FFFFFF"); // Defaults: NumChips = 1, NumBits = 16 // JLINK_ExecCommand("SetCFIFlash 0x64000000-0x64FFFFFF, 1, 16"); // Identical to the above JLINK_ExecCommand("SetWorkRAM 0x20000000-0x2000FFFF"); // RCC r |= JLINK_MEM_WriteU32(0x580244D4, 0x1000); r |= JLINK_MEM_WriteU32(0x58024534, 0x1000); r |= JLINK_MEM_WriteU32(0x580244E0, 0x1F8); // GPIO r |= JLINK_MEM_WriteU32(0x58020C00, 0xAAAAAAFA); r |= JLINK_MEM_WriteU32(0x58020C08, 0xFFFFFF0F); r |= JLINK_MEM_WriteU32(0x58020C0C, 0x55555505); r |= JLINK_MEM_WriteU32(0x58020C20, 0xCCCC00CC); r |= JLINK_MEM_WriteU32(0x58020C24, 0xCCCCCCCC); r |= JLINK_MEM_WriteU32(0x58021000, 0xAAAAAAAA); r |= JLINK_MEM_WriteU32(0x58021008, 0xFFFFFFFF); r |= JLINK_MEM_WriteU32(0x5802100C, 0x55555555); r |= JLINK_MEM_WriteU32(0x58021020, 0xCCCCCCCC); r |= JLINK_MEM_WriteU32(0x58021024, 0xCCCCCCCC); r |= JLINK_MEM_WriteU32(0x58021400, 0xAA9FFAAA); r |= JLINK_MEM_WriteU32(0x58021404, 0x400); r |= JLINK_MEM_WriteU32(0x58021408, 0xFFF00FFF); r |= JLINK_MEM_WriteU32(0x5802140C, 0x55400555); r |= JLINK_MEM_WriteU32(0x58021414, 0x400); r |= JLINK_MEM_WriteU32(0x58021420, 0xCCCCCC); r |= JLINK_MEM_WriteU32(0x58021424, 0xCCCCC000); r |= JLINK_MEM_WriteU32(0x58021800, 0xBFEEFAAA); r |= JLINK_MEM_WriteU32(0x58021808, 0xC0330FFF); r |= JLINK_MEM_WriteU32(0x5802180C, 0x40110555); r |= JLINK_MEM_WriteU32(0x58021820, 0xCCCCCC); r |= JLINK_MEM_WriteU32(0x58021824, 0xC0000C0C); r |= JLINK_MEM_WriteU32(0x58021C00, 0xAAAAABFF); r |= JLINK_MEM_WriteU32(0x58021C08, 0xFFFFFC00); r |= JLINK_MEM_WriteU32(0x58021C0C, 0x55555400); r |= JLINK_MEM_WriteU32(0x58021C20, 0xCCC00000); r |= JLINK_MEM_WriteU32(0x58021C24, 0xCCCCCCCC); r |= JLINK_MEM_WriteU32(0x58022000, 0xAAE8AAAA); r |= JLINK_MEM_WriteU32(0x58022008, 0xAA3CFFFF); r |= JLINK_MEM_WriteU32(0x5802200C, 0x145555); r |= JLINK_MEM_WriteU32(0x58022020, 0xCCCCCCCC); r |= JLINK_MEM_WriteU32(0x58022024, 0xEEEE0CC0); // FMC r |= JLINK_MEM_WriteU32(0x52004000, 0x30DA); r |= JLINK_MEM_WriteU32(0x52004000, 0x8010B0D8); r |= JLINK_MEM_WriteU32(0x52004004, 0x10340519); r |= JLINK_MEM_WriteU32(0x52004000, 0x8010B0D9); if (r < 0) { return -1; } return 0; } int HandleAfterFlashProg(void) { JLINK_TARGET_Halt(); return 0; }