• Stars
    star
    760
  • Rank 59,770 (Top 2 %)
  • Language
    Java
  • License
    BSD 3-Clause "New...
  • Created almost 10 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Device Firmware Update library and Android app

Download

Device Firmware Update

Update nRF5 SDK firmware using Bluetooth LE.

This repository contains the source code of the DFU library (lib_dfu module) and nRF Device Firmware Update app.

The DFU is design to update the firmware of nRF51 or nRF52 Series SoCs having an

  • nRF5 SDK Secure Bootloader (v12.0.0 or newer) or
  • nRF5 SDK Legacy Bootloader (v4.3.0-11.0.0).

It can't be used to update firmware developed with the nRF Connect SDK, then the nRF Connect Device Manager mobile app must be used.

Application

Get it on Google Play

nRF Device Firmware Update is a mobile app for updating nRF5 SDK firmware using Bluetooth Low Energy as a transport.

Welcome screen Main screen Settings

Supported files

The firmware should be in .zip file format, prepared using nRF Util. The firmware can be selected from the local storage on your Android or downloaded from the cloud using a deep-link.

Deep links

Application opens links with the provided format for both http and https. Clicking a link automatically opens the app. The downloaded will be saved in the Download folder on the phone. Downloaded file is displayed in the app and ready to use.

Link format: https://www.nordicsemi.com/dfu/?file=link_to_file

Note: Keep in mind to replace '&' with '%26' in the link_to_file.

Library

The lib_dfu module contains the source code of the DFU library for Android.

The DFU library is available on Maven Central repository. Add it to your project by adding the following dependency:

implementation 'no.nordicsemi.android:dfu:2.3.0'

Latest version targeting API lower than 31 is 1.11.1.

For projects not migrated to Android Jetpack, use version 1.8.1.

Note: Those versions are not maintained anymore. All new features and bug fixes will be released on the latest version only.

Proguard / R8

If you use proguard/R8, add the following line to your proguard rules (although this should be added automatically): -keep class no.nordicsemi.android.dfu.** { *; }

Required permissions

Android 4.3 - 11

To communicate with Bluetooth LE devices on Android version 4.3 until 11 two permissions were required: BLUETOOTH and BLUETOOTH_ADMIN. It is enough to put them in the AndroidManifest.xml file. If your app targets API 31 or newer set android:maxSdkVersion="30" as on API 31 they were replaced by BLUETOOTH_CONNECT and BLUETOOTH_SCAN runtime permissions (see below).

Android 6 - 11

If your device is using the Nordic Buttonless Service for switching from app mode to DFU bootloader mode, this library will handle switching automatically. In case your bootloader is configured to advertise with incremented MAC address (that is you use Secure DFU and the device is not bonded) this library will need to scan for the new BluetoothDevice. In Android 6-11, location permission is required and has to be granted in runtime before DFU is started.

Starting from Android 8.1.0, all scans done without a scan filter whilst the screen is turned off will not return any scan results.

Note: "ACCESS_BACKGROUND_LOCATION" permission would also be required to trigger a successful DFU whilst the device screen is turned off, mainly to receive the scan results when scanning and connecting to the peripheral in bootloader mode while the device screen is turned off.

Android 12+

Starting from Android 12 location permission is not needed, instead BLUETOOTH_CONNECT is required. When your device is using buttonless service and changes MAC address, it also requires BLUETOOTH_SCAN permission to be granted. This permission can be used with neverForLocation flag. Read more in Bluetooth permissions.

Retrying

Starting from version 1.9.0 the library is able to retry a DFU update in case of an unwanted disconnection. However, to maintain backward compatibility, this feature is by default disabled. Call initiator.setNumberOfRetries(int) to set how many attempts the service should perform. Secure DFU will be resumed after it has been interrupted from the point it stopped, while the Legacy DFU will start again.

Device Firmware Update (DFU)

The nRF5x Series chips are flash-based SoCs, and as such they represent the most flexible solution available. A key feature of the nRF5x Series and their associated software architecture and S-Series SoftDevices is the possibility for Over-The-Air Device Firmware Upgrade (OTA-DFU). See Figure 1. OTA-DFU allows firmware upgrades to be issued and downloaded to products in the field via the cloud and so enables OEMs to fix bugs and introduce new features to products that are already out on the market. This brings added security and flexibility to product development when using the nRF5x Series SoCs.

Device Firmware Update

This repository contains a tested library for Android 4.3+ platform which may be used to perform Device Firmware Update on the nRF5x device using a phone or a tablet.

DFU library has been designed to make it very easy to include these devices into your application. It is compatible with all Bootloader/DFU versions.

Alt text for your video

Documentation

See the documentation for more information.

Requirements

The library is compatible with nRF51 and nRF52 devices with S-Series Soft Device and the DFU Bootloader flashed on.

DFU History

Legacy DFU

  • SDK 4.3.0 - First version of DFU over Bluetooth Smart. DFU supports Application update.
  • SDK 6.1.0 - DFU Bootloader supports Soft Device and Bootloader update. As the updated Bootloader may be dependent on the new Soft Device, those two may be sent and installed together.
    • Buttonless update support for non-bonded devices.
  • SDK 7.0.0 - The extended init packet is required. The init packet contains additional validation information: device type and revision, application version, compatible Soft Devices and the firmware CRC.
  • SDK 8.0.0 - The bond information may be preserved after an application update. The new application, when first started, will send the Service Change indication to the phone to refresh the services.
    • Buttonless update support for bonded devices
    • sharing the LTK between an app and the bootloader.

Secure DFU

  • SDK 12.0.0 - New Secure DFU has been released. Buttonless service is experimental.
  • SDK 13.0.0 - Buttonless DFU (still experimental) uses different UUIDs. No bond sharing supported. Bootloader will use address +1.
  • SDK 14.0.0 - Buttonless DFU is no longer experimental. A new UUID (0004) added for bonded only devices (previous one (0003) is for non-bonded only).
  • SDK 15.0.0 - Support for higher MTUs added.

This library is fully backwards compatible and supports both the new and legacy DFU. The experimental buttonless DFU service from SDK 12 is supported since version 1.1.0. Due to the fact, that this experimental service from SDK 12 is not safe, you have to call starter.setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true) to enable it. Read the method documentation for details. It is recommended to use the Buttonless service from SDK 13 (for non-bonded devices, or 14 for bonded). Both are supported since DFU Library 1.3.0.

Check platform folders for mode details about compatibility for each library.

Related libraries

iOS version

iOS version of the same library can be found at IOS-DFU-Library.

React Native

A library for both iOS and Android that is based on this library is available for React Native: react-native-nordic-dfu

Flutter

A library for both iOS and Android that is based on this library is available for Flutter: nordic_dfu

Xamarin

Simple binding library for Android is available on nuget: Laerdal.Dfu

Resources

More Repositories

1

Android-BLE-Library

A library that makes working with Bluetooth LE on Android a pleasure. Seriously.
Java
1,982
star
2

Android-nRF-Connect

Documentation and issue tracker for nRF Connect for Android.
1,299
star
3

Android-nRF-Toolbox

The nRF Toolbox is a container app that stores your Nordic Semiconductor apps for Bluetooth Low Energy in one location.
Kotlin
1,077
star
4

Android-Scanner-Compat-Library

A compat library for Bluetooth Low Energy scanning on Android.
Java
755
star
5

IOS-nRF-Toolbox

The nRF Toolbox is a container app that stores your Nordic Semiconductor apps for Bluetooth Low Energy in one location.
Swift
600
star
6

IOS-DFU-Library

OTA DFU Library for Mac and iOS, compatible with nRF5x SoCs
Swift
517
star
7

nRF-Logger-API

The public library with nRF Logger API. Allows to log custom logs into the nRF Logger database.
Java
413
star
8

Android-nRF-Mesh-Library

The Bluetooth Mesh Provisioner and Configurator library.
Java
404
star
9

pc-nrfutil

nrfutil python library and command line client
Python
383
star
10

bluetooth-numbers-database

An up-to-date listing of all the various Bluetooth Specification-related elements that are defined by our industry (Company IDs, Service UUIDs, Characteristic UUIDs and Descriptor UUIDs), that you can use instead of rolling your own.
JavaScript
323
star
11

IOS-nRF-Mesh-Library

Provision, configure and control Bluetooth mesh devices with nRF Mesh library.
Swift
310
star
12

Kotlin-BLE-Library

Kotlin
300
star
13

pc-ble-driver

Desktop library for Bluetooth low energy development
C
281
star
14

Android-nRF-Blinky

nRF Blinky is an application developed targeting an audience of developers who are new to Bluetooth Low Energy
Kotlin
266
star
15

nrfx

Standalone drivers for peripherals present in Nordic SoCs
C
254
star
16

ble-sdk-arduino

C++
249
star
17

nRF-Sniffer-for-802.15.4

nRF-based 802.15.4 sniffer (firmware and software)
Python
227
star
18

IOS-CoreBluetooth-Mock

Mocking library for CoreBluetooth framework.
Swift
224
star
19

Nordic-Thingy52-FW

Nordic Thingy:52 software development kit. This kit is designed to assist users in developing their own custom firmware for Thingy. Please see http://www.nordicsemi.com/thingy for the latest news and software releases.
C
210
star
20

pc-nrfconnect-launcher

nRF Connect for Desktop application and framework
TypeScript
172
star
21

pc-nrfconnect-ble

Bluetooth low energy app for nRF Connect for Desktop
TypeScript
150
star
22

nRF5-SDK-for-Mesh

This repo is a "Release" clone of the zip files available @
C
145
star
23

IOS-nRF-Connect

Info page
136
star
24

pc-ble-driver-py

Python bindings for the ble-driver library
Python
126
star
25

zcbor

Low footprint C/C++ CBOR library and Python tool providing code generation from CDDL descriptions.
C
114
star
26

Android-Nordic-Thingy

Android SDK and sample application for Nordic Thingy:52
Java
107
star
27

Android-nRF-Beacon

The nRF Beacon application lets you explore the full range of possibilities for beacons using Bluetooth Smart technology. The application has been designed to demonstrate all features of the nRF8122 Bluetooth® Smart Beacon Kit.
Java
106
star
28

pc-nrfconnect-ppk

Power Profiler app for nRF Connect for Desktop
TypeScript
103
star
29

IOS-nRF-Connect-Device-Manager

A mobile management library for devices supporting nRF Connect Device Manager.
Swift
88
star
30

Android-nRF-Connect-Device-Manager

A mobile management library for devices running Apache Mynewt and Zephyr (DFU, logs, stats, config, etc.)
Java
81
star
31

pc-ble-driver-js

Node.js interface to the C/C++ pc-ble-driver library. API docs: https://nordicsemiconductor.github.io/pc-ble-driver-js/
JavaScript
79
star
32

pynrfjprog

Python wrapper around the nrfjprog dynamic link library (DLL)
C
75
star
33

pc-nrfconnect-programmer

Programmer app for nRF Connect for Desktop
TypeScript
66
star
34

IOS-Nordic-Thingy

iOS Library and example application for Thingy:52™
Swift
65
star
35

IOS-BLE-Library

The Bluetooth LE library for iOS and Mac. 100% Swift.
Swift
62
star
36

Android-BLE-Common-Library

A companion library for the Android BLE Library. Contains parsers for common Bluetooth SIG characteristics.
Java
55
star
37

Android-nRF-Beacon-for-Eddystone

An application with Eddystone GATT Configuration Service & Google Nearby API and Proximity API.
Java
48
star
38

iOS-nRF-Blinky

A starter app for new developers in the BLE world!
Swift
44
star
39

nrf-udev

Linux udev rules for Nordic Semiconductor devices.
Shell
37
star
40

pc-nrfconnect-rssi

RSSI Viewer app for nRF Connect for Desktop
C
37
star
41

Flutter-nRF-Connect-Device-Manager

A Flutter plugin for McuMgr libraries for Android and iOS.
Dart
36
star
42

Android-nRF-Bluetooth-LE-Joiner

nRF BLE Joiner is an application that lets you add new IoT nodes to a network based on Bluetooth Smart.
Java
35
star
43

Linux-ble-6lowpan-joiner

C
35
star
44

pc-nrfjprog-js

Node.js library that exposes the functionality of the nRF Command Line Tools
C++
28
star
45

nrf-intel-hex

Yet another parser for "Intel HEX" files.
JavaScript
27
star
46

pc-nrfconnect-toolchain-manager

Install and manage tools to develop with the nRF Connect SDK (NCS)
TypeScript
24
star
47

pc-nrfconnect-shared

Dependency management for nRF Connect for Desktop packages
TypeScript
21
star
48

asset-tracker-cloud-firmware-aws

nRF Asset Tracker for AWS firmware.
C
18
star
49

pc-nrf-dfu-js

Javascript implementation of Nordic's DFU protocol over serial (or NoBLE).
JavaScript
17
star
50

nrf-device-setup-js

JavaScript
15
star
51

nRF-IEEE-802.15.4-radio-driver

A generic, stack independent and system independent IEEE 802.15.4 radio driver, intended for nRF SoCs with IEEE 802.15.4 radio. It contains a built-in support for multiprotocol, allowing for concurrent operation of IEEE 802.15.4-based stacks (e.g. Thread, ZigBee) with Bluetooth LE
13
star
52

pc-nrfconnect-linkmonitor

LTE Link Monitor app for nRF Connect for Desktop
JavaScript
13
star
53

pc-nrfconnect-gettingstarted

nRF Connect Getting Started Assistant is a tool to guide through the process of setting up the nRF Connect SDK toolchain
SCSS
12
star
54

asset-tracker-cloud-aws-js

A reference implementation of a serverless backend for an IoT product developed using AWS CDK in TypeScript.
TypeScript
12
star
55

asset-tracker-cloud-docs

The nRF Asset Tracker aims to provide a concrete end-to-end example for an IoT product in the asset tracker space.
CSS
10
star
56

pc-nrfconnect-dtm

C
10
star
57

IOS-Memfault-Library

nRF Memfault Library + Example App
Swift
8
star
58

pc-nrfconnect-boilerplate

Starting point for creating apps for nRF Connect for Desktop
TypeScript
8
star
59

Android-nRF-Wi-Fi-Provisioner

An Android library and app for provisioning Nordic Wi-Fi devices to a network.
Kotlin
8
star
60

KMM-BLE-Library

Kotlin
8
star
61

nRF52-Bluetooth-Course

7
star
62

IOS-nRF-Edge-Impulse

Connect to a Thing:53, collect sensor data over Bluetooth Low Energy and create your machine learning applications.
Swift
6
star
63

Android-Memfault-Library

An Android library for sending heap dumps to the Memfault cloud.
Kotlin
6
star
64

pc-nrfconnect-cellularmonitor

TypeScript
5
star
65

modemtalk

[end-of-life] library to interface with the nRF9160 modem
JavaScript
5
star
66

Android-Gradle-Plugins

Kotlin
5
star
67

pc-nrfconnect-docs

Developer documentation for nRF Connect for Desktop. Read them at https://NordicSemiconductor.github.io/pc-nrfconnect-docs/
HTML
5
star
68

IOS-nRF-Wi-Fi-Provisioner

A Swift library and app for provisioning Nordic Wi-Fi devices to a network.
Swift
5
star
69

pc-nrfconnect-serial-terminal

Terminal emulator for serial port connections
TypeScript
5
star
70

asset-tracker-cloud-app-js

The nRF Asset Tracker Web Application is a reference single-page application (SPA) developed using create-react-app in TypeScript.
TypeScript
5
star
71

piccata

Python CoAp Toolkit
Python
4
star
72

npmx-zephyr

npmx integration with Zephyr
C
4
star
73

pc-nrfconnect-tracecollector

Trace collector tool for nRF Connect for Desktop
JavaScript
4
star
74

microbit-v2-pager

C
4
star
75

cell-geolocation-helpers-js

Helper functions for the cell geolocation feature
TypeScript
4
star
76

nrf-device-lister-js

List usb, serialport and jlink devices
JavaScript
4
star
77

svada

SVD Parsing for Python
Python
3
star
78

asset-tracker-cloud-device-ui-js

Provides a user interface via a web application to interact with a simulated device for the nRF Asset Tracker.
TypeScript
3
star
79

cloud-azure-firmware-ci-runner-js

Runs firmware on a real device connected to Azure IoT hub.
TypeScript
3
star
80

at_host-hex

Compiles the AT host sample for 9161DK, 9160DK, and Thingy:91 and publishes it regularly.
3
star
81

cloud-aws-package-layered-lambdas-js

Packages lambda functions and layers for AWS lambda
TypeScript
3
star
82

NAT-TestServer

Receives NAT test messages from the NAT-TestFirmware and logs them and timeout occurances to S3
TypeScript
3
star
83

asset-tracker-cloud-firmware-azure

nRF Asset Tracker for Azure firmware.
C
3
star
84

Android-nRF-Edge-Impulse

Connect to a Thing:53, collect sensor data over Bluetooth Low Energy and create your machine learning applications.
Kotlin
3
star
85

nrfprogrammer-firmware-images

Provides a list of pre-compiled firmware images for nRF Programmer in the GitHub pages website for this repository.
TypeScript
3
star
86

npmx

Standalone drivers for Nordic PMICs
C
3
star
87

NFC-Connect

Kotlin
2
star
88

pmic-npm6001-lib

C
2
star
89

cloud-e2e-bdd-test-runner-js

Implementation of a test-runner for end-to-end tests of cloud-native applications using Gherkin features.
TypeScript
2
star
90

IOS-CoreBluetooth-Mock-Example

Sample app demonstrating migration to CoreBluetoothMock framework.
Swift
2
star
91

pc-nrfconnect-npm

TypeScript
2
star
92

cloud-device-helpers-js

Helper functions for interacting with the nRF9160 used during end-to-end tests
TypeScript
2
star
93

asset-tracker-cloud-code-style-js

Code style definitions for all nRF Asset Tracker projects.
JavaScript
1
star
94

asset-tracker-cloud-app-aws-js

The nRF Asset Tracker Web Application for AWS is a reference single-page application (SPA) developed using TypeScript.
TypeScript
1
star
95

nrfcloud-location-services-tests-js

Verifies the nRF Cloud Location Services REST API.
TypeScript
1
star
96

cloud-azure-firmware-ci-feature-runner-action

Uses @nordicsemiconductor/e2e-bdd-test-runner to run features files of a firmware.
JavaScript
1
star
97

cloud-e2e-bdd-test-runner-example-js

Example use of @nordicsemiconductor/e2e-bdd-test-runner
TypeScript
1
star
98

cloud-aws-firmware-ci-feature-runner-action

Uses @nordicsemiconductor/e2e-bdd-test-runner to run features files of a firmware.
JavaScript
1
star
99

lwm2m-types-js

TypeScript type definitions and JSON schema for the objects defined in the LwM2M Object Registry.
TypeScript
1
star
100

asset-tracker-cloud-memfault-azure-js

Memfault integration for Azure IoT Hub developed in TypeScript.
TypeScript
1
star