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

Buttonless DFU without BLE

My application is on the nRF52840 Dongle using ESB protocol, receiving data from an number of PTXs, . The device appears as an HID.

I would like to add Buttonless DFU, without adding BLE.

Can you outline the steps required to get nRF_Connect to recognize my device as capable of Buttonless DFU, and then actually triggering it?

  • Sorry for the delay -- other projects.

    Without the DFU Trigger, USBlyzer tells me this:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Connection Status Device connected
    Current Configuration 1
    Speed Full (12 Mbit/s)
    Device Address 9
    Number Of Open Pipes 2
    Device Descriptor HT4 Receiver
    Offset Field Size Value Description
    0 bLength 1 12h
    1 bDescriptorType 1 01h Device
    2 bcdUSB 2 0200h USB Spec 2.0
    4 bDeviceClass 1 00h Class info in Ifc Descriptors
    5 bDeviceSubClass 1 00h
    6 bDeviceProtocol 1 00h
    7 bMaxPacketSize0 1 40h 64 bytes
    8 idVendor 2 1915h Linksys
    10 idProduct 2 521Bh
    12 bcdDevice 2 0401h 4.01
    14 iManufacturer 1 01h "Vald Performance Pty Ltd"
    15 iProduct 1 02h "HT4 Receiver"
    16 iSerialNumber 1 03h "D2E6D7700216"
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    After adding in DFU Trigger (as above);

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Connection Status Device connected
    Current Configuration 1
    Speed Full (12 Mbit/s)
    Device Address 10
    Number Of Open Pipes 2
    Device Descriptor HT4 Receiver
    Offset Field Size Value Description
    0 bLength 1 12h
    1 bDescriptorType 1 01h Device
    2 bcdUSB 2 0200h USB Spec 2.0
    4 bDeviceClass 1 00h Class info in Ifc Descriptors
    5 bDeviceSubClass 1 00h
    6 bDeviceProtocol 1 00h
    7 bMaxPacketSize0 1 40h 64 bytes
    8 idVendor 2 1915h Linksys
    10 idProduct 2 521Bh
    12 bcdDevice 2 0401h 4.01
    14 iManufacturer 1 01h "Vald Performance Pty Ltd"
    15 iProduct 1 02h "HT4 Receiver"
    16 iSerialNumber 1 03h "D2E6D7700216"
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    nRF Connect Programmer doesn't find the DFU Trigger, and shows:

    Fullscreen
    1
    2019-08-15T23:51:33.879Z ERROR Error while probing usb device at bus.address 1.11: LIBUSB_ERROR_NOT_FOUND. Please check that a libusb-compatible kernel driver is bound to this device, see https://github.com/NordicSemiconductor/pc-nrfconnect-core/blob/master/doc/win32-usb-troubleshoot.md
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Hi,

    Sorry for the late reply, this one slipped through the cracks. I think you need to use the Nordic Semiconductor USB Vendor ID (and a USB Product ID reserved for development) for the programmer app to work. E.g. for the connectivity ser_s140_usb_hci example to actually work with the programmer app, you also need to apply this SDK15.3 patch found here. In the Device Manager it should then look like this:

    For a customer end-product you likely won't be using the programmer app, but instead use e.g. nrfutil to create a program to do the DFU.

  • Thanks -- I assumed that was the case (about the VID/PID).

    What do you mean by "SDK15.3 patch"? What exactly is in those HEX files?

  • The connectivity firmware that is used in the nRFConnect - Bluetooth Low Energy app, is the connectivity example in the SDK + this nRF5_SDK_15.3.0_connectivity.patch applied. Looking at the changes, the PID is set to 0xC00A. This is the same PID value that is used in the nrfconnect_dfu_trigger.inf driver at this link.

1 2 3