I saw that Segger support didn't know how to to load my provided binary/app built for TI CC3220SF MCU, so I thought I 'll write the steps for how to do it.
Assume you have a CC3220SF with a blank-app image Development image (refer to the chip user manual) : i.e. you (or whoever) created the system image containing no app to be started by the application core; or lets say both the internal flash copy of and the external flash app image file (pre-programmed by manufacturing) got corrupted and bootloader does not start it. When this happens, you may observe (depending on ROM code version ...) that the CPU / PC is just sitting at address 0x000029B8.
Now lets say we we have and elf binary provided, built for the chip. Assume you just want to load & start the app, using JLinkExe (with the elf, you could also go JLinkGDBServer and then use gdb to load, but lets say we converted elf to plain binary).
Note that if you start with ROM code / PC stuck at 0x000029B8 (see above) when you just connect JLink, you don't need a reset during the upload/start app sequence. If not and the chip is running some app before you connect with JLink, you need to add a "r" reset after loading/flashing the image and before setting registers - steps 4 and 5.
If you want to prevent bootloader from erasing your image every time you power cycle or reset the board, run the following command in JLinkExe:
Hope this helps Segger guys ...
(The above how-to cannot be C&P to a Segger's How-To Wiki page; unless done by this post author on Segger's request).
Assume you have a CC3220SF with a blank-app image Development image (refer to the chip user manual) : i.e. you (or whoever) created the system image containing no app to be started by the application core; or lets say both the internal flash copy of and the external flash app image file (pre-programmed by manufacturing) got corrupted and bootloader does not start it. When this happens, you may observe (depending on ROM code version ...) that the CPU / PC is just sitting at address 0x000029B8.
Now lets say we we have and elf binary provided, built for the chip. Assume you just want to load & start the app, using JLinkExe (with the elf, you could also go JLinkGDBServer and then use gdb to load, but lets say we converted elf to plain binary).
- JLinkExe -device cc3220sf -autoconnect 1 -speed auto -JTAGConf -1,-1 -if swd
(Note: I'm assuming SWD settings on your board; JTAG has issues currenty, with Segger ... ) - h
- regs
(Verify no app code was run / still in ROM) - loadfile /tmp/uartecho_CC3220SF_LAUNCHXL_freertos_gcc.bin 0x01000800
(Note the set for all apps staring internal flash address; the loaded app binary is an example) - SetPC 0x010044FD
wreg MSP 0x200098A8
wreg PSP 0x200098A8
(Adjust the PC and stack registers, according to the binary ; the addresses read manually here from the bin file; or alternatively read them after flashing the bin:
mem32 0x01000800 2 ) - s
(You can optionally do few single instruction steps, to check you got in ...) - g
(App should be running now)
Note that if you start with ROM code / PC stuck at 0x000029B8 (see above) when you just connect JLink, you don't need a reset during the upload/start app sequence. If not and the chip is running some app before you connect with JLink, you need to add a "r" reset after loading/flashing the image and before setting registers - steps 4 and 5.
If you want to prevent bootloader from erasing your image every time you power cycle or reset the board, run the following command in JLinkExe:
- w4 0x01000000 0x5AA5A55A 0x000FF800 0xEFA3247D
This adds the 'magic' header; the last word signals to bootloader not to check or overwrite internal flash image
Hope this helps Segger guys ...
(The above how-to cannot be C&P to a Segger's How-To Wiki page; unless done by this post author on Segger's request).