Hi all,

this might be worth mentioning: https://github.com/apache/mynewt-core/pull/1557 
<https://github.com/apache/mynewt-core/pull/1557>.

flash_loader app runs on MCU, and expects commands to be written directly to 
RAM.
Commands like ‘write data to flash’, ‘erase’, ‘write-and-verify’ and ‘read’.

So now there’s now tooling to populate external flash for platforms which either
a) have external SPI flash in addition to internal flash, and you need to get 
data there. Or
b) MCUs which execute from RAM, and have only external SPI flash to store it’s
images.
If your JTAG programmer can do this automatically, great. If not, you could use 
this
to do the programming.

flash_loader, like other mynewt apps, is built using a specific BSP. And it 
will be
able to do this operations on any flash which appears in the BSP flash device 
table.
You could think of it as hal_flash interface which is exported to JTAG 
programmer.

I assume people will always execute this from RAM, and an example on how this
could work using nordic_pca10040 BSP.  See 
https://github.com/apache/mynewt-core/pull/1547 
<https://github.com/apache/mynewt-core/pull/1547>.

Of course, you’ll want to have scripting on the programmer side to feed data 
in/out of
the flash_loader app. I implemented this using gdb scripts (as that’s the 
debugger
of choice for us, and can run over openocd and Segger JLink).

These helper routines are located here:
https://github.com/apache/mynewt-core/blob/master/compiler/gdbmacros/flash_loader.gdb
 
<https://github.com/apache/mynewt-core/blob/master/compiler/gdbmacros/flash_loader.gdb>
You can, of course, replace these with openocd/JLink scripts. Contributions 
always welcome.

Here’s a gdb script I use to populate the image slot1 with these scripts for 
nordic_pca10040:

—8<—cut-start—
set pagination off

shell sh -c "trap '' 2; JLinkGDBServer -device nRF52 -speed 4000 -if SWD -port 
3333 -singlerun > logfile.txt 2>&1 &"
target remote localhost:3333
mon reset
restore bin/targets/fl_nrf52dk/app/apps/flash_loader/flash_loader.elf.bin 
binary 0x20000000
symbol-file bin/targets/fl_nrf52dk/app/apps/flash_loader/flash_loader.elf
set $sp=*(int *)0x20000000
set $pc=*(int *)0x20000004
b blink_led
c

source repos/apache-mynewt-core/compiler/gdbmacros/flash_loader.gdb
mon go

fl_load nrf52.img 0 0x42000
mon halt
mon reset
quit
—8<—cut-end---

And here’s my flash loader app target for that BSP.
targets/fl_nrf52dk
    app=@apache-mynewt-core/apps/flash_loader
    bsp=@apache-mynewt-core/hw/bsp/nordic_pca10040
    build_profile=optimized
    syscfg=FLASH_LOADER_DL_SZ=0x8000:RAM_RESIDENT=1


Reply via email to