This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Segger Embedded Studio and Bootloader

Continuing with my attempts to get this to work on SES I'm not sure if I'm missing something simple or not.

So using the excellent RKNRFGO (which by the way is much quicker for adding the softdevice than linking it in with SES, highly recommended for any Mac users) when I attempt to add the Bootloader the bootloader nor any app appears to be working. I have tried adding a Code hex which has been compiled linking in bootloader_settings_nrf52.hex and I have tried just the softdevice and the bootloader themselves without any Code hex.

How are other people using SES managing to achieve this?

Thanks

[UPDATE] These are the settings for RKNRFGO and this is the log after flashing.

screenshot.png

Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

Writing 00000001 -> 4001E504

Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

Sleep(1000)

Downloading file [Section0.0vOdqsDF.bin]...Comparing flash   [000%]000%]050%]100%] Done.
Erasing flash     [000%]100%] Done.
Programming flash [000%]000%]005%]005%]010%]010%]020%]020%]025%]025%]035%]035%]040%]040%]045%]045%]055%]055%]060%]100%] Done.
Verifying flash   [000%]000%]100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (4096 bytes)
J-Link: Flash download: Total time needed: 0.164s (Prepare: 0.089s, Compare: 0.003s, Erase: 0.000s, Program: 0.061s, Verify: 0.000s, Restore: 0.009s)
O.K.

Downloading file [Section1.lCJ9YuF5.bin]...Comparing flash   [000%]000%]050%]100%] Done.
Erasing flash     [000%]100%] Done.
Programming flash [000%]000%]000%]000%]000%]000%]005%]005%]005%]005%]005%]005%]010%]010%]010%]010%]010%]010%]015%]015%]015%]015%]020%]020%]020%]020%]020%]020%]025%]025%]025%]025%]025%]025%]030%]030%]030%]030%]035%]035%]035%]035%]035%]035%]040%]040%]040%]040%]040%]040%]045%]045%]045%]045%]050%]050%]050%]050%]050%]050%]055%]055%]055%]055%]055%]055%]060%]060%]060%]060%]060%]060%]065%]065%]065%]065%]070%]070%]070%]070%]070%]070%]075%]075%]075%]075%]075%]075%]080%]080%]080%]080%]085%]085%]085%]085%]085%]085%]090%]090%]090%]090%]090%]090%]095%]095%]095%]100%] Done.
Verifying flash   [000%]000%]100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (110592 bytes)
J-Link: Flash download: Total time needed: 2.169s (Prepare: 0.162s, Compare: 0.012s, Erase: 0.000s, Program: 1.905s, Verify: 0.002s, Restore: 0.086s)
O.K.

Downloading file [Section2.j6YAf9Gp.bin]...Comparing flash   [000%]000%]050%]100%] Done.
Erasing flash     [000%]100%] Done.
Programming flash [000%]000%]005%]100%] Done.
Verifying flash   [000%]000%]100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (4096 bytes)
J-Link: Flash download: Total time needed: 0.169s (Prepare: 0.115s, Compare: 0.003s, Erase: 0.000s, Program: 0.011s, Verify: 0.000s, Restore: 0.038s)
O.K.

Downloading file [Section3.RxSJH8nW.bin]...Comparing flash   [000%]000%]050%]050%]100%] Done.
Verifying flash   [000%]100%] Done.
J-Link: Flash download: Flash download skipped. Flash contents already match
O.K.

Downloading file [Section4.qpm37Mkh.bin]...Comparing flash   [000%]000%]050%]050%]100%] Done.
Verifying flash   [000%]100%] Done.
J-Link: Flash download: Flash download skipped. Flash contents already match
O.K.

Downloading file [Section5.CQi0rkWg.bin]...Comparing flash   [000%]000%]040%]040%]050%]050%]090%]100%] Done.
Erasing flash     [000%]000%]100%] Done.
Programming flash [000%]000%]010%]010%]025%]025%]035%]035%]050%]050%]060%]060%]075%]075%]085%]085%]100%] Done.
Verifying flash   [000%]000%]100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (16384 bytes)
J-Link: Flash download: Total time needed: 0.662s (Prepare: 0.162s, Compare: 0.099s, Erase: 0.031s, Program: 0.282s, Verify: 0.000s, Restore: 0.086s)
O.K.

Downloading file [Section6.W0fSYpr8.bin]...Comparing flash   [000%]000%]050%]100%] Done.
Erasing flash     [000%]000%]100%] Done.
Programming flash [000%]000%]005%]100%] Done.
Verifying flash   [000%]000%]100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (4096 bytes)
J-Link: Flash download: Total time needed: 0.171s (Prepare: 0.115s, Compare: 0.004s, Erase: 0.007s, Program: 0.004s, Verify: 0.000s, Restore: 0.038s)
O.K.

Downloading file [Section7.LMfV07KW.bin]...Comparing flash   [000%]000%]050%]100%] Done.
Erasing flash     [000%]000%]100%] Done.
Programming flash [000%]000%]005%]100%] Done.
Verifying flash   [000%]000%]100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (4096 bytes)
J-Link: Flash download: Total time needed: 0.171s (Prepare: 0.114s, Compare: 0.004s, Erase: 0.007s, Program: 0.004s, Verify: 0.000s, Restore: 0.038s)
O.K.

Sleep(1000)

Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.


Script processing completed.
  • Which bit's not working? it's certainly true that if you write the bootloader, softdevice and app all at the same time then it's still going to boot into the bootloader, because RKNRFGO doesn't know about the secret location to tell the bootloader there's a valid app (and since that's part of the bootloader code it can't really be added). So are you never seeing the bootloader boot, in which case it's probably not built correctly, or some combinations of bootloader/softdevice and app when loaded aren't doing what you expect?

    I see I have a custom section placement file for my bootloader project which has the noinit section, the mbrParamsPage section and the bootloaderSetting sections in it. I don't remember it being that hard to do, but there were certainly some sections needed mapping.

    You can debug the bootloader, first job is to make sure you're getting into it.

  • So putting aside an app for the moment, If I just downloaded the s132_softdevice.hex and the dfu_dual_bank_ble_s132_pca10040.hex (no changes made to either of them, just to be clear) via RKNRFGO it should go straight into bootloader mode. However it's not, there is no advertising or anything from the DK and I switch off/on, hold button 4 down and nothing.

  • yes with an erased chip with just the bootloader and softdevice it should jump to the bootloader. I didn't know there was a pre-built bootloader.hex, so I never tried it.

    So possible issues are it's not actually getting downloaded, I'm sure you selected nrf52 mode in RKNRFGO, or the special bootloader area of the UICR isn't being set with the correct data, so there's no knowledge of there being a bootloader for it to jump to. It certainly works with the version of the bootloader I built, probably before Nordic started shipping a precompiled hex plus the 132 softdevice and with the bootloader I built for nrf51 before that.

    I'd suggest taking a look at the memory after the programming to make sure the bootloader and SD are where you expect and 0x1000104 has the bootloader address etc. What's the log say?

    also try with the nordic nrfjprog too, then we can play spot the difference.

  • Interestingly I just tried to do this with nRFgo using the same hexs (SD + BL and no app) and got an error saying "This hex file [BL - SD was already flashed] has data in SoftDevice region. Try programming using "Program SoftDevice", or erase all before programming"

  • I guess you need to figure that out first then - if you can make it work with the standard tools then we can figure out what doesn't work with RKNRFGO. I wonder if one of the hex files has an extra section which overwrites some part of the UICR. That's 8 sections it writes, seems rather a lot, I'd have expected 4 or 5 perhaps.

    I need to put something in to log what addresses it's writing sections at because JLink no-longer seems to print it out.

Related