202 lines
7.5 KiB
Markdown
202 lines
7.5 KiB
Markdown
# Setup
|
|
|
|
The `feather52840` board is currently based on the `PCA10056` development
|
|
board from Nordic Semiconductors, since commercial modules are not yet
|
|
available for the nRF52840.
|
|
|
|
The difference between the `pca10056` and `feather52840` board support
|
|
packages is that no bootloader is present on the `pca10056` (a HW debugger
|
|
like a Segger J-Link is required to flash firmware images), whereas the
|
|
`feather52840` package uses a serial bootloader, with a slightly different
|
|
flash layout to account for the bootloader's presence.
|
|
|
|
Both targets run on the same hardware and assume the same pinouts.
|
|
|
|
The `feather52840` board support package will be updated at a later date
|
|
to reflect any pin changes in the final Feather form-factor HW.
|
|
|
|
## Installing CircuitPython submodules
|
|
|
|
Before you can build, you will need to run the following commands once, which
|
|
will install the submodules that are part of the CircuitPython ecosystem, and
|
|
build the `mpy-cross` tool:
|
|
|
|
```
|
|
$ cd circuitpython
|
|
$ git submodule update --init
|
|
$ make -C mpy-cross
|
|
```
|
|
|
|
You then need to download the SD and Nordic SDK files via:
|
|
|
|
> This script relies on `wget`, which must be available from the command line.
|
|
|
|
```
|
|
$ cd ports/nrf
|
|
$ ./drivers/bluetooth/download_ble_stack.sh
|
|
```
|
|
|
|
## Installing the Serial Bootloader
|
|
|
|
The Adafruit nRF52840 Feather uses a serial bootloader that allows you to
|
|
update the core CircuitPython firmware and internal file system contents
|
|
using only a serial connection.
|
|
|
|
On empty devices, the serial bootloader will need to be flashed once using a
|
|
HW debugger such as a Segger J-Link before the serial updater (`nrfutil`) can
|
|
be used.
|
|
|
|
### Install `nrfjprog`
|
|
|
|
Before you can install the bootloader, you will first need to install the
|
|
`nrfjprog` tool from Nordic Semiconductors for your operating system. The
|
|
binary files can be downloaded via the following links:
|
|
|
|
- [nRF5x toolset tar for Linux 32-bit v9.7.2](http://www.nordicsemi.com/eng/nordic/Products/nRF52832/nRF5x-Command-Line-Tools-Linux32/52619)
|
|
- [nRF5x toolset tar for Linux 64-bit v9.7.2](http://www.nordicsemi.com/eng/nordic/Products/nRF52832/nRF5x-Command-Line-Tools-Linux64/51388)
|
|
- [nRF5x toolset tar for OSX v9.7.2](http://www.nordicsemi.com/eng/nordic/Products/nRF52832/nRF5x-Command-Line-Tools-OSX/53406)
|
|
- [nRF5x toolset installer for Windows v9.7.2](http://www.nordicsemi.com/eng/nordic/Products/nRF52832/nRF5x-Command-Line-Tools-Win32/48768)
|
|
|
|
You will then need to add the `nrfjprog` folder to your system `PATH` variable
|
|
so that it is available from the command line. The exact process for this is
|
|
OS specific, but on a POSIX type system like OS X or Linux, you can
|
|
temporarily add the location to your `PATH` environment variables as follows:
|
|
|
|
```
|
|
$ export PATH=$PATH:YOURPATHHERE/nRF5x-Command-Line-Tools_9_7_2_OSX/nrfjprog/
|
|
```
|
|
|
|
You can test this by running the following command:
|
|
|
|
```
|
|
$ nrfjprog --version
|
|
nrfjprog version: 9.7.2
|
|
JLinkARM.dll version: 6.20f
|
|
```
|
|
|
|
### Flash the Bootloader with `nrfjprog`
|
|
|
|
> This operation only needs to be done once, and only on boards that don't
|
|
already have the serial bootloader installed.
|
|
|
|
Once `nrfjprog` is installed and available in `PATH` you can flash your
|
|
board with the serial bootloader via the following command:
|
|
|
|
```
|
|
make SD=s140 BOARD=feather52840 boot-flash
|
|
```
|
|
|
|
This should give you the following (or very similar) output, and you will see
|
|
a DFU blinky pattern on one of the board LEDs:
|
|
|
|
```
|
|
$ make SD=s140 BOARD=feather52840 boot-flash
|
|
Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity.
|
|
nrfjprog --program boards/feather52840/bootloader/feather52840_bootloader_6.0.0_s140_single.hex -f nrf52 --chiperase --reset
|
|
Parsing hex file.
|
|
Erasing user available code and UICR flash areas.
|
|
Applying system reset.
|
|
Checking that the area to write is not protected.
|
|
Programing device.
|
|
Applying system reset.
|
|
Run.
|
|
```
|
|
|
|
From this point onward, you can now use a simple serial port for firmware
|
|
updates.
|
|
|
|
### IMPORTANT: Disable Mass Storage on PCA10056 J-Link
|
|
|
|
The J-Link firmware on the PCA10056 implement USB Mass Storage, but this
|
|
causes a known conflict with reliable USB CDC serial port communication. In
|
|
order to use the serial bootloader, **you must disable MSD support on the
|
|
Segger J-Link**!
|
|
|
|
To disable mass storage support, run the `JLinkExe` (or equivalent) command,
|
|
and send `MSDDisable`. (You can re-enable MSD support via `MSDEnable`):
|
|
|
|
```
|
|
$ JLinkExe
|
|
SEGGER J-Link Commander V6.20f (Compiled Oct 13 2017 17:20:01)
|
|
DLL version V6.20f, compiled Oct 13 2017 17:19:52
|
|
|
|
Connecting to J-Link via USB...O.K.
|
|
Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jul 24 2017 17:30:12
|
|
Hardware version: V1.00
|
|
S/N: 683947110
|
|
VTref = 3.300V
|
|
|
|
|
|
Type "connect" to establish a target connection, '?' for help
|
|
J-Link>MSDDisable
|
|
Probe configured successfully.
|
|
J-Link>exit
|
|
```
|
|
|
|
## Building and Flashing CircuitPython
|
|
|
|
### Installing `nrfutil`
|
|
|
|
If you haven't installed the required command-line tool yet, go to the
|
|
`/libs/nrfutil` folder (where nrfutil 0.5.2b is installed as a sub-module)
|
|
and run the following commands:
|
|
|
|
> If you get a 'sudo: pip: command not found' error running 'sudo pip install',
|
|
you can install pip via 'sudo easy_install pip'
|
|
|
|
```
|
|
$ cd ../../lib/nrfutil
|
|
$ sudo pip install -r requirements.txt
|
|
$ sudo python setup.py install
|
|
```
|
|
|
|
#### Changes to `nrfutil` in 0.5.2b
|
|
|
|
**IMPORTANT**: Make sure that you have version **0.5.2b**, since a small
|
|
change was required to `dfu_transport_serial.py` to account for the
|
|
increased minimum flash erase time on the nRF52840 compared to the earlier
|
|
nRF52832!
|
|
|
|
You can also manually change the file with the following new values (lines
|
|
67-68), and reinstall the utility via `sudo python setup.py install`:
|
|
|
|
```
|
|
FLASH_PAGE_ERASE_MAX_TIME = 0.1 # Worst time to erase a page 100 ms
|
|
FLASH_PAGE_ERASE_MIN_TIME = 0.09 # Best time to erase a page 90 ms
|
|
```
|
|
|
|
### Flashing CircuitPython
|
|
|
|
With the serial bootloader present on your board, you first need to force your
|
|
board into DFU mode by holding down BUTTON1 and RESETTING the board (with
|
|
BUTTON1 still pressed as you come out of reset).
|
|
|
|
This will give you a **fast blinky DFU pattern** to indicate you are in DFU
|
|
mode.
|
|
|
|
At this point, you can build and flash a CircuitPython binary via the following
|
|
command:
|
|
|
|
```
|
|
$ make V=1 SD=s140 SERIAL=/dev/tty.usbmodem1411 BOARD=feather52840 dfu-gen dfu-flash
|
|
```
|
|
|
|
This should give you the following results:
|
|
|
|
```
|
|
$ make V=1 SD=s140 SERIAL=/dev/tty.usbmodem1411 BOARD=feather52840 dfu-gen dfu-flash
|
|
nrfutil dfu genpkg --sd-req 0xFFFE --dev-type 0x0052 --application build-feather52840-s140/firmware.hex build-feather52840-s140/dfu-package.zip
|
|
Zip created at build-feather52840-s140/dfu-package.zip
|
|
nrfutil --verbose dfu serial --package build-feather52840-s140/dfu-package.zip -p /dev/tty.usbmodem1411 -b 115200
|
|
Upgrading target on /dev/tty.usbmodem1411 with DFU package /Users/kevintownsend/Dropbox/microBuilder/Code/CircuitPython/circuitpython-mb/ports/nrf/build-feather52840-s140/dfu-package.zip. Flow control is disabled.
|
|
Starting DFU upgrade of type 4, SoftDevice size: 0, bootloader size: 0, application size: 195252
|
|
Sending DFU start packet
|
|
Sending DFU init packet
|
|
Sending firmware file
|
|
################################################################################################################################################################################################################################################################################################################################################################################################
|
|
Activating new firmware
|
|
|
|
DFU upgrade took 41.6610329151s
|
|
Device programmed.
|
|
```
|