boards: arm: rm1xx_dvk: Add Laird Connectivity RM1xx development board

This is a development board which supports LoRa and Bluetooth Low
Energy functionality

Signed-off-by: Jamie McCrae <jamie.mccrae@lairdconnect.com>
This commit is contained in:
Jamie McCrae 2021-08-20 15:45:44 +01:00 committed by Maureen Helm
commit 6791aaec62
9 changed files with 395 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# rm1xx_dvk board configuration
# Copyright (c) 2021 Laird Connectivity
# SPDX-License-Identifier: Apache-2.0
config BOARD_RM1XX_DVK
bool "RM1XX_DVK"
depends on SOC_NRF51822_QFAC

View file

@ -0,0 +1,14 @@
# rm1xx_dvk board configuration
# Copyright (c) 2021 Laird Connectivity
# SPDX-License-Identifier: Apache-2.0
if BOARD_RM1XX_DVK
config BOARD
default "rm1xx_dvk"
config BT_CTLR
default BT
endif # BOARD_RM1XX_DVK

View file

@ -0,0 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(nrfjprog "--nrf-family=NRF51")
board_runner_args(jlink "--device=nrf51" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,181 @@
.. _rm1xx_dvk:
Laird Connectivity RM1xx DVK
############################
Overview
********
Laird Connectivity's RM1xx is a module which integrates both LoRa and
BLE communications, powered by a Nordic Semiconductor nRF51822 ARM
Cortex-M0 CPU and on-board Semtech SX1272 LoRa RF chip. This board
supports the RM1xx on the RM1xx development board - RM191 for the
915MHz version and RM186 for the 868MHz version.
This development kit has the following features:
* :abbr:`ADC (Analog to Digital Converter)`
* CLOCK
* FLASH
* :abbr:`GPIO (General Purpose Input Output)`
* :abbr:`I2C (Inter-Integrated Circuit)`
* :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/RM186-DVK.png
:width: 500px
:align: center
:alt: RM1xx development kit (DVK)
RM1xx development kit (DVK) (Credit: Laird Connectivity)
.. figure:: img/RM186-SM.jpg
:width: 185px
:align: center
:alt: RM1xx module
RM1xx module (Credit: Laird Connectivity)
More information about the module can be found on the
`RM1xx homepage`_.
The `Nordic Semiconductor Infocenter`_
contains the processor's information and the datasheet.
Hardware
********
The RM1xx has two internal oscillators. The frequency of
the slow clock is 32.768KHz. The frequency of the main clock
is 16MHz.
Supported Features
==================
The rm1xx_dvk 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 |
+-----------+------------+----------------------+
| NVIC | on-chip | arch/arm |
+-----------+------------+----------------------+
| PWM | on-chip | pwm |
+-----------+------------+----------------------+
| RTC | on-chip | system clock |
+-----------+------------+----------------------+
| RTT | Segger | console |
+-----------+------------+----------------------+
| SPI(M/S) | on-chip | spi |
+-----------+------------+----------------------+
| SPU | on-chip | system protection |
+-----------+------------+----------------------+
| UART | on-chip | serial |
+-----------+------------+----------------------+
| WDT | on-chip | watchdog |
+-----------+------------+----------------------+
Other hardware features are not supported by the Zephyr kernel.
See `Nordic Semiconductor Infocenter`_
for a complete list of hardware features.
Connections and IOs
===================
The development board features a Microchip MCP23S08 SPI port expander -
note that this is not currently supported in Zephyr.
Refer to the `Microchip MCP23S08 datasheet`_ for further details.
Push buttons
------------
* BUTTON2 = SW0 = P0.05
Internal Memory
===============
EEPROM Memory
-------------
A 512KB (4Mb) Adesto AT25DF041B EEPROM is available via SPI for storage
of infrequently updated data and small datasets and can be used with
the spi-nor driver. Note that the EEPROM shares the same SPI bus as the
SX1272 LoRa transceiver so priority access should be given to the LoRa
radio.
Refer to the `Adesto AT25DF041B datasheet`_ for further details.
LoRa
====
A Semtech SX1272 transceiver chip is present in the module which can be
used in 915MHz LoRa frequency ranges if using an RM191 module or 868MHz
LoRa frequency ranges if uses an RM186 module
Refer to the `Semtech SX1272 datasheet`_ for further details.
Programming and Debugging
*************************
Flashing
========
Follow the instructions in the :ref:`nordic_segger` page to install
and configure all the necessary software. Further information can be
found in :ref:`nordic_segger_flashing`. Then 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.
First, run your favorite terminal program to listen for output.
.. code-block:: console
$ minicom -D <tty_device> -b 115200
Replace :code:`<tty_device>` with the port where the board nRF51 DK
can be found. For example, under Linux, :code:`/dev/ttyACM0`.
Then build and flash the application in the usual way.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: rm1xx_dvk
:goals: build flash
Debugging
=========
Refer to the :ref:`nordic_segger` page to learn about debugging boards
with a Segger IC.
References
**********
.. target-notes::
.. _RM1xx homepage: https://www.lairdconnect.com/wireless-modules/lorawan-solutions/sentrius-rm1xx-lora-ble-module
.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com
.. _Adesto AT25DF041B datasheet: https://www.dialog-semiconductor.com/sites/default/files/ds-at25df041b_040.pdf
.. _Semtech SX1272 datasheet: https://semtech.my.salesforce.com/sfc/p/#E0000000JelG/a/440000001NCE/v_VBhk1IolDgxwwnOpcS_vTFxPfSEPQbuneK3mWsXlU
.. _Microchip MCP23S08 datasheet: https://www.microchip.com/content/dam/mchp/documents/OTH/ProductDocuments/DataSheets/MCP23008-MCP23S08-Data-Sheet-20001919F.pdf

View file

@ -0,0 +1,155 @@
/*
* Copyright (c) 2021 Laird Connectivity
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <nordic/nrf51822_qfac.dtsi>
/ {
model = "Laird Connectivity RM1XX_DVK";
compatible = "lairdconnect,rm1xx_dvk";
chosen {
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
zephyr,bt-mon-uart = &uart0;
zephyr,bt-c2h-uart = &uart0;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
};
buttons {
compatible = "gpio-keys";
button2: button_2 {
gpios = <&gpio0 5 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
label = "Push button switch 2 (BUTTON2)";
};
};
/* These aliases are provided for compatibility with samples */
aliases {
sw0 = &button2;
lora0 = &lora0;
};
};
&gpiote {
status = "okay";
};
&gpio0 {
status = "okay";
};
&i2c0 {
compatible = "nordic,nrf-twi";
status = "okay";
sda-pin = <30>;
scl-pin = <29>;
};
/* SPI0 cannot be used with I2C0 */
&spi0 {
/* Disabled by default */
compatible = "nordic,nrf-spi";
sck-pin = <0>;
mosi-pin = <3>;
miso-pin = <17>;
cs-gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;
};
&spi1 {
compatible = "nordic,nrf-spi";
status = "okay";
sck-pin = <11>;
mosi-pin = <9>;
miso-pin = <10>;
cs-gpios = <&gpio0 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>,
<&gpio0 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
at25: at25df041b@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <1000000>;
label = "at25df04";
jedec-id = [1f 44 02];
size = <0x400000>;
has-lock = <0xbc>;
has-dpd;
t-enter-dpd = <500>;
t-exit-dpd = <20>;
};
lora0: lora@1 {
compatible = "semtech,sx1272";
reg = <1>;
label = "sx1272";
reset-gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
dio-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>,
<&gpio0 13 GPIO_ACTIVE_HIGH>,
<&gpio0 14 GPIO_ACTIVE_HIGH>,
<&gpio0 15 GPIO_ACTIVE_HIGH>,
<&gpio0 16 GPIO_ACTIVE_HIGH>,
<&gpio0 1 GPIO_ACTIVE_HIGH>;
rfi-enable-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>;
rfo-enable-gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>;
spi-max-frequency = <1000000>;
};
};
&uart0 {
compatible = "nordic,nrf-uart";
current-speed = <115200>;
status = "okay";
tx-pin = <21>;
rx-pin = <22>;
rts-pin = <23>;
cts-pin = <24>;
};
&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/* 52K */
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x000000000 0x0000C000>;
};
/* 188K */
slot0_partition: partition@c000 {
label = "image-0";
reg = <0x0000C000 0x00030000>;
};
/*
* Storage partition will be used by FCB/LittleFS/NVS
* if enabled. 16KB
*/
storage_partition: partition@3c000 {
label = "storage";
reg = <0x0003C000 0x00004000>;
};
};
};
&at25 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/* 188K reserved for slot1 */
/* 68K */
lfs_partition: partition@30000 {
label = "lfs_storage";
reg = <0x00030000 0x000010000>;
};
};
};

View file

@ -0,0 +1,16 @@
identifier: rm1xx_dvk
name: RM1xx_DVK
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
ram: 32
supported:
- ble
- i2c
- spi
- lora
testing:
ignore_tags:
- net

View file

@ -0,0 +1,15 @@
# SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_NRF51X=y
CONFIG_SOC_NRF51822_QFAC=y
CONFIG_BOARD_RM1XX_DVK=y
# enable GPIO
CONFIG_GPIO=y
# enable uart driver
CONFIG_SERIAL=y
# enable console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y