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

Buttonless DFU, secure format, SDK 12.1.0

In reference to this issue in the Android DFU library...

github.com/.../33

... can someone from Nordic please explain how DFU OTA using the secure format on a device with no buttons is supposed to work with SDK 12.1.0? Specifically, which service should be run by the application? Which by the bootloader? How should the central (mobile app) initiate DFU when the user has kicked it off?

What is the service at [SDK]/ble/ble_services/ble_dfu for? It's using this UUID:

#define BLE_DFU_BASE_UUID   {{0x50, 0xEA, 0xDA, 0x30, 0x88, 0x83, 0xB8, 0x9F, 0x60, 0x4F, 0x15, 0xF3, 0x00, 0x00, 0x40, 0x8E}} /**< Used vendor specific UUID. */

Which ends up looking like this to the central:

8E400001-F315-4F60-9FB8-838830DAEA50

And here are the service UUIDs that the implementation in the Android DFU library is looking for:

Secure:

protected static final UUID DFU_SERVICE_UUID = new UUID(0x0000FE5900001000L, 0x800000805F9B34FBL); // 16-bit UUID assigned by Bluetooth SIG

(From: github.com/.../SecureDfuImpl.java

Legacy:

protected static final UUID DFU_SERVICE_UUID = new UUID(0x000015301212EFDEL, 0x1523785FEABCD123L);

(From github.com/.../LegacyDfuImpl.java

Parents
  • Hi Eliot,

    The experimental buttonless DFU example on SDK v12.1 is pretty unmatured and we will update it.

    Currently what it has is just a random 128bit UUID service (8E400001-F315-4F60-9FB8-838830DAEA50) with code in the example showing how you can jump to the bootloader after the characteristic is written 0x01 (checkout the on_write() function) .

    It's pretty simple and straight forward. You can use your own 128 bit UUID service to do the same thing.

    It's not native supported by our app (nRFToolbox and nRFConnect) you may want to implement the switching (enable CCCD and writing 0x01) process on your own app.

    There is a small bug that write property is not enabled for the characteristic, you may want to add that in. Please see issue #3 in Newly found issue here.

    After it switched to the bootloader, you do everything normally like when you update the DFU via bootloader.

Reply
  • Hi Eliot,

    The experimental buttonless DFU example on SDK v12.1 is pretty unmatured and we will update it.

    Currently what it has is just a random 128bit UUID service (8E400001-F315-4F60-9FB8-838830DAEA50) with code in the example showing how you can jump to the bootloader after the characteristic is written 0x01 (checkout the on_write() function) .

    It's pretty simple and straight forward. You can use your own 128 bit UUID service to do the same thing.

    It's not native supported by our app (nRFToolbox and nRFConnect) you may want to implement the switching (enable CCCD and writing 0x01) process on your own app.

    There is a small bug that write property is not enabled for the characteristic, you may want to add that in. Please see issue #3 in Newly found issue here.

    After it switched to the bootloader, you do everything normally like when you update the DFU via bootloader.

Children
No Data
Related