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

How do I access softdevice version string

According the BLE specification, the software and firmware revision strings are mandatory. I would like to set put information about the softdevice version in the firmware revision string.

Is there a way I can access version info from the softdevice?

  • Hi Anthony

    Yes, there is the sd_ble_version_get function documented in the SDK documentation under 'BLE Softdevice Common'. I have tested it with S110 v5.2.1 flashed on the nRF51822 and I get subversion_number 0x0043, which is actually the softdevice firmware ID (or softdevice config ID). The list of what firmware ID maps to which softdevice version is not public. What you can do however, is to flash all the different versions of softdevices that are possible to riside on your chips and see what firmware ID those return and you can obtain the mapping yourself. I have done this for the two current production release S110 softdevices and I get the following:

    • S110 Softdevice v5.0.0 firmware ID: 0x002C
    • S110 softdevice v5.2.1 firmware ID: 0x0043

    Update 15.4.2015 For additional information, see this thread

    Update 17.5.2016 The following is a more complete list of softdevice FWIDs that are currently available:

    SoftDevice          |  FWID  | memory address |
    --------------------|--------|----------------
    S110 v5.2.1         | 0x0043 |   0x10001010   | 
    S110 v6.0.0         | 0x0049 |   0x10001010   | 
    S110 v6.2.1         | 0x0035 |   0x10001010   | 
    S110 v7.0.0         | 0x004F |   0x0000300C   | 
    S110 v7.1.0         | 0x005A |   0x0000300C   | 
    S110 v7.3.0         | 0x0063 |   0x0000300C   | 
    S110 v8.0.0         | 0x0064 |   0x0000300C   | 
    ----------------------------------------------
    S112 v6.0.0         | 0x00A7 |                | 
    ----------------------------------------------
    S120 v1.0.0         | 0x0055 |   0x0000300C   | 
    S120 v1.0.1         | 0x0058 |   0x0000300C   | 
    S120 v2.0.0-1.alpha | 0x005B |   0x0000300C   | 
    S120 v2.0.0         | 0x0060 |   0x0000300C   | 
    S120 v2.1.0         | 0x006B |   0x0000300C   | 
    ----------------------------------------------
    S130 v0.9.0-1.alpha | 0x005E |   0x0000300C   | 
    S130 v1.0.0-3.alpha | 0x0066 |   0x0000300C   | 
    S130 v1.0.0         | 0x0067 |   0x0000300C   | 
    S130 v2.0.0         | 0x0080 |   0x0000300C   | 
    S130 v2.0.1         | 0x0087 |   0x0000300C   | 
    ----------------------------------------------
    S210 v3.0.0         | 0x004B |   0x10001010   | 
    S210 v4.0.0         | 0x0057 |   0x0000300C   |  
    ----------------------------------------------
    S310 v1.0.0         | 0x004D |   0x10001010   | 
    S310 v2.0.0         | 0x005D |   0x0000300C   | 
    S310 v2.0.1         | 0x005D |   0x0000300C   | 
    S310 v3.0.0         | 0x0065 |   0x0000300C   | 
    ----------------------------------------------
    S132 v1.0.0-3.alpha | 0x006D |       ?        | 
    S132 v2.0.0-4.alpha | 0x0074 |       ?        | 
    S132 v2.0.0-7.alpha | 0x0079 |   0x0000300C   | 
    S132 v2.0.0         | 0x0081 |   0x0000300C   | 
    S132 v2.0.1         | 0x0088 |   0x0000300C   | 
    S132 v3.0.0         | 0x008C |   0x0000300C   | 
    S132 v4.0.2         | 0x0098 |   0x0000300C   | 
    S132 v5.0.0         | 0x009D |   0x0000300C   | 
    S132 v5.0.1         | 0x00A0 |                | 
    S132 v5.1.0         | 0x00A5 |                | 
    S132 v6.0.0         | 0x00A8 |                | 
    ----------------------------------------------
    S140 v5.0.0-2.alpha | 0x0096 |   0x0000300C   | 
    S140 v6.0.0         | 0x00A9 |                | 
    ----------------------------------------------
    S212 v0.6.0.alpha   | 0x007F |   0x0000300C   | 
    S212 v0.9.1.alpha   | 0x0083 |   0x0000300C   | 
    S212 v2.0.1         | 0x008D |   0x0000300C   |
    S212 v4.0.5         | 0x0093 |   0x0000300C   |
    S212 v5.0.0         | 0x009C |   0x0000300C   |
    ----------------------------------------------
    S332 v0.6.0.alpha   | 0x007E |   0x0000300C   | 
    S332 v0.9.1.alpha   | 0x0082 |   0x0000300C   | 
    S332 v2.0.1         | 0x008E |   0x0000300C   |
    S332 v4.0.5         | 0x0094 |   0x0000300C   |
    S332 v5.0.0         | 0x009B |   0x0000300C   |
    ----------------------------------------------
    Development/any     | 0xFFFE |
    -----------------------------
    

    The softdevice FWID can be read with

    nrfjprog --family NRF51 --memrd 0x0000300C     or
    nrfjprog --family NRF52 --memrd 0x0000300C
    

    if the FWID for the softdevice in question is located at memory address 0x0000300C

    Another method to see softdevice FWID is to flash the softdevice to the nRF51/nRF52 with nRFgo Studio and read the FWID from the GUI

    image description

    Update 2016-05-25 Further FWID list may be described on this thread.

    Update 2017-10-23 More SoftDevice FWIDs were added to the table.

    Update 2018-04-16 More SoftDevice FWIDs were added to the table.

  • Thanks, I did not notice this API. I only wish it was future compatible with a descriptive string. At this time it seems simplest to hard code the anticipated soft device string into my application. I don't expect to ever downgrade to an out of date soft device.

    a*

  • Hello @stefanbirnir May i ask why this list is not public ? I created a list for some FWID values in this post.

    I also found a list in the documentation: infocenter.nordicsemi.com/index.jsp

    Would a bit possible to have a complete list of all available FWID value ?

  • Hi metch

    Thanks for the notification about the FWIDs.

    I guess the link you point to shows the FWID of different softdevices and sort of makes the answer on this thread obolete. I guess the link only shows the softdevices the SDK verison in question is compatible with. What exactly do you have in mind, how would you like to see the FWID list? As in your answer you point to?

  • I would like to have a way to read the programmed SoftDevice programmatically using the SWD interface, this is why I would like to have an exhaustive list for all existing SoftDevices, but there is no exhaustive list for all existing SoftDevices in the doc.

Related