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

SDK12 DFU service not found

I am developing software for a custom hardware based on NRF52. Previously I was tasked on updating the old NRF51 based software (used on older version of the device) for NRF52 using SDK11. Once that was done my next task was updating the software for SDK12. The software is otherwise working fine but I am having problems with DFU. I tried creating a zip of the application and flashed the combined softdevice/bootloader from SDK12 examples folder (dfu/ble_dfu_send_hex) to the device. The device shows as DfuTest on the mobile DFU app but when I try to upload the zip all I get is "DFU service not found". I also tried compiling the secure DFU bootloader example and using that instead but the result is the same.

Do I need to also have DFU support in the application for that to work ? Currently the application has some kind of DFU functionality from the earlier SDK 11 implementation but I'm guessing that wont work. Any examples to study so that I can implement the functionality ?

  • @jpolvi: Could you check what you have in the secure_dfu_gcc_nrf52.ld file ? In that file the bootloader setting should be set at 0x0007F000. The bootloader setting should be located after the bootloader, in the sense that it should be on top of the flash (at address higher than the bootloader)

  • Memory settings in that file are as follows: FLASH (rx) : ORIGIN = 0x78000, LENGTH = 0x6000 RAM (rwx) : ORIGIN = 0x20002C00, LENGTH = 0x5380 NOINIT (rwx) : ORIGIN = 0x20007F80, LENGTH = 0x80 BOOTLOADER_SETTINGS (rw) : ORIGIN = 0x0007F000, LENGTH = 0x1000 UICR_BOOTLOADER (r) : ORIGIN = 0x10001014, LENGTH = 0x04 MBR_PARAMS_PAGE (rw) : ORIGIN = 0x0007E000, LENGTH = 0x1000 UICR_MBR_PARAM_PAGE(r) : ORIGIN = 0x10001018, LENGTH = 0x04

    Though I am using uVision to build it. I also use uVision to build the demo, but for the application the code size limit of the lite version makes it impossible to use uVision. Perhaps that has some effect ?

  • @Jpolvi: I though you are using gcc and make ? The bootloader setting is set at 0x7F000 could you check why it's 0x7A000 from your log ?

  • I am using gcc and make for the application (under Cygwin), since the build size is too big for UVision Lite version (>32 K). I am using uVision for bootloader and buttonless_dfu_app building for convenience, though I could use gcc and make as well since both do have a makefile. The bootloader location is set to 0x7A000 in the linker settings file. I added that setting after reading from another conversation that it is needed in gcc builds, but I guess the address is wrong. Guess I need to change that but should I also change the flash setting ? The bootloader linker memory settings also show flash starting at 0x78000 with length of 0x6000 so it is located below the settings area and also below MBR params.

  • Please test using unmodified example of the bootloader and let me know the result. (The bootloader setting should be located at 0x7F000)

Related