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

resolving nRF Softdevice version vs. internal version #s / FWID

Softdevices have several separate version number systems:
a) the human-readable release version - used for hex file naming. e.g. s110_nrf51_8.0.0, s120_nrf51_2.0.0
b) the version / FWID reported by the softdevice itself via sd_ble_version_get() e.g. 7.96, 7.100

Note: my understanding is that the 'subversion' number = old FWID code that used to be in UICR. Need verification, however.

I'm implementing the Nordic DFU with softdevice update, and I need a good way to determine which programmatic version matches which hex file. DFU version reporting uses FWID, and from that I'll need to select the correct softdevice hex (verify newer version and compatibility etc).

Question 1) Is there a table or mapping available from Nordic for the different version systems? Even just a header file with mapping would be extremely helpful. This older devZone post suggests manually building a table by experimentation, but I'm hoping there have been some newer developments since then.

devzone.nordicsemi.com/.../

Question 2) the softdevice hex itself has an information struct placed at static location 0x0003000. This info includes a "uint16_t firmware_id" field. Is this synonymous with the reported subversion number from sd_ble_version_get()? I'd also like to get the main version # - is that provided in the information struct? Possibly one of the reserved fields?

  • Hi Craig

    Yes, chapter 6 in the S110 softdevice specification 2.0 should answer both of your questions.

    As of now, there is no table available that maps FWID with softdevice versions

    Update 17.4.2015 The identification ID (FWID) for the softdevice is placed at address 0x300C in the softdevice hex file.

    When you have flashed the softdevice to the nRF51 you can read the FWID with

    nrfjprog --memrd 0x300C
    

    The FWID numbers for S110 are:

    S110 8.0.0: 0x64
    S110 7.1.0: 0x5A
    S110 7.0.0: 0x4F
    

    Update 22.6.2016 More softdevice IDs are here

  • Hello,

    According to this post, the list of what firmware ID maps to which SoftDevice version is not public. Here are some SoftDevice versions with the corresponding FWID:

    SoftDevice          | FWID
    --------------------|-------
    S110 v5.0.0         | 0x002C
    S110 v5.2.1         | 0x0043
    S110 v7.0.0         | 0x004F
    S110 v7.1.0         | 0x005A
    S110 v8.0.0         | 0x0064
    ----------------------------
    S120 v2.0.0         | 0x0060
    ----------------------------
    S130 v1.0.0         | 0x0067
    S130 0.9alpha       | 0x005E
    S130 v2.0.0-7.alpha | 0x0078
    ----------------------------
    S310 v2.0.0         | 0x005D
    ----------------------------
    S132 v1.0.0-3.alpha | 0x006D
    S132 v2.0.0-7.alpha | 0x0079
    ----------------------------
    Development/any     | 0xFFFE
    ----------------------------
    

    See this page for more information: infocenter.nordicsemi.com/index.jsp

    The FWID value is available at address 0x300C. You can use the following command to read it. Here is an example:

    $ nrfjprog --memrd 0x300C
    0x0000300C: FFFF0067
    
  • Do note that the FWID is not located at the same address for all SoftDevices and versions. To find the correct address for a particular SoftDevice, look up SD_FWID_OFFSET in the SoftDevice header files. Or alternatively, see this answer for both FWIDs and locations for most SoftDevices.

Related