cancel
Showing results for 
Search instead for 
Did you mean: 

invalidate D-Cache in stm32h745i-disco

Maximiliano
Associate III

hello everyone,

I am having a problem with my stm32H745I board testing code for the RTC,RCC and power supply it seems that it stopped working. At first it wouldn't let me upload code until with stmprogrammer I connected by holding reset.

Now I can upload code but it doesn't do anything, not even a simple led which is a test code of mine that was working.

When debugging I find that it stays in this part of the code in loop:

 

/* invalidate D-Cache */
sets = (uint32_t)(CCSIDR_SETS(ccsidr));
do {
ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
do {
SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
#if defined ( __CC_ARM )
__schedule_barrier();
#endif
} while (ways-- != 0U);
} while(sets-- != 0U);
__DSB();

SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */

__DSB();
__ISB();
#endif
}"

 

I tried to update firmware, load .hex, erase memory with stmprogrammer and nothing.

 

30 REPLIES 30

Can't I just bypass it? Isn't VDD 3.3V?

 

 

Maximiliano_0-1729698285752.png

 

Sorry I didn't understand:

To connect BOOT0 to VDD, you need to solder a wire that will connect BOOT0 to VDD. then disconnect it when it's needed.

 

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.

I mean in the schematic R144 is not there, if I apply solder to join those ends I would send boot0 to 3.3V and that would fulfill the step of connecting boot0 to VDD and be able to erase the memory and then remove the solder jumper right? with that I avoid soldering a wire to one end of R144 which is very difficult.


@Maximiliano wrote:

I mean in the schematic R144 is not there, if I apply solder to join those ends I would send boot0 to 3.3V and that would fulfill the step of connecting boot0 to VDD and be able to erase the memory and then remove the solder jumper right? with that I avoid soldering a wire to one end of R144 which is very difficult.


You can do that but to unsolder it, it could be a challenge. It's up to you to decide.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.

aa I understand, is that actually that resistor is not present in the circuit only its pads that's why I was saying. actually I don't have to remove any resistor just jumper the smd pads of the resistor that is not present that's why I was saying it's easier than soldering a wire on one of the pins.

 

Anyway I just did it but it doesn't seem to work I sent boot0 to 3.3V I connected it to stmprogrammer and cleared the memory then disconnected to remove the boot0 jumper to 3.3V and connected to stmprogrammer to load the .hex of the led flashing but it doesn't work, when debugging it stays in loop in the same part of the code.

 

is there anything I can do? :\

Did you follow these exact steps in this order?

Step 1. Power off the board
Step 2. Locate the BOOT0 pin and connect the BOOT0 pin to VDD using a wire. This pulls the BOOT0 pin to HIGH, which changes the device’s boot address to start the bootloader in system memory instead of booting from the target’s flash memory (which currently houses the firmware that is setting the incorrect SMPS/LDO configuration).
Step 3. Power on the board and connect to the target using STM32CubeProgrammer.
Step 4. Perform a mass erase.
Step 5. Power off the board and remove the wire between BOOT0 and VDD.
Step 6. The recovery is now completed; you can once again connect to the target using the STLINK and use the board as normal.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.

 

I made the following connection for boot0

Maximiliano_0-1729700830549.png

if that's sending boot0 to vdd then I did everything as is, if you want I can try soldering a wire on one of the points and connect it to some arduino pin like 3.3v or 5v

 

"which changes the device’s boot address to start the bootloader in system memory instead of booting from the target’s flash memory (which currently houses the firmware that is setting the incorrect SMPS/LDO configuration)." 

do i have a way to corroborate that this actually happens when i set boot0 to 3.3v?

 

You need to connect and disconnect this wire or "solder bridge" (0V or VDD) following the specific steps described above and you need to follow the exact steps with the same order. That's it.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.

Maximiliano_0-1729701653276.png

I found this also in the schematic, I will try to put a wire on R199 on the boot0 side and send it to 3.3v.

This is for ST-LINK module not for the MCU:

SofLit_0-1729701906303.png

So again follow the steps as described in the article and use R144 to connect BOOT0 pin to VDD.

 

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.