EmbDev.net

Forum: µC & Digital Electronics STM32H7 bank swap break at address 0x81006fe


von Fabian (Guest)


Rate this post
useful
not useful
I trying to do a bank swap with the ST32 H743ZI2. I wasted much of time 
to fix it but i didnt get it. Maybe because im new in STM32 controllers.

I copied the bank swap code from STM32CubeH7 Firmware Examples and did a 
few modifications regarding to gpio configuration in CubeMX. I did them 
because i want to implicate the code in a excisting project without the 
stm32h7xx_nucleo headers.

Following the Code for Bank1:
1
HAL_FLASH_Unlock();
2
HAL_FLASH_OB_Unlock();
3
4
while (1)
5
{
6
    /* Wait for BUTTON_USER is released */
7
    if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == 1)
8
    {
9
  while (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == 1);
10
11
  /* Get the Dual boot configuration status */
12
  HAL_FLASHEx_OBGetConfig(&OBInit);
13
14
  /* Get FLASH_WRP_SECTORS write protection status */
15
  OBInit.Banks     = FLASH_BANK_1;
16
  HAL_FLASHEx_OBGetConfig(&OBInit);
17
18
  /* Check Swap FLASH banks  status */
19
  if ((OBInit.USERConfig & OB_SWAP_BANK_ENABLE) == OB_SWAP_BANK_DISABLE)
20
  {
21
    /*Swap to bank2 */
22
    /*Set OB SWAP_BANK_OPT to swap Bank2*/
23
    OBInit.OptionType = OPTIONBYTE_USER;
24
    OBInit.USERType   = OB_USER_SWAP_BANK;
25
    OBInit.USERConfig = OB_SWAP_BANK_ENABLE;
26
    HAL_FLASHEx_OBProgram(&OBInit);
27
28
    /* Launch Option bytes loading */
29
    HAL_FLASH_OB_Launch();
30
31
    /*
32
      as the  CPU is executing from the FLASH Bank1, and the I-Cache is enabled :
33
      Instruction cache must be invalidated after bank switching to ensure that
34
      CPU will fetch correct instructions from the FLASH.
35
    */
36
    SCB_InvalidateICache();
37
38
39
    HAL_NVIC_SystemReset();
40
  }
41
  else
42
  {
43
    /* Swap to bank1 */
44
    /*Set OB SWAP_BANK_OPT to swap Bank1*/
45
    OBInit.OptionType = OPTIONBYTE_USER;
46
    OBInit.USERType = OB_USER_SWAP_BANK;
47
    OBInit.USERConfig = OB_SWAP_BANK_DISABLE;
48
    HAL_FLASHEx_OBProgram(&OBInit);
49
50
    /* Launch Option bytes loading */
51
    HAL_FLASH_OB_Launch();
52
53
    /*
54
      as the  CPU is executing from the FLASH Bank1, and the I-Cache is enabled :
55
      Instruction cache must be invalidated after bank switching to ensure that
56
      CPU will fetch correct instructions from the FLASH.
57
    */
58
    SCB_InvalidateICache();
59
  }
60
}
61
else
62
    {
63
#ifdef FLASH_BANK1
64
    /* Toggle LED1 */
65
66
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
67
/*Turn Off LED2*/
68
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, 0);
69
70
#else
71
      /* Toggle LED2 */
72
    HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_1);
73
      /* Turn off LED1 */
74
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 0);
75
#endif
76
77
  /* Insert 100 ms delay */
78
  HAL_Delay(100);
79
}
80
81
/* USER CODE END WHILE */
82
83
  /* USER CODE BEGIN 3 */
84
  }
85
  /* USER CODE END 3 */
86
}

The code for bank1 and bank2 are equal except linkerscript. I splited 
Flash in two areas wich have 1024kb each. In following you can see the 
code for bank1.
1
/* Specify the memory areas */
2
MEMORY
3
{
4
5
  RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
6
  RAM_D1 (xrw)   : ORIGIN = 0x24000000, LENGTH = 512K
7
  RAM_D2 (xrw)   : ORIGIN = 0x30000000, LENGTH = 288K
8
  RAM_D3 (xrw)   : ORIGIN = 0x38000000, LENGTH = 64K
9
  ITCMRAM (xrw)  : ORIGIN = 0x00000000, LENGTH = 64K
10
  FLASH (rx)     : ORIGIN = 0x8000000, LENGTH = 1024K
11
}

In linkerscript for bank2 i changed flash start addres to 0x08100000.

Now i have following problem. If i load in order code for bank1 and code 
for bank2 press the Button1 and Press the Resetbutton i get following 
error message:
1
Break at address "0x81006fe" with no debug information available, or outside of program code.


I already successfully checked if there is placed some code with STM32 
Utility.

If i load the codes in reverse order the banks get swaped once. 
Independently if Button1 gets pressed before system reset or not..

I already checked some forums without success.

Does anyone know where the problem could be?

von erklehr behr (Guest)


Rate this post
useful
not useful
>> Does anyone know where the problem could be?

The main problem is that you aren't willing to follow the
rules for posting program code.

So I'm not willing to really look at your problem ....

von Fabian K. (scheinwerfer)


Attached files:

Rate this post
useful
not useful
> The main problem is that you aren't willing to follow the
> rules for posting program code.

You mean because it´s a long code? Sorry didnt know that 90 lines are to 
long..
Rules violation wasnt my intention. I tried to edit the post 
unfortunately there are problems with my email host so i didnt get some 
mail from embdev.net or microcontoller.net. I would do a new post but i 
thinks its against the rules too.

As soon as i can edit the post i will do it.

Maybe you can forgive this serious mistake. In case you did the code in 
question and the complete code is in attachment.

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.