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

which connectivity firmware to be used for nRF52840 DK ?

Hi,

this is my first time trying to use nrf connectivity tools, and my setup is a bit strage (and I have no clean DK setup to compare with:-(

I have to update firmware for a nRF52832 device via BLE and I'd like to use a custom nRF52840 board as connectivity device/tool.

the design of this custom board is said to be very close to the nRF52840 DK,
and actually the nRF-Sniffer-for-802.15.4/nrf802154_sniffer/nrf802154_sniffer.hex firmware works just fine (via USB).
I've tried both sd_api_v6/connectivity_4.1.1_usb_with_s140_6.1.1.hex and sd_api_v5/connectivity_4.1.1_usb_with_s132_5.1.0.hex from https://github.com/NordicSemiconductor/pc-ble-driver.git branch release/4.1-compiled-connectivity

the fw updater starts, but very soon I get an error

pc_ble_driver_py.exceptions.NordicSemiException: Failed to ble_gap_connect. Error code: NRF_ERROR_SD_RPC_SEND

and the nRF52840 crashes -- the nrf then  shows up as new usb device in kernel log,
changing device name e.g. from ttyACM2 to ttyACM3 as ttyACM2 is still open and busy with the updater.

here is the full communication between python update script and usb nrf52840 connectivity device from strace in linux (Ubuntu 18.04)

O20.7367:18:29:45.030972 ioctl(6, SNDCTL_TMR_START or TCSETS, {B1000000 -opost -isig -icanon -echo ...}) = 0
O20.7367:18:29:45.031412 ioctl(6, TCGETS, {B1000000 -opost -isig -icanon -echo ...}) = 0
O20.7367:18:29:45.233026 ioctl(6, FIONBIO, [1]) = 0
O20.7367:18:29:45.233166 readv(6, [{iov_base="\xc0\x00\x2f\x00\xd1\x01\x7e\xc0", iov_len=1024}], 1) = 8
O20.7415:18:29:45.234981 writev(6, [{iov_base="\xc0\x00\x05\x00\xfb\xc0", iov_len=6}], 1) = 6
O20.7415:18:29:45.536734 writev(6, [{iov_base="\xc0\x00\x2f\x00\xd1\x01\x7e\xc0", iov_len=8}], 1) = 8
O20.7416:18:29:45.537413 readv(6, [{iov_base="\xc0\x00\x2f\x00\xd1\x02\x7d\xc0", iov_len=1024}], 1) = 8
O20.7415:18:29:45.538622 writev(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x03\xfc\x11\xc0", iov_len=9}], 1) = 9
O20.7415:18:29:45.839574 writev(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x03\xfc\x11\xc0", iov_len=9}], 1) = 9
O20.7416:18:29:45.937323 readv(6, [{iov_base="\xc0\x00\x2f\x00\xd1\x01\x7e\xc0", iov_len=1024}], 1) = 8
O20.7416:18:29:45.937653 writev(6, [{iov_base="\xc0\x00\x2f\x00\xd1\x02\x7d\xc0", iov_len=8}], 1) = 8
O20.7415:18:29:46.140990 writev(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x03\xfc\x11\xc0", iov_len=9}], 1) = 9
O20.7416:18:29:46.142084 readv(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x03\xfc\x11\xc0", iov_len=1024}], 1) = 9
O20.7416:18:29:46.142490 writev(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x04\x7b\x11\xc0", iov_len=9}], 1) = 9
O20.7415:18:29:46.442321 writev(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x03\xfc\x11\xc0", iov_len=9}], 1) = 9
O20.7416:18:29:46.442665 readv(6, [{iov_base="\xc0\x00\x3f\x00\xc1\x04\x7b\x11\xc0", iov_len=1024}], 1) = 9
O20.7367:18:29:46.443383 writev(6, [{iov_base="\xc0\xdb\xdc\xae\x00\x92\x00\x69\x23\x00\x00\x00\x01\x01\x9e\x00\xf2\x46\xc0", iov_len=19}], 1) = 19
O20.7416:18:29:46.443754 readv(6, [{iov_base="\xc0\x08\x00\x00\xf8\xc0", iov_len=1024}], 1) = 6
O20.7416:18:29:46.444002 readv(6, [{iov_base="\xc0\xc8\x6e\x00\xca\x01\x69\x00\x00\x00\x00\x55\xc7\xc0", iov_len=1024}], 1) = 14
O20.7416:18:29:46.444046 writev(6, [{iov_base="\xc0\x08\x00\x00\xf8\xc0", iov_len=6}], 1) = 6
O20.7367:18:29:46.444276 writev(6, [{iov_base="\xc0\xc9\x2e\x00\x09\x00\x60\xe9\xcd\xc0", iov_len=10}], 1) = 10
O20.7416:18:29:46.444620 readv(6, [{iov_base="\xc0\x10\x00\x00\xf0\xc0", iov_len=1024}], 1) = 6
O20.7416:18:29:46.445255 readv(6, [{iov_base="\xc0\xd1\x6e\x00\xc1\x01\x60\x00\x00\x00\x00\x9e\x95\xc0", iov_len=1024}], 1) = 14
O20.7416:18:29:46.445298 writev(6, [{iov_base="\xc0\x10\x00\x00\xf0\xc0", iov_len=6}], 1) = 6
O20.7367:18:29:46.445822 writev(6, [{iov_base="\xc0\xd2\xce\x01\x5f\x00\x8c\x01\x02\xbe\x87\x74\xd4\x01\xf6\x01\x01\x40\x01\xf0\x00\x0a\x00\x01\x0c\x00\x18\x00\x00\x00\x90\x01\x01\x5a\xad\xc0", iov_len=36}], 1) = 36
O20.7416:18:29:46.446299 readv(6, [{iov_base="\xc0\x18\x00\x00\xe8\xc0", iov_len=1024}], 1) = 6
O20.7416:18:29:46.682754 readv(6, [{iov_base="", iov_len=1024}], 1) = 0

any ideas what's going wrong?
is there any newer connectivity fw hex file for nrf52840?

thanks for any help!

Harald

  • Hello,

    What tool do you use to perform the DFU? I understand that you have a custom board that you intend to use as the connectivity device, but what tool do you use? nrfutil? nRF Connect for Desktop?

    I would suggest that you try to use nrfutil. As long as you use the USB peripheral, it would not require any custom UART pins setup or anything like that.

    If you are using nrfutil, then pc-ble-driver-py will be used.

    When you are using an nRF Dongle, and use the command "nrfutil dfu ble", together with the flag "-f", then nrfutil will try to flash the dongle with the nrfutil connectivity FW.

    This will not happen in your case, because it will not be recognized as the dongle, but you can use the firmware which is found in:

    python38\lib\site-packages\pc_ble_driver_py\hex\sd_api_v5\ (if you installed it via Python pip (pip install nrfutil). 

    In that folder you will find a range of files, but you can try the file "connectivity_4.1.2_usb_with_s132_5.1.0_hex" file. After flashing this, and connecting the USB peripheral of the nRF, then you should be able to use the device for nrfutil. 

    If that doesn't work, does your custom board have the LFXTAL, or do you use the RC Oscillator?

    Best regards,

    Edvin

Related