This is my mental model of the firmware on arduino like microcontrollers:
There is a bootloader that runs every single boot. It decides if it should run the user’s firmware, or run itself.
If it decides to run itself, then you can talk to it and hand it new user code. If the transfer works, it will delete the old user code and put your new user code there. It won’t ever write over the bootloader program, no matter what you tell it. In a regular arduino, the arduino ide resets the controller and immediately tells the bootloader to stay on in flashing mode, and they talk to put new user code in the right place. On the skr boards, the bootloader reads the micro sd and if there is a firmware.bin, it does the same thing. The bootloader never changes.
If it decides to run the user code, it will run your program. It does this by default in a fraction of a second. It looks like you only have the user code on the microcontroller…
So, imagine if you have the bootloader at address 0. That always gets run. Then the user code starts at address 1000 (not real numbers). That only gets ran by the bootloader.
If you use the uart/isp to put your new code at 1000, then the bootloader will run it.
On older boards, like the atmega arduinos, you could also just put your code at 0. You wouldn’t be able to flash with the bootloader anymore, but your code wouldn’t care. A lot of the cheap 3D printers from China came “without a bootloader”. That’s what they meant. The user code started at 0, instead of having a bootloader first. They programmed these boards in china over ISP.
I am not that detail oriented, but I have seen some things that make me think these newer bootloaders are doing more now. They may be setting up some of the hardware and then calling address 1000 to start the user code. If that is true (and it is mostly speculation by me) then you will need to keep the bootloader and just flash to the user space.
I just barely scratch the surface of this stuff. There are a lot of very smart people that have a lot of experience with this kind of thing. They could probably read the datasheet and know how to do this in 5mins. So I would try to find help. Either from a troubleshooting post somewhere, or by asking in the right place with the right person (is that what you were hoping from here? ).
My guess is there is a simple command to flash new firmware to a specific address, and you just have to find that address.
Something like stmflasher firmware.bin 1000
(I can’t remember the name of the tool, and I don’t know the magic address).