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

SVC Handler Missing

I am trying to get the Heart Rate example in the nRF51 SDK to work (found in ...nrf51822/board/nrf6310/ble/ble_app_hrs). It fails at line 338 in main.c (at the call sd_ble_gap_device_name_set) with an error code of 1, which, according to nrf_error.h, is a "SVC Handler is Missing".

Here is my setup:

Windows 7, Keil uVision V5.05.15, nRF51 SDK: version v5_0_0_34603 Softdevice: s110_nrf51822_5.2.1 Board: PCA10005

I believe I have followed the User Guide exactly. I have not made any changes to the source code or the project settings. I was careful to program the softdevice with nRFgo Studio, before using Keil to flash the application. I also tried allowing nRFgo Studio to flash both the application and the softdevice.

I have even tried using a GNU tool chain from the command line, and also allowing Eclipse to build the application per the nAN-29 document. All efforts lead to the same error being returned from line 338 in main.c.

I am stuck. Any help at this point would be very welcome.

Thank You Dal

  • This is the error you will get if you use the wrong softdevice version with the wrong header files.

    As stated in the release notes of SDK 5.0.0, it's built for S110 6.0.0, and if you try to use it with 5.2.1, you will see this error. If you want to stay on 5.2.1 (although I can't really see any reason why you would), you should also stay at SDK version 4.4.2 (or possibly later ones in the 4.x.y series).

    You can access old versions of downloads by clicking on the version number in the download list on our regular web site.

  • Thanks. I expected it would be something simple that I overlooked. I appreciate your patience...

  • Hi There, This problem also got me. NRF_ERROR_SVC_HANDLER_MISSING or 0x01 returned from sd_ble_gap_device_name_set() Donal

  • Hi, I though I'd append this problem here, rather than start a new thread as I'm having similar issues... for SDK 5.1.0, using Keil 5.1 and the _hrs example and _advertising example:

    If I load the softdevice 6.0, I get

    Error: Flash Download failed - "Cortex-M0"

    If I clear the softdevice and download, I get no load errors, get some LEDs (for _advertising); but of course it stops when initialising the softdevice.

    I've built for nrf51822_xxab and nrf51822_xxxx - same result.

    thanks for any ideas,

  • Hi Lionel, Instructions stolen from another thread here. BR, Donal

    There could be several reasons for this, but the most common two are:

    1. That the chip is in system off. When the chip is in this mode, it is not accessible to the debugger, and hence any download will fail. You can either wake it up in some way (pressing a button configured as a wake-up, reset or similar), or use nRFgo Studio's Recover functionality. If nRFgo Studio finds a programmer, but can't communicate with the chip, it will offer to try a recovery. This will erase all contents on the chip, and in that way ensure that it doesn't enter system off again.

    2. That you try to flash a program on top of the softdevice If you have programmed the softdevice into the chip (which occupies the flash from address 0x0 to 0x14000), and then try to program an application in this same space (i.e. an application not meant for use with the softdevice), you may see this error.

    Again, there are two ways to fix this: a. Erase the softdevice. b. Choose the nRF51822_xxyy_s110 target from the dropdown next to the Download button in Keil. All the non-BLE examples in the SDK come with project settings so that they can be used both with and without the softdevice programmed. If you set this to one of the _s110 targets, the application will be moved from address 0x0 to address 0x14000, meaing it will work nicely on top of the softdevice, even though it doesn't use it.

Related