From 3a4f08cd904701b320e602d2e89840de7be34b37 Mon Sep 17 00:00:00 2001 From: Bob Recny Date: Fri, 2 Apr 2021 19:09:49 +0000 Subject: [PATCH] boards: arm: Add u-blox EVK-NINA-B1 Add support for u-blox EVK-NINA-B1 which uses the nRF52832. This board is similar to the nRF52dk_nrf52832 with different pin assignments on the header pins and not having the debug-in and shield SWD headers. Tested with blinky, button, and Bluetooth peripheral_hr Corrected duplicate pin assignment for i2c1 in dts file Corrected copyright date in Kconfig.defconfig Rebase to update test_adc.c Corrected sda-pin, scl-pin assignments and LED aliases Signed-off-by: Bob Recny --- boards/arm/ubx_evkninab1_nrf52832/Kconfig | 10 + .../arm/ubx_evkninab1_nrf52832/Kconfig.board | 8 + .../ubx_evkninab1_nrf52832/Kconfig.defconfig | 14 ++ boards/arm/ubx_evkninab1_nrf52832/board.cmake | 12 + .../doc/img/EVK-NINA-B1.jpg | Bin 0 -> 23862 bytes .../arm/ubx_evkninab1_nrf52832/doc/index.rst | 178 ++++++++++++++ .../ubx_evkninab1_nrf52832.dts | 224 ++++++++++++++++++ .../ubx_evkninab1_nrf52832.yaml | 21 ++ .../ubx_evkninab1_nrf52832_defconfig | 30 +++ tests/drivers/adc/adc_api/src/test_adc.c | 1 + 10 files changed, 498 insertions(+) create mode 100644 boards/arm/ubx_evkninab1_nrf52832/Kconfig create mode 100644 boards/arm/ubx_evkninab1_nrf52832/Kconfig.board create mode 100644 boards/arm/ubx_evkninab1_nrf52832/Kconfig.defconfig create mode 100644 boards/arm/ubx_evkninab1_nrf52832/board.cmake create mode 100644 boards/arm/ubx_evkninab1_nrf52832/doc/img/EVK-NINA-B1.jpg create mode 100644 boards/arm/ubx_evkninab1_nrf52832/doc/index.rst create mode 100644 boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.dts create mode 100644 boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.yaml create mode 100644 boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832_defconfig diff --git a/boards/arm/ubx_evkninab1_nrf52832/Kconfig b/boards/arm/ubx_evkninab1_nrf52832/Kconfig new file mode 100644 index 00000000000..7e93db3f218 --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/Kconfig @@ -0,0 +1,10 @@ +# u-blox EVK NINA-B1 board configuration +# +# Copyright (c) 2021 u-blox AG +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_UBX_EVKNINAB1_NRF52832 diff --git a/boards/arm/ubx_evkninab1_nrf52832/Kconfig.board b/boards/arm/ubx_evkninab1_nrf52832/Kconfig.board new file mode 100644 index 00000000000..e97367f358c --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/Kconfig.board @@ -0,0 +1,8 @@ +# u-blox EVK-NINA-B1 board configuration + +# Copyright (c) 2021 u-blox AG +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_UBX_EVKNINAB1_NRF52832 + bool "u-blox EVK-NINA-B1" + depends on SOC_NRF52832_QFAA diff --git a/boards/arm/ubx_evkninab1_nrf52832/Kconfig.defconfig b/boards/arm/ubx_evkninab1_nrf52832/Kconfig.defconfig new file mode 100644 index 00000000000..408147057d1 --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/Kconfig.defconfig @@ -0,0 +1,14 @@ +# u-blox EVK-NINA-B1 board configuration + +# Copyright (c) 2021 u-blox AG +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_UBX_EVKNINAB1_NRF52832 + +config BOARD + default "ubx_evkninab1_nrf52832" + +config BT_CTLR + default BT + +endif # BOARD_UBX_EVKNINAB1_NRF52832 diff --git a/boards/arm/ubx_evkninab1_nrf52832/board.cmake b/boards/arm/ubx_evkninab1_nrf52832/board.cmake new file mode 100644 index 00000000000..056e8ca7e28 --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/board.cmake @@ -0,0 +1,12 @@ +# u-blox EVK-NINA-B1 board configuration + +# Copyright (c) 2021 u-blox AG +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(nrfjprog "--nrf-family=NRF52") +board_runner_args(jlink "--device=nrf52" "--speed=4000") +board_runner_args(pyocd "--target=nrf52" "--frequency=4000000") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/boards/arm/ubx_evkninab1_nrf52832/doc/img/EVK-NINA-B1.jpg b/boards/arm/ubx_evkninab1_nrf52832/doc/img/EVK-NINA-B1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbb8d9b2d960a15f8c4bbfd02fbd2c06c25d920d GIT binary patch literal 23862 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 literal 0 HcmV?d00001 diff --git a/boards/arm/ubx_evkninab1_nrf52832/doc/index.rst b/boards/arm/ubx_evkninab1_nrf52832/doc/index.rst new file mode 100644 index 00000000000..ed41ad38125 --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/doc/index.rst @@ -0,0 +1,178 @@ +.. _ubx_evkninab1_nrf52832: + +u-blox EVK NINA-B11x +#################### + +Overview +******** + +The u-blox NINA-B1 Evaluation Kit hardware is a Bluetooth +low energy module based on the Nordic Semiconductor nRF52832 +ARM Cortex-M4F CPU and has support for the following features: + +* :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) +* :abbr:`RTC (nRF RTC System Clock)` +* Segger RTT (RTT Console) +* :abbr:`SPI (Serial Peripheral Interface)` +* :abbr:`UART (Universal asynchronous receiver-transmitter)` +* :abbr:`WDT (Watchdog Timer)` + +.. figure:: img/EVK-NINA-B1.jpg + + EVK NINA-B1 + +More information about the NINA-B1 module and the EVK NINA-B1 +can be found at `NINA-B1 product page`_ and +`EVK-NINA-B1 product page`_. + +Supported Features +================== + +The ubx_evkninab1_nrf52832 board configuration supports the +following hardware features: + ++-----------+------------+----------------------+ +| 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 Low Energy | ++-----------+------------+----------------------+ +| RTC | on-chip | system clock | ++-----------+------------+----------------------+ +| RTT | Segger | console | ++-----------+------------+----------------------+ +| SPI(M/S) | on-chip | spi | ++-----------+------------+----------------------+ +| UART | on-chip | serial | ++-----------+------------+----------------------+ +| WDT | on-chip | watchdog | ++-----------+------------+----------------------+ + +.. note:: + Most Arduino interfaces are supported. Arduino pins + D5 and D8 are not available, so arduino_gpio is + disabled. On the EVK-NINA-B1, these pins are + assigned to SWDIO and SWDCLK, respectively. + +Other hardware features are not supported by the Zephyr kernel. +See `EVK-NINA-B1 product page`_ and `NINA-B1 Data Sheet`_ +for a complete list of EVK NINA-B1 hardware features. + +Connections and IOs +=================== + +LED +--- + +* LED0 (red) = P0.08 +* LED1 (green) = P0.16 +* LED2 (blue) = P0.18 + +Push buttons +------------ + +* BUTTON1 = SW1 = P0.16 +* BUTTON2 = SW2 = P0.30 + + +General information on module pin numbering +------------------------------------------- + +The numbering of the pins on the module and EVK do not follow the GPIO +numbering on the nRF52832 SoC. Please see the `NINA-B1 Data Sheet`_ for +information on how to map NINA-B1 pins to the pin numbering on the +nRF52832 SoC. + +The reason for this is the u-blox module family concept where different +modules share the same pinout and can be interchanged, see +`NINA module family Nested design`_. + +Programming and Debugging +************************* + +Applications for the ``ubx_evkninab1_nrf52832`` board configuration can be +built and flashed in the usual way (see :ref:`build_an_application` +and :ref:`application_run` for more details); however, the standard +debugging targets are not currently available. + +Flashing +======== + +Build and flash applications as usual (see +:ref:`build_an_application` and :ref:`application_run` for more details). + +Here is an example for the :ref:`hello_world` application. + +Open a terminal program to the USB Serial Port installed when connecting +the board and listen for output. + +Settings: 115200, 8N1, no flow control. + +Then build and flash the application in the usual way. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: ubx_evkninab1_nrf52832 + :goals: build flash + +Debugging +========= + +Refer to the :ref:`nordic_segger` page to learn about debugging boards +containing a Nordic Semiconductor chip with a Segger IC. + + +Testing the LEDs and buttons in the EVK NINA-B11x +************************************************* + +There are 2 samples that allow you to test that the buttons (switches) +and LEDs on the board are working properly with Zephyr: + +.. code-block:: console + + samples/basic/blinky + samples/basic/button + +You can build and flash the examples to make sure Zephyr is running +correctly on your board. The button and LED definitions can be found in +:zephyr_file:`boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.dts`. + +Note that the buttons on the EVK-NINA-B1 are marked SW1 and SW2, which +are named sw0 and sw1 in the dts file. +Also note that the SW1 button and the green LED are connected on HW level. + + +References +********** + +.. target-notes:: + +.. _NINA-B1 product page: https://www.u-blox.com/en/product/nina-b1-series-open-cpu +.. _EVK-NINA-B1 product page: https://www.u-blox.com/en/product/evk-nina-b1 +.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com +.. _J-Link Software and documentation pack: https://www.segger.com/jlink-software.html +.. _NINA-B1 Data Sheet: https://www.u-blox.com/en/docs/UBX-15019243 +.. _NINA module family Nested design: https://www.u-blox.com/en/docs/UBX-17065600 diff --git a/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.dts b/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.dts new file mode 100644 index 00000000000..4cee2da612b --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.dts @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2021 u-blox AG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + model = "u-blox EVK-NINA-B1 NRF52832"; + compatible = "u-blox,ubx_evkninab1_nrf52832"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + /* NINA-B1 GPIO_1 */ + gpios = <&gpio0 8 GPIO_ACTIVE_LOW>; + label = "Red LED"; + }; + led1: led_1 { + /* NINA-B1 GPIO_7 */ + gpios = <&gpio0 16 GPIO_ACTIVE_LOW>; + label = "Green LED"; + }; + led2: led_2 { + /*NINA-B1 GPIO_8 */ + gpios = <&gpio0 18 GPIO_ACTIVE_LOW>; + label = "Blue LED"; + }; + }; + + pwmleds { + compatible = "pwm-leds"; + red_pwm_led: red_pwm_led { + pwms = <&pwm0 8>; + }; + green_pwm_led: green_pwm_led { + pwms = <&pwm0 16>; + }; + blue_pwm_led: blue_pwm_led { + pwms = <&pwm0 18>; + }; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + /* EVK-NINA-B1 SW1 button */ + gpios = <&gpio0 16 (GPIO_PULL_UP | \ + GPIO_ACTIVE_LOW)>; + label = "Push button switch SW1"; + }; + button1: button_1 { + /* EVK-NINA-B1 SW2 button */ + gpios = <&gpio0 30 (GPIO_PULL_UP | \ + GPIO_ACTIVE_LOW)>; + label = "Push button switch SW2"; + }; + }; + + arduino_header: connector { + compatible = "arduino-header-r3"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpio0 3 0>, /* A0 */ + <1 0 &gpio0 2 0>, /* A1 */ + <2 0 &gpio0 4 0>, /* A2 */ + <3 0 &gpio0 30 0>, /* A3 */ + <4 0 &gpio0 29 0>, /* A4 */ + <5 0 &gpio0 28 0>, /* A5 */ + <6 0 &gpio0 5 0>, /* D0 */ + <7 0 &gpio0 6 0>, /* D1 */ + <8 0 &gpio0 7 0>, /* D2 */ + <9 0 &gpio0 31 0>, /* D3 */ + <10 0 &gpio0 18 0>, /* D4 */ + /* 11 SWDIO */ /* D5 */ + <12 0 &gpio0 9 0>, /* D6 */ + <13 0 &gpio0 10 0>, /* D7 */ + /* 14 SWDCLK */ /* D8 */ + <15 0 &gpio0 8 0>, /* D9 */ + <16 0 &gpio0 11 0>, /* D10 */ + <17 0 &gpio0 13 0>, /* D11 */ + <18 0 &gpio0 12 0>, /* D12 */ + <19 0 &gpio0 14 0>, /* D13 */ + <20 0 &gpio0 2 0>, /* D14 */ + <21 0 &gpio0 3 0>; /* D15 */ + }; + + arduino_adc: analog-connector { + compatible = "arduino,uno-adc"; + #io-channel-cells = <1>; + io-channel-map = <0 &adc 1>, /* A0 = P0.3 = AIN1 */ + <1 &adc 2>, /* A1 = P0.2 = AIN2 */ + <2 &adc 4>, /* A2 = P0.4 = AIN4 */ + <3 &adc 5>, /* A3 = P0.30 = AIN5 */ + <4 &adc 6>, /* A4 = P0.29 = AIN6 */ + <5 &adc 7>; /* A5 = P0.28 = AIN7 */ + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led0; + led1 = &led1; + led2 = &led2; + pwm-led0 = &red_pwm_led; + pwm-led1 = &green_pwm_led; + pwm-led2 = &blue_pwm_led; + red-pwm-led = &red_pwm_led; + green-pwm-led = &green_pwm_led; + blue-pwm-led = &blue_pwm_led; + sw0 = &button0; + sw1 = &button1; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <6>; + rx-pin = <5>; + rts-pin = <31>; + cts-pin = <7>; +}; + +arduino_i2c: &i2c0 { + compatible = "nordic,nrf-twi"; + status = "okay"; + sda-pin = <2>; + scl-pin = <3>; +}; + +&i2c1 { + compatible = "nordic,nrf-twi"; + /* Cannot be used together with spi1. */ + /* status = "okay"; */ + sda-pin = <30>; + scl-pin = <29>; +}; + +&pwm0 { + status = "okay"; + ch0-pin = <16>; + ch0-inverted; + status = "okay"; + ch1-pin = <8>; + ch1-inverted; + status = "okay"; + ch2-pin = <18>; + ch2-inverted; +}; + +arduino_spi: &spi0 { + compatible = "nordic,nrf-spi"; + /* Cannot be use simultaneously with i2c0 */ + /* status = "okay"; */ + sck-pin = <14>; /* D13 */ + mosi-pin = <13>; /* D11 */ + miso-pin = <12>; /* D12 */ + cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */ +}; + +&spi1 { + compatible = "nordic,nrf-spi"; + status = "okay"; + sck-pin = <28>; + mosi-pin = <29>; + miso-pin = <30>; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0xc000>; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000C000 0x32000>; + }; + slot1_partition: partition@3e000 { + label = "image-1"; + reg = <0x0003E000 0x32000>; + }; + scratch_partition: partition@70000 { + label = "image-scratch"; + reg = <0x00070000 0xa000>; + }; + storage_partition: partition@7a000 { + label = "storage"; + reg = <0x0007a000 0x00006000>; + }; + }; +}; diff --git a/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.yaml b/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.yaml new file mode 100644 index 00000000000..a5d025a7d1f --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832.yaml @@ -0,0 +1,21 @@ +identifier: ubx_evkninab1_nrf52832 +name: UBX-EVKNINAB1-NRF52832 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 64 +flash: 512 +supported: + - adc + - arduino_i2c + - arduino_spi + - gpio + - counter + - nvs + - i2c + - pwm + - spi + - watchdog diff --git a/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832_defconfig b/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832_defconfig new file mode 100644 index 00000000000..253a235adff --- /dev/null +++ b/boards/arm/ubx_evkninab1_nrf52832/ubx_evkninab1_nrf52832_defconfig @@ -0,0 +1,30 @@ +# u-blox EVK-NINA-B1 board configuration + +# Copyright (c) 2021 u-blox AG +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52832_QFAA=y +CONFIG_BOARD_UBX_EVKNINAB1_NRF52832=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable RTT +CONFIG_USE_SEGGER_RTT=y + +# enable GPIO +CONFIG_GPIO=y + +# enable uart driver +CONFIG_SERIAL=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 e64168a3de7..26ca28686c5 100644 --- a/tests/drivers/adc/adc_api/src/test_adc.c +++ b/tests/drivers/adc/adc_api/src/test_adc.c @@ -57,6 +57,7 @@ defined(CONFIG_BOARD_UBX_BMD360EVAL_NRF52811) || \ defined(CONFIG_BOARD_UBX_BMD380EVAL_NRF52840) || \ defined(CONFIG_BOARD_UBX_EVKANNAB1_NRF52832) || \ + defined(CONFIG_BOARD_UBX_EVKNINAB1_NRF52832) || \ defined(CONFIG_BOARD_UBX_EVKNINAB3_NRF52840) #include