Adafruit nRF52840 Feather Express

Adafruit nRF52840 Feather Express

back to microcontrollers page.

Links

Adafruit nRF52840 Feather Express, VolksEEG: Rust Development On Adafruit nRF52840 Feather Express, crates.io: adafruit-nrf52840-express,

local links

GoodFET42, StarLabs StarBook,

History

2025-01-30: try to convert an example to UF2 format:

tingo@kg-starone:~/personal/projects/2025/rust/embedded/drogue-device/examples/nrf52/adafruit-feather-nrf52840/bt-mesh $ cargo objcopy --bin adafruit-nrf-feather52840-bt-mesh -- -O binary adafruit-nrf-feather52840-bt-mesh.bin
warning: skipping duplicate package `basic` found at `/home/tingo/.cargo/git/checkouts/btmesh-e14acedbce757b27/2ae1440/btmesh-nrf-softdevice/examples/nrf52840-dk/basic`
    Finished dev [optimized + debuginfo] target(s) in 0.13s

check the file

tingo@kg-starone:~/personal/projects/2025/rust/embedded/drogue-device/examples/nrf52/adafruit-feather-nrf52840/bt-mesh $ file *bin
adafruit-nrf-feather52840-bt-mesh.bin: ARM Cortex-M firmware, initial SP at 0x20040000, reset at 0x00027100, NMI at 0x000521b0, HardFault at 0x00052e86, SVCall at 0x000521b0, PendSV at 0x000521b0

check memory.x

tingo@kg-starone:~/personal/projects/2025/rust/embedded/drogue-device/examples/nrf52/adafruit-feather-nrf52840/bt-mesh $ more memory.x 
MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  MBR                               : ORIGIN = 0x00000000, LENGTH = 4K
  SOFTDEVICE                        : ORIGIN = 0x00001000, LENGTH = 155648
  FLASH                             : ORIGIN = 0x00027000, LENGTH = 256K
  BOOTLOADER                        : ORIGIN = 0x000f8000, LENGTH = 24K
  BOOTLOADER_STATE                  : ORIGIN = 0x000fe000, LENGTH = 4K
  STORAGE                           : ORIGIN = 0x000ff000, LENGTH = 4K
  RAM                               : ORIGIN = 0x2000c698, LENGTH = 211304

  /* DFU is stored in external flash */
  DFU                               : ORIGIN = 0x00000000, LENGTH = 266240
}

__bootloader_state_start = ORIGIN(BOOTLOADER_STATE);
__bootloader_state_end = ORIGIN(BOOTLOADER_STATE) + LENGTH(BOOTLOADER_STATE);

__bootloader_dfu_start = ORIGIN(DFU);
__bootloader_dfu_end = ORIGIN(DFU) + LENGTH(DFU);

__storage = ORIGIN(STORAGE);

uf2conv

tingo@kg-starone:~/personal/projects/2025/rust/embedded/drogue-device/examples/nrf52/adafruit-feather-nrf52840/bt-mesh $ uf2conv adafruit-nrf-feather52840-bt-mesh.bin --base 0x00027000 --output adafruit-nrf-feather52840-bt-mesh.uf2

check file

tingo@kg-starone:~/personal/projects/2025/rust/embedded/drogue-device/examples/nrf52/adafruit-feather-nrf52840/bt-mesh $ file *uf2
adafruit-nrf-feather52840-bt-mesh.uf2: UF2 firmware image, file size 00000000, address 0x027000, 721 total blocks

2025-01-30: double press reset button, and it shows up as a usb drive (UF2):

root@kg-starone:~ # ls /media/FTHR840BOOT
CURRENT.UF2 INDEX.HTM   INFO_UF2.TXT

check bootloader version

root@kg-starone:~ # cat /media/FTHR840BOOT/INFO_UF2.TXT
UF2 Bootloader 0.8.3-6-gf60ed7c lib/nrfx (v2.0.0) lib/tinyusb (0.12.0-145-g9775e7691) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: Adafruit Feather nRF52840 Express
Board-ID: nRF52840-Feather-revE
Date: May  9 2024
SoftDevice: S140 6.1.1

2025-01-30: sb - connected to my FreeBSD laptop, usbconfig says

root@kg-starone:~ # usbconfig -d ugen0.6
ugen0.6: <Adafruit Industries Feather nRF52840 Express> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

device description

root@kg-starone:~ # usbconfig -d ugen0.6 dump_device_desc
ugen0.6: <Adafruit Industries Feather nRF52840 Express> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002 
  bDeviceProtocol = 0x0001 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x239a 
  idProduct = 0x0029 
  bcdDevice = 0x0100 
  iManufacturer = 0x0001  <Adafruit Industries>
  iProduct = 0x0002  <Feather nRF52840 Express>
  iSerialNumber = 0x0003  <B1CBAAF19D5D25DE>
  bNumConfigurations = 0x0001 

2025-01-30: I created this page.