-
Notifications
You must be signed in to change notification settings - Fork 2.1k
boards: add support for nrf52840-dongle #13146
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| MODULE = board | ||
|
|
||
| include $(RIOTBASE)/Makefile.base |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| ifneq (,$(filter saul_default,$(USEMODULE))) | ||
| USEMODULE += saul_gpio | ||
| endif | ||
|
|
||
| ifeq (,$(filter-out stdio_cdc_acm,$(filter stdio_% slipdev_stdio,$(USEMODULE)))) | ||
| # Use stdio_cdc_acm only if no other stdio is requested explicitly. | ||
| USEMODULE += stdio_cdc_acm | ||
| # This does not *really* hinge on the choice of stdio, but this ensures | ||
| # compatibility with the test suite that uses stdio_null and would conflict | ||
| # with bootloader_nrfutil. | ||
| # (Having the feature in is generally a good thing because as an indicator | ||
| # that it the resulting program is meant to be flashed using nrfutil). | ||
| FEATURES_REQUIRED += bootloader_nrfutil | ||
| endif | ||
| # ... and fall back to the UART-based stdio | ||
|
|
||
| include $(RIOTBOARD)/common/nrf52/Makefile.dep |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| CPU_MODEL = nrf52840xxaa | ||
|
|
||
| # Put defined MCU peripherals here (in alphabetical order) | ||
| FEATURES_PROVIDED += periph_uart | ||
| FEATURES_PROVIDED += periph_usbdev | ||
|
benpicco marked this conversation as resolved.
|
||
|
|
||
| # Various other features (if any) | ||
| FEATURES_PROVIDED += radio_nrf802154 | ||
|
benpicco marked this conversation as resolved.
|
||
| FEATURES_PROVIDED += bootloader_nrfutil | ||
|
|
||
| include $(RIOTBOARD)/common/nrf52/Makefile.features | ||
|
benpicco marked this conversation as resolved.
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| # This board uses the vendor's serial bootloader | ||
|
|
||
| PROGRAMMER ?= nrfutil | ||
|
|
||
| ifeq (nrfutil,$(PROGRAMMER)) | ||
|
|
||
|
benpicco marked this conversation as resolved.
|
||
| # Using nrfutil implies using the Nordic bootloader described at | ||
| # <https://devzone.nordicsemi.com/nordic/short-range-guides/b/getting-started/posts/nrf52840-dongle-programming-tutorial>. | ||
| # | ||
| # It has a static MBR at the first 4k, and an ample 128k Open USB Bootloader at | ||
| # the end, leaving 892k for the application. This overwrites any SoftDevice, | ||
| # but that's what the minimal working example for the dongle does as well. | ||
|
|
||
| ROM_OFFSET = 0x1000 | ||
| ROM_LEN = 0xdf000 | ||
|
|
||
| FLASHFILE = $(HEXFILE) | ||
| FLASHDEPS += $(HEXFILE).zip | ||
| FLASHER = nrfutil | ||
| FFLAGS = dfu usb-serial --port=${PORT} --package=$(HEXFILE).zip | ||
| endif | ||
|
|
||
| %.hex.zip: %.hex | ||
|
aabadie marked this conversation as resolved.
|
||
| $(call check_cmd,$(FLASHER),Flash program and preparation tool) | ||
| $(FLASHER) pkg generate --hw-version 52 --sd-req 0x00 --application-version 1 --application $< $@ | ||
|
|
||
| include $(RIOTBOARD)/common/nrf52/Makefile.include | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| /* | ||
| * Copyright (C) 2019 Christian Amsüss <[email protected]> | ||
| * | ||
| * This file is subject to the terms and conditions of the GNU Lesser | ||
| * General Public License v2.1. See the file LICENSE in the top level | ||
| * directory for more details. | ||
| */ | ||
|
|
||
| /** | ||
| * @ingroup boards_nrf52840dongle | ||
| * @{ | ||
| * | ||
| * @file | ||
| * @brief Board initialization for the nRF52840-dongle | ||
| * | ||
| * @author Christian Amsüss <[email protected]> | ||
| * | ||
| * @} | ||
| */ | ||
|
|
||
| #include "cpu.h" | ||
| #include "board.h" | ||
|
|
||
| #include "periph/gpio.h" | ||
|
|
||
| void board_init(void) | ||
| { | ||
| /* initialize the board's single LED */ | ||
| gpio_init(LED0_PIN, GPIO_OUT); | ||
| gpio_set(LED0_PIN); | ||
|
|
||
|
benpicco marked this conversation as resolved.
|
||
| /* initialize the board's RGB LED */ | ||
| gpio_init(LED1_PIN, GPIO_OUT); | ||
| gpio_set(LED1_PIN); | ||
| gpio_init(LED2_PIN, GPIO_OUT); | ||
| gpio_set(LED2_PIN); | ||
| gpio_init(LED3_PIN, GPIO_OUT); | ||
| gpio_set(LED3_PIN); | ||
|
|
||
| /* initialize the CPU */ | ||
| cpu_init(); | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| /** | ||
| @defgroup boards_nrf52840dongle nRF52840-Dongle | ||
| @ingroup boards | ||
| @brief Support for the nRF52840-Dongle | ||
|
|
||
| ### General information | ||
|
|
||
| The nRF52840-Dongle is a bare USB-stick shaped device that houses barely | ||
| anything than the nRF52840 itself, which offers BLE and 802.15.4 and USB | ||
| connectivity. | ||
|
|
||
| Unlike similar sticks (like the @ref boards_nrf52840-mdk), it features no | ||
| dedicated programmer hardware but relies on direct USB communication with a | ||
| built-in bootloader. | ||
|
|
||
| The board features two LEDs (LD1: green, LD2: RGB), a user (SW1) and a | ||
| reset button as well as 15 configurable external pins. | ||
|
|
||
| ### Links | ||
|
|
||
| - [nRF52840 web page](https://www.nordicsemi.com/?sc_itemid=%7BCDCCA013-FE4C-4655-B20C-1557AB6568C9%7D) | ||
| - [documentation and hardware description](https://infocenter.nordicsemi.com/topic/ug_nrf52840_dongle/UG/nrf52840_Dongle/intro.html?cp=3_0_5) | ||
|
|
||
| ### Flash the board | ||
|
|
||
| The board is flashed using its on-board boot loader; the | ||
| [nrfutil](https://github.com/NordicSemiconductor/pc-nrfutil) program needs to | ||
| be installed. That can turn the binary into a suitable zip file and send it to the | ||
| bootloader. | ||
|
|
||
| The process is automated in the usual `make flash` target. For that process to | ||
| complete, you need to enter the bootloader manually by pressing the board's | ||
| reset button. Readiness of the bootloader is indicated by LD2 pulsing in red. | ||
|
benpicco marked this conversation as resolved.
|
||
|
|
||
| #### nrfutil installation | ||
|
|
||
| On systems with Python 2 available, `pip install nrfutil` works. | ||
|
|
||
| On systems with Python 3, a recent version of pip is required to install all dependencies; | ||
| you may need to run `pip install --upgrade pip` before being able to run `pip install nrfutil` successfully. | ||
|
|
||
| ### Accessing STDIO | ||
|
|
||
| The usual way to obtain a console on this board is using an emulated USB serial port (CDC-ACM). | ||
| This is available automatically using the `stdio_cdc_acm` module, | ||
| unless any other stdio module is enabled. | ||
|
|
||
| On Linux systems with ModemManager < 1.10 installed, | ||
| `make term` will, in some setups, fail for a few seconds after the device has come up. | ||
| This is [fixed in its 1.12.4 version](https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/164), | ||
| but should not be more than a short annoyance in earlier versions. | ||
|
|
||
| To ease debugging, | ||
| pins 0.13 and 0.15 are configured as RX and TX, respectively. | ||
| They provide stdio if no CDC-ACM is disabled, | ||
| and can be used as a custom UART otherwise. | ||
|
|
||
| */ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,96 @@ | ||
| /* | ||
| * Copyright (C) 2019 Christian Amsüss <[email protected]> | ||
| * | ||
| * This file is subject to the terms and conditions of the GNU Lesser | ||
| * General Public License v2.1. See the file LICENSE in the top level | ||
| * directory for more details. | ||
| */ | ||
|
|
||
| /** | ||
| * @ingroup boards_nrf52840dongle | ||
| * @{ | ||
| * | ||
| * @file | ||
| * @brief Board specific configuration for the nRF52840-Dongle | ||
| * | ||
| * @author Christian Amsüss <[email protected]> | ||
| */ | ||
|
|
||
| #ifndef BOARD_H | ||
| #define BOARD_H | ||
|
|
||
| #include "cpu.h" | ||
| #include "board_common.h" | ||
| #include "periph/gpio.h" | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * @name LED pin configuration | ||
| * @{ | ||
| */ | ||
| /** @brief The LED labelled LD1 */ | ||
| #define LED0_PIN GPIO_PIN(0, 6) | ||
|
|
||
|
benpicco marked this conversation as resolved.
|
||
| /** @brief The red channel of the LED labelled LD2 */ | ||
| #define LED1_PIN GPIO_PIN(0, 8) | ||
| /** @brief The green channel of the LED labelled LD2 */ | ||
| #define LED2_PIN GPIO_PIN(1, 9) | ||
| /** @brief The blue channel of the LED labelled LD2 */ | ||
| #define LED3_PIN GPIO_PIN(0, 12) | ||
|
|
||
| /** @} */ | ||
|
|
||
| /** | ||
| * @name LED access macros | ||
| * @{ | ||
| */ | ||
|
|
||
| /** Enable LD1 */ | ||
| #define LED0_ON gpio_clear(LED0_PIN) | ||
|
benpicco marked this conversation as resolved.
|
||
| /** Disable LD1 */ | ||
| #define LED0_OFF gpio_set(LED0_PIN) | ||
| /** Toggle LD1 */ | ||
| #define LED0_TOGGLE gpio_toggle(LED0_PIN) | ||
|
|
||
| /** Enable LD2's red channel */ | ||
| #define LED1_ON gpio_clear(LED1_PIN) | ||
| /** Disable LD2's red channel */ | ||
| #define LED1_OFF gpio_set(LED1_PIN) | ||
| /** Toggle LD2's red channel */ | ||
| #define LED1_TOGGLE gpio_toggle(LED1_PIN) | ||
|
|
||
| /** Enable LD2's green channel */ | ||
| #define LED2_ON gpio_clear(LED2_PIN) | ||
| /** Disable LD2's green channel */ | ||
| #define LED2_OFF gpio_set(LED2_PIN) | ||
| /** Toggle LD2's green channel */ | ||
| #define LED2_TOGGLE gpio_toggle(LED2_PIN) | ||
|
|
||
| /** Enable LD2's blue channel */ | ||
| #define LED3_ON gpio_clear(LED3_PIN) | ||
| /** Disable LD2's blue channel */ | ||
| #define LED3_OFF gpio_set(LED3_PIN) | ||
| /** Toggle LD2's blue channel */ | ||
| #define LED3_TOGGLE gpio_toggle(LED3_PIN) | ||
|
|
||
| /** @} */ | ||
|
|
||
| /** | ||
| * @name Button pin configuration | ||
| * @{ | ||
| */ | ||
| /** @brief The button labelled SW1 */ | ||
| #define BTN0_PIN GPIO_PIN(1, 6) | ||
| /** @brief The GPIO pin mode of the button labelled SW1 */ | ||
| #define BTN0_MODE GPIO_IN_PU | ||
| /** @} */ | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* BOARD_H */ | ||
| /** @} */ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| /* | ||
| * Copyright (C) 2019 Christian Amsüss <[email protected]> | ||
| * | ||
| * This file is subject to the terms and conditions of the GNU Lesser | ||
| * General Public License v2.1. See the file LICENSE in the top level | ||
| * directory for more details. | ||
| */ | ||
|
|
||
| /** | ||
| * @ingroup boards_nrf52840dongle | ||
| * @{ | ||
| * | ||
| * @file | ||
| * @brief Configuration of SAUL mapped GPIO pins | ||
| * | ||
| * @author Christian Amsüss <[email protected]> | ||
| */ | ||
|
|
||
| #ifndef GPIO_PARAMS_H | ||
| #define GPIO_PARAMS_H | ||
|
|
||
| #include "board.h" | ||
| #include "saul/periph.h" | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * @brief LED and button configuration for SAUL | ||
| */ | ||
| static const saul_gpio_params_t saul_gpio_params[] = | ||
| { | ||
| { | ||
| .name = "LD 1", | ||
| .pin = LED0_PIN, | ||
| .mode = GPIO_OUT, | ||
| .flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR), | ||
| }, | ||
| { | ||
| .name = "LD 2 Red", | ||
| .pin = LED1_PIN, | ||
| .mode = GPIO_OUT, | ||
| .flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR), | ||
| }, | ||
| { | ||
| .name = "LD 2 Green", | ||
| .pin = LED2_PIN, | ||
| .mode = GPIO_OUT, | ||
| .flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR), | ||
| }, | ||
| { | ||
| .name = "LD 2 Blue", | ||
| .pin = LED3_PIN, | ||
| .mode = GPIO_OUT, | ||
| .flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR), | ||
| }, | ||
| { | ||
| .name = "SW 1", | ||
| .pin = BTN0_PIN, | ||
| .mode = GPIO_IN_PU, | ||
| .flags = SAUL_GPIO_INVERTED, | ||
| }, | ||
| }; | ||
|
|
||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* GPIO_PARAMS_H */ | ||
| /** @} */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| /* | ||
| * Copyright (C) 2019 Christian Amsüss <[email protected]> | ||
| * | ||
| * This file is subject to the terms and conditions of the GNU Lesser | ||
| * General Public License v2.1. See the file LICENSE in the top level | ||
| * directory for more details. | ||
| */ | ||
|
|
||
| /** | ||
| * @ingroup boards_nrf52840dongle | ||
| * @{ | ||
| * | ||
| * @file | ||
| * @brief Peripheral configuration for the nRF52840-Dongle | ||
| * | ||
| * @author Christian Amsüss <[email protected]> | ||
| * | ||
| */ | ||
|
|
||
| #ifndef PERIPH_CONF_H | ||
| #define PERIPH_CONF_H | ||
|
|
||
| #include "periph_cpu.h" | ||
| #include "cfg_clock_32_1.h" | ||
| #include "cfg_rtt_default.h" | ||
| #include "cfg_timer_default.h" | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * @name UART configuration | ||
| * | ||
| * This board does not have explicit UART pins. These are set as UART 0 to | ||
| * provide an easy serial debug port when not using (or debugging) USB. | ||
| * | ||
| * @{ | ||
| */ | ||
|
|
||
| static const uart_conf_t uart_config[] = { | ||
| { | ||
| .dev = NRF_UARTE0, | ||
| .rx_pin = GPIO_PIN(0, 13), | ||
| .tx_pin = GPIO_PIN(0, 15), | ||
| #ifdef MODULE_PERIPH_UART_HW_FC | ||
| .rts_pin = GPIO_UNDEF, | ||
| .cts_pin = GPIO_UNDEF, | ||
| #endif | ||
| .irqn = UARTE0_UART0_IRQn, | ||
| }, | ||
| }; | ||
|
|
||
| #define UART_0_ISR (isr_uart0) | ||
|
|
||
| #define UART_NUMOF ARRAY_SIZE(uart_config) | ||
| /** @} */ | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* PERIPH_CONF_H */ |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.