diff --git a/boards/arm/nrf52840_papyr/Kconfig b/boards/arm/nrf52840_papyr/Kconfig new file mode 100644 index 00000000000..ff62fb5f3ed --- /dev/null +++ b/boards/arm/nrf52840_papyr/Kconfig @@ -0,0 +1,14 @@ +# Kconfig - Electronut Labs Papyr board configuration +# +# Copyright (c) 2018 Electronut Labs +# +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_NRF52840_PAPYR + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + +endif # BOARD_NRF52840_PAPYR diff --git a/boards/arm/nrf52840_papyr/Kconfig.board b/boards/arm/nrf52840_papyr/Kconfig.board new file mode 100644 index 00000000000..a7d1a1fdda9 --- /dev/null +++ b/boards/arm/nrf52840_papyr/Kconfig.board @@ -0,0 +1,9 @@ +# Kconfig - Electronut Labs Papyr board configuration +# +# Copyright (c) 2018 Electronut Labs +# +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_NRF52840_PAPYR + bool "NRF52840 PAPYR" + depends on SOC_NRF52840_QIAA diff --git a/boards/arm/nrf52840_papyr/Kconfig.defconfig b/boards/arm/nrf52840_papyr/Kconfig.defconfig new file mode 100644 index 00000000000..167bb8c2628 --- /dev/null +++ b/boards/arm/nrf52840_papyr/Kconfig.defconfig @@ -0,0 +1,50 @@ +# Kconfig - Electronut Labs Papyr board configuration +# +# Copyright (c) 2018 Electronut Labs +# +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_NRF52840_PAPYR + +config BOARD + default "nrf52840_papyr" + +if USB + +config USB_NRF52840 + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +if IEEE802154 + +config IEEE802154_NRF5 + default y + +endif # IEEE802154 + +if PWM + +config PWM_0 + default y + +endif # PWM + +if I2C + +config I2C_0 + default y + +endif # I2C + +if SPI + +config SPI_1 + default y + +endif # SPI + +endif # BOARD_NRF52840_PAPYR diff --git a/boards/arm/nrf52840_papyr/board.cmake b/boards/arm/nrf52840_papyr/board.cmake new file mode 100644 index 00000000000..8dd18395070 --- /dev/null +++ b/boards/arm/nrf52840_papyr/board.cmake @@ -0,0 +1 @@ +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) diff --git a/boards/arm/nrf52840_papyr/doc/img/nrf52840_papyr.jpg b/boards/arm/nrf52840_papyr/doc/img/nrf52840_papyr.jpg new file mode 100644 index 00000000000..4d458b3c698 Binary files /dev/null and b/boards/arm/nrf52840_papyr/doc/img/nrf52840_papyr.jpg differ diff --git a/boards/arm/nrf52840_papyr/doc/nrf52840_papyr.rst b/boards/arm/nrf52840_papyr/doc/nrf52840_papyr.rst new file mode 100644 index 00000000000..32b8e79c68e --- /dev/null +++ b/boards/arm/nrf52840_papyr/doc/nrf52840_papyr.rst @@ -0,0 +1,195 @@ +.. _nrf52840_papyr: + +Electronut Labs Papyr +##################### + +Overview +******** + +Zephyr applications use the nrf52840_papyr board configuration +to run on Electronut Labs Papyr hardware. It provides +support for the Nordic Semiconductor nRF52840 ARM Cortex-M4F CPU and +the following devices: + +* :abbr:`ADC (Analog to Digital Converter)` +* CLOCK +* FLASH +* :abbr:`GPIO (General Purpose Input Output)` +* :abbr:`I2C (Inter-Integrated Circuit)` +* :abbr:`MPU (Memory Protection Unit)` +* :abbr:`NVIC (Nested Vectored Interrupt Controller)` +* :abbr:`PWM (Pulse Width Modulation)` +* RADIO (Bluetooth Low Energy and 802.15.4) +* :abbr:`RTC (nRF RTC System Clock)` +* :abbr:`SPI (Serial Peripheral Interface)` +* :abbr:`UART (Universal asynchronous receiver-transmitter)` +* :abbr:`USB (Universal Serial Bus)` +* :abbr:`WDT (Watchdog Timer)` +* COUNTER + +.. figure:: img/nrf52840_papyr.jpg + :width: 442px + :align: center + :alt: Electronut Labs Papyr + + Electronut Labs Papyr (Credit: Electronut Labs) + +More information about the board is available at https://docs.electronut.in/papyr/. + +Hardware +******** + +Papyr has two external oscillators. The frequency of +the slow clock is 32.768 kHz. The frequency of the main clock +is 32 MHz. + +Supported Features +================== + +The nrf52840_papyr board configuration supports the following +hardware features currently: + ++-----------+------------+----------------------+ +| Interface | Controller | Driver/Component | ++===========+============+======================+ +| ADC | on-chip | adc | ++-----------+------------+----------------------+ +| CLOCK | on-chip | clock_control | ++-----------+------------+----------------------+ +| FLASH | on-chip | flash | ++-----------+------------+----------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+----------------------+ +| I2C(M) | on-chip | i2c | ++-----------+------------+----------------------+ +| MPU | on-chip | arch/arm | ++-----------+------------+----------------------+ +| NVIC | on-chip | arch/arm | ++-----------+------------+----------------------+ +| PWM | on-chip | pwm | ++-----------+------------+----------------------+ +| RADIO | on-chip | Bluetooth, | +| | | ieee802154 | ++-----------+------------+----------------------+ +| RTC | on-chip | system clock | ++-----------+------------+----------------------+ +| SPI(M/S) | on-chip | spi | ++-----------+------------+----------------------+ +| UART | on-chip | serial | ++-----------+------------+----------------------+ +| USB | on-chip | usb | ++-----------+------------+----------------------+ +| WDT | on-chip | watchdog | ++-----------+------------+----------------------+ + +Connections and IOs +=================== + +LED +--- + +* LED1 (green) = P0.13 +* LED2 (blue) = P0.15 +* LED3 (red) = P0.14 + +Push buttons +------------ + +* Reset = SW0 = P0.18 (can be used as GPIO also) + +UART +---- + +* TX = P0.8 +* RX = P0.7 + +I2C +--- + +I2C pins connected to onboard sensors (I2C_0): + +* SDA = P0.5 +* SCL = P0.6 + +SPI +--- + +The e-paper display is connected to the chip via SPI on the following pins (SPI_1): + +* SCK = P0.31 +* MOSI = P0.29 +* MISO = P1.1 (not used by the display) + +NOTE: P1.1 is pin 33 in absolute enumeration. + +Other pins used by the e-paper display are: + +* E-ink enable = P0.11 (cuts off power to the display with MOSFET) +* CS = P0.30 +* BUSY = P0.3 +* D/C = P0.28 +* RES = P0.2 + +Programming and Debugging +************************* + +Applications for the ``nrf52840_papyr`` board configuration can be +built and flashed in the usual way (see :ref:`build_an_application` +and :ref:`application_run` for more details); Black Magic +Probe debugger presents itself as two USB-serial ports. On Linux, +they may come up as ``/dev/ttyACM0`` and ``/dev/ttyACM1``. The first +one of these (``/dev/ttyACM0`` here) is the debugger port. +GDB can directly connect to this port without requiring a GDB server by specifying +``target external /dev/ttyACM0``. The second port acts as a +serial port, connected to the SoC. + +Flashing +======== + +By default, papyr is configured to be used with a blackmagicprobe compatible +debugger (see _Bumpy). + +Applications are flashed and run as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +Here is an example for the :ref:`hello_world` application. + +First, run your favorite terminal program to listen for output. + +.. code-block:: console + + $ minicom -D -b 115200 + +Replace :code:`` with the serial port of Black Magic Probe. +For example, under Linux, :code:`/dev/ttyACM1`. + +Then build and flash the application in the usual way. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: nrf52840_papyr + :goals: build flash + +Debugging +========= + +Debug and attach configurations are available using Black Magic Probe, and +``ninja debug``, or ``ninja attach`` (or with ``make``) are available. + +NOTE: You may need to press the reset button once after using ``ninja flash`` +to start executing the code. (not required with ``debug`` or ``attach``) + +References +********** + +.. target-notes:: + +.. _Electronut Labs website: https://electronut.in +.. _Store link: https://www.tindie.com/stores/ElectronutLabs/ +.. _Papyr website: https://docs.electronut.in/papyr/ +.. _Schematic: https://gitlab.com/electronutlabs-public/papyr/raw/master/hardware/papyr_schematic_v_0_3.pdf?inline=false +.. _Datasheet: https://gitlab.com/electronutlabs-public/papyr/raw/master/papyr_v0.3_datasheet.pdf?inline=false +.. _Nordic Semiconductor Infocenter: http://infocenter.nordicsemi.com/ +.. _Black Magic Probe website: https://github.com/blacksphere/blackmagic +.. _Bumpy website: https://docs.electronut.in/bumpy/ + diff --git a/boards/arm/nrf52840_papyr/nrf52840_papyr.dts b/boards/arm/nrf52840_papyr/nrf52840_papyr.dts new file mode 100644 index 00000000000..5168b81ffc2 --- /dev/null +++ b/boards/arm/nrf52840_papyr/nrf52840_papyr.dts @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2019 Ajay Meena + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + model = "Papyr"; + compatible = "nordic,pca10056-dk", "nordic,nrf52840-qiaa", + "nordic,nrf52840"; + + chosen { + zephyr,console = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio0 13 GPIO_INT_ACTIVE_LOW>; + label = "Green LED 0"; + }; + led1: led_1 { + gpios = <&gpio0 15 GPIO_INT_ACTIVE_LOW>; + label = "Blue LED 1"; + }; + led2: led_2 { + gpios = <&gpio0 14 GPIO_INT_ACTIVE_LOW>; + label = "Red LED 2"; + }; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 18 GPIO_PUD_PULL_UP>; + label = "Push button switch 0"; + }; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led0; + led1 = &led1; + led2 = &led2; + sw0 = &button0; + }; +}; + +&adc { + status ="ok"; +}; + +&gpiote { + status ="ok"; +}; + +&gpio0 { + status ="ok"; +}; + +&gpio1 { + status ="ok"; +}; + +&uart0 { + compatible = "nordic,nrf-uart"; + current-speed = <115200>; + status = "ok"; + tx-pin = <8>; + rx-pin = <7>; +}; + +&i2c0 { + status = "ok"; + sda-pin = <5>; + scl-pin = <6>; +}; + +&spi1 { + status = "ok"; + sck-pin = <31>; + mosi-pin = <29>; + miso-pin = <33>; +}; + +&pwm0 { + status = "ok"; + ch0-pin = <13>; + ch0-inverted; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x000000000 0x0000C000>; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000C000 0x000069000>; + }; + slot1_partition: partition@75000 { + label = "image-1"; + reg = <0x00075000 0x000069000>; + }; + scratch_partition: partition@de000 { + label = "image-scratch"; + reg = <0x000de000 0x0001e000>; + }; + storage_partition: partition@fc000 { + label = "storage"; + reg = <0x000fc000 0x00004000>; + }; + }; +}; + +&usbd { + compatible = "nordic,nrf-usbd"; + status = "ok"; +}; diff --git a/boards/arm/nrf52840_papyr/nrf52840_papyr.yaml b/boards/arm/nrf52840_papyr/nrf52840_papyr.yaml new file mode 100644 index 00000000000..24fe3d4d8d6 --- /dev/null +++ b/boards/arm/nrf52840_papyr/nrf52840_papyr.yaml @@ -0,0 +1,16 @@ +identifier: nrf52840_papyr +name: Electronut Labs Papyr +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog + - counter diff --git a/boards/arm/nrf52840_papyr/nrf52840_papyr_defconfig b/boards/arm/nrf52840_papyr/nrf52840_papyr_defconfig new file mode 100644 index 00000000000..9fdab73c028 --- /dev/null +++ b/boards/arm/nrf52840_papyr/nrf52840_papyr_defconfig @@ -0,0 +1,19 @@ +CONFIG_ARM=y +CONFIG_SOC_FAMILY_NRF=y +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRF52840_PAPYR=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable uart driver +CONFIG_SERIAL=y +CONFIG_UART_0_NRF_UART=y + +# enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# additional board options +CONFIG_GPIO_AS_PINRESET=y diff --git a/tests/drivers/adc/adc_api/src/test_adc.c b/tests/drivers/adc/adc_api/src/test_adc.c index b85d81a7072..4f8e4548746 100644 --- a/tests/drivers/adc/adc_api/src/test_adc.c +++ b/tests/drivers/adc/adc_api/src/test_adc.c @@ -33,6 +33,7 @@ #elif defined(CONFIG_BOARD_NRF52_PCA10040) || \ defined(CONFIG_BOARD_NRF52840_PCA10056) || \ defined(CONFIG_BOARD_NRF52840_BLIP) || \ + defined(CONFIG_BOARD_NRF52840_PAPYR) || \ defined(CONFIG_BOARD_BL652_DVK) || \ defined(CONFIG_BOARD_BL654_DVK)