nRF52840 Nordic Semiconductor (Part 003) Flash Memory Migration from nRF52832

There are two common nRF "Mini" development boards available namely :-

The nRF52840 and nRF52832

  NRF52832 NRF52840
Processor ARM_ Cortex_-M4 32-bit processor with FPU, 64 MHz 32-bit ARM_ Cortex_-M4F @ 64 MHz
RAM 32/ 64 KB 256 KB
Flash 256/ 512 KB 1 MB
NFC YES (For pairing) YES (For pairing)
Package 6×5 mm QFN-48/ 3.0 x3.2 mm WL-CSP 7×7 mm AQFN-73
Operating channel -40 -85 C -40 -85 C
TX power (Max) 4dBm 8dBm
RX sensitivity -96 dBm @ 1Mbps for BT 4.2 -103 dBm @125 Kbps
    -99 dBm @ 500 Kbps
    -96 dBm @ 1Mbps
    -92 dBm @ 2Mbps for BT 5.0 .
Support data rate 1Mbps/ 2Mbps for BLE and 2.4 GHz 125Kbps / 500Kbps / 1 Mbps / 2 Mbps for BLE
    250 Kbps for 802.15.4
    1Mbps / 2Mbps for 2.4GHz
TX current 7.5 m A @4dBm DC-DC 13.6 m A @ 8 dBm DC- DC/ 3V
  5.3 m A @0dBm DC-DC 7.3 m A @ 4 dBm DC-DC / 3V
    5.3 m A @ 0 dBm DC-DC/ 3 V
RX current 9.7 m A @ 3V DC-DC 5.4 m A @ 3V DC-DC
Sleep current 0.3 _ A @system off 0.3 _ A @system off
Serial interface 2x I2C master/slave 2x I2C master/slave
  3x SPI master/slave 4x SPI master/slave
  1x UART CTS/ RTS 1x QSPI
  1x I2S 2x UART CTS/ RTS
  1x PDM 1x I2S
  1x QDEC 1x PDM
    1x QDEC
Supply voltage 1.7 -3.6 V 1.7 _ 5.5 V

Most of the examples in the Nordic SDK are based on the nRF52832... and only a handful for the nRF52840.

Caution :- If you are using the Nordic Connect App to program the devises over USB Bootloader....beware...

If you try to compile an nRF52832 example and hope its a simple case of programming the nRF52840 with the hex file generated then think again.

You have to alter some options in the Segger Studio :-

Firstly You have to tell it to set up the environment for the nRF52840 :-

Be sure to select the "Common" pull down section....this will ensure that any changes you make will be applied to the Debug & Release settings....as in the wonderment of Nordic mentality they though it a good idea to separate the two...

Set Preprocessor Definitions
APP_TIMER_V2

APP_TIMER_V2_RTC1_ENABLED

BOARD_PCA10059

CONFIG_GPIO_AS_PINRESET

FLOAT_ABI_HARD

INITIALIZE_USER_SECTIONS

NO_VTOR_CONFIG

NRF52840_XXAA


And then because of the differing Memory allocations (Flash size etcetc) to following needs to be updated, these values are working for me for the PWM example (coming soon to MRL studios near you).

Be sure that the Section Placement Macros and the Memory Segments are matching (I spent a whole week wasting time on this one, as its not mentioned in the official nRF52832>nRF52840 conversion tutorial)

Memory Segments
FLASH RX 0x27000 0x100000;RAM1 RWX 0x20000008 0x40000
Section Placement Macros
FLASH_START=0x27000

FLASH_SIZE=0x100000

RAM_START=0x20000008

RAM_SIZE=0x40000

FLASH_PH_START=0x1000

FLASH_PH_SIZE=0x100000

RAM_PH_START=0x20000000

RAM_PH_SIZE=0x40000

With these setting the Program will end up sitting at memory location 0x27000.