diff --git a/boards/shields/sparkfun_carrier_asset_tracker/Kconfig.defconfig b/boards/shields/sparkfun_carrier_asset_tracker/Kconfig.defconfig new file mode 100644 index 00000000000..da44e62a05f --- /dev/null +++ b/boards/shields/sparkfun_carrier_asset_tracker/Kconfig.defconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Jerónimo Agulló +# SPDX-License-Identifier: Apache-2.0 + +if SHIELD_SPARKFUN_CARRIER_ASSET_TRACKER + +config SERIAL + default y + +config UART_INTERRUPT_DRIVEN + default y + +config UART_ASYNC_API + default y + +config I2C + default y + +config SPI + default y + +endif # SHIELD_SPARKFUN_CARRIER_ASSET_TRACKER diff --git a/boards/shields/sparkfun_carrier_asset_tracker/Kconfig.shield b/boards/shields/sparkfun_carrier_asset_tracker/Kconfig.shield new file mode 100644 index 00000000000..71cff267351 --- /dev/null +++ b/boards/shields/sparkfun_carrier_asset_tracker/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Jerónimo Agulló +# SPDX-License-Identifier: Apache-2.0 + +config SHIELD_SPARKFUN_CARRIER_ASSET_TRACKER + def_bool $(shields_list_contains,sparkfun_carrier_asset_tracker) diff --git a/boards/shields/sparkfun_carrier_asset_tracker/doc/img/sparkfun_carrier_asset_tracker.webp b/boards/shields/sparkfun_carrier_asset_tracker/doc/img/sparkfun_carrier_asset_tracker.webp new file mode 100644 index 00000000000..a76682a0cef Binary files /dev/null and b/boards/shields/sparkfun_carrier_asset_tracker/doc/img/sparkfun_carrier_asset_tracker.webp differ diff --git a/boards/shields/sparkfun_carrier_asset_tracker/doc/index.rst b/boards/shields/sparkfun_carrier_asset_tracker/doc/index.rst new file mode 100644 index 00000000000..93093906fce --- /dev/null +++ b/boards/shields/sparkfun_carrier_asset_tracker/doc/index.rst @@ -0,0 +1,117 @@ +.. _sparkfun_carrier_asset_tracker: + +Sparkfun SparkFun MicroMod Asset Tracker Shield +############################################### + +Overview +******** + +The SparkFun MicroMod Asset Tracker Carrier Shield is part of the Sparkfun +Micromod standard, a modular interface ecosystem that uses the M.2 standard +to mix and match your choice of processor with specific Functions Boards. + +The Asset Tracker Carrier Shield is built around the u-blox SARA-R510M8S +module, which offers Secure Cloud LTE-M and NB-IoT data communication for +multi-regional use and GNSS capabilities via an integrated u-blox M8 GNSS +receiver for accurate positioning information. + +Besides, this shield has an integrated ICM-20948 Inertial Measurement Unit +(IMU) for Nine Degree-Of-Freedom, a built-in micro-SD card socket for data +logging as well as a nano SIM card port. + +.. figure:: img/sparkfun_carrier_asset_tracker.webp + :align: center + :alt: Sparkfun SparkFun MicroMod Asset Tracker Shield + + Sparkfun SparkFun MicroMod Asset Tracker Shield (Credit: Sparkfun) + +More information about the shield can be found at the `SparkFun MicroMod +Asset Tracker guide website`_. + +Pins Assignment of Sparkfun SparkFun MicroMod Asset Tracker Shield +================================================================== + +The SparkFun MicroMod Asset Tracker Carrier Shield uses a 76 pins M.2 +connector. The following table depicts the interfaces and pins supported: +by Zephyr: ++-----------------------+---------------------------------+ +| Shield Connector Pin | Function | ++=======================+=================================+ +| micromod_1_uart alias | UART 1 (with CTS and RTS pins) | ++-----------------------+---------------------------------+ +| micromod_2_uart alias | UART 2 | ++-----------------------+---------------------------------+ +| micromod_0_i2c alias | i2c 0 | ++-----------------------+---------------------------------+ +| micromod_1_i2c alias | i2c 1 | ++-----------------------+---------------------------------+ +| micromod_0_spi alias | SPI 0 | ++-----------------------+---------------------------------+ +| A0 | Analog pin | ++-----------------------+---------------------------------+ +| A1 | Analog pin | ++-----------------------+---------------------------------+ +| D0 | Digital pin | ++-----------------------+---------------------------------+ +| D1/CAM_TRIG | Digital pin | ++-----------------------+---------------------------------+ +| I2C_INT# | i2c interrupt pin | ++-----------------------+---------------------------------+ +| G0/BUS0 | General purpose pin | ++-----------------------+---------------------------------+ +| G1/BUS1 | General purpose pin | ++-----------------------+---------------------------------+ +| G2/BUS2 | General purpose pin | ++-----------------------+---------------------------------+ +| G3/BUS3 | General purpose pin | ++-----------------------+---------------------------------+ +| G4/BUS4 | General purpose pin | ++-----------------------+---------------------------------+ +| G5/BUS5 | General purpose pin | ++-----------------------+---------------------------------+ +| G6/BUS6 | General purpose pin | ++-----------------------+---------------------------------+ +| G7/BUS7 | General purpose pin | ++-----------------------+---------------------------------+ +| G8 | General purpose pin | ++-----------------------+---------------------------------+ +| G9/ADC_D-/CAM_HSYNC | General purpose pin | ++-----------------------+---------------------------------+ +| G10/ADC_D+/CAM_VSYNC | General purpose pin | ++-----------------------+---------------------------------+ +| G11/SWO | General purpose pin | ++-----------------------+---------------------------------+ +| SPI_CS | General purpose pin | ++-----------------------+---------------------------------+ + +A detailed definition of the Micromod standard can be found on the +`Micromod specification website`_ + +Requirements +************ + +This shield can only be used with a board which provides a configuration for +Micromod connectors and defines node aliases for UART, I2C and SPI interfaces (see +:ref:`shields` for more details). + +Programming +*********** + +Set ``-DSHIELD=sparkfun_carrier_asset_tracker`` when you invoke ``west build``. For +example: + +.. zephyr-app-commands:: + :zephyr-app: samples/net/cellular_modem/ + :board: micromod/nrf52840 + :shield: sparkfun_carrier_asset_tracker + :goals: build + +References +********** + +.. target-notes:: + +.. _SparkFun MicroMod Asset Tracker guide website: + https://learn.sparkfun.com/tutorials/micromod-asset-tracker-carrier-board-hookup-guide +.. _Micromod specification website: + https://www.sparkfun.com/micromod diff --git a/boards/shields/sparkfun_carrier_asset_tracker/sparkfun_carrier_asset_tracker.overlay b/boards/shields/sparkfun_carrier_asset_tracker/sparkfun_carrier_asset_tracker.overlay new file mode 100644 index 00000000000..6c7a9383c27 --- /dev/null +++ b/boards/shields/sparkfun_carrier_asset_tracker/sparkfun_carrier_asset_tracker.overlay @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 Jerónimo Agulló + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + modem-uart = µmod_1_uart; + modem = &modem; + }; +}; + +µmod_1_uart { + current-speed = <115200>; + hw-flow-control; + status = "okay"; + + modem: sara_r5 { + compatible = "u-blox,sara-r5"; + mdm-power-gpios = <µmod_header 7 0>; /* G2 */ + mdm-reset-gpios = <µmod_header 12 0>; /* D6 */ + status = "okay"; + }; +}; + +µmod_0_spi { + status = "okay"; + /* G0 (SD_CS) */ + cs-gpios = <µmod_header 5 GPIO_ACTIVE_LOW>; + + sdhc0: sdhc@0 { + compatible = "zephyr,sdhc-spi-slot"; + reg = <0>; + status = "okay"; + mmc { + compatible = "zephyr,sdmmc-disk"; + status = "okay"; + }; + spi-max-frequency = ; + }; +}; + +µmod_0_i2c { + max17048: max17048@36 { + compatible = "maxim,max17048"; + reg = <0x36>; + status = "okay"; + }; +}; diff --git a/boards/sparkfun/micromod/Kconfig b/boards/sparkfun/micromod/Kconfig new file mode 100644 index 00000000000..c85ad61572f --- /dev/null +++ b/boards/sparkfun/micromod/Kconfig @@ -0,0 +1,19 @@ +# Sparkfun micromod board configuration + +# Copyright (c) 2024 Jerónimo Agulló +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_MICROMOD_NRF52840 + +config BOARD_ENABLE_DCDC + bool "DCDC mode" + select SOC_DCDC_NRF52X + default y + +config BOARD_ENABLE_DCDC_HV + bool "High Voltage DCDC converter" + select SOC_DCDC_NRF52X_HV + default y + depends on SOC_NRF52840_QIAA + +endif # BOARD_MICROMOD_NRF52840 diff --git a/boards/sparkfun/micromod/Kconfig.defconfig b/boards/sparkfun/micromod/Kconfig.defconfig new file mode 100644 index 00000000000..50f6c3f582a --- /dev/null +++ b/boards/sparkfun/micromod/Kconfig.defconfig @@ -0,0 +1,11 @@ +# Sparkfun micromod board configuration + +# Copyright (c) 2024 Jerónimo Agulló +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_MICROMOD_NRF52840 + +config BT_CTLR + default BT + +endif # BOARD_MICROMOD_NRF52840 diff --git a/boards/sparkfun/micromod/Kconfig.micromod b/boards/sparkfun/micromod/Kconfig.micromod new file mode 100644 index 00000000000..ea40f13ad1a --- /dev/null +++ b/boards/sparkfun/micromod/Kconfig.micromod @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Jerónimo Agulló +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_MICROMOD + select SOC_NRF52840_QIAA if BOARD_MICROMOD_NRF52840 diff --git a/boards/sparkfun/micromod/board.cmake b/boards/sparkfun/micromod/board.cmake new file mode 100644 index 00000000000..55900ba5975 --- /dev/null +++ b/boards/sparkfun/micromod/board.cmake @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000") +board_runner_args(pyocd "--target=nrf52840" "--frequency=4000000") + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/sparkfun/micromod/board.yml b/boards/sparkfun/micromod/board.yml new file mode 100644 index 00000000000..851ac345bc5 --- /dev/null +++ b/boards/sparkfun/micromod/board.yml @@ -0,0 +1,5 @@ +board: + name: micromod + vendor: sparkfun + socs: + - name: nrf52840 diff --git a/boards/sparkfun/micromod/doc/img/sparkfun_micromod.webp b/boards/sparkfun/micromod/doc/img/sparkfun_micromod.webp new file mode 100644 index 00000000000..423c7a3d0f6 Binary files /dev/null and b/boards/sparkfun/micromod/doc/img/sparkfun_micromod.webp differ diff --git a/boards/sparkfun/micromod/doc/index.rst b/boards/sparkfun/micromod/doc/index.rst new file mode 100644 index 00000000000..0ba4c37bbef --- /dev/null +++ b/boards/sparkfun/micromod/doc/index.rst @@ -0,0 +1,204 @@ +.. _boardname_linkname: + +SparkFun MicroMod board Processor +################################# + +Overview +******** + +MicroMod is a solderless, modular interface ecosystem that uses the M.2 standard +to mix and match your choice of processor with specific Function Boards or +stand-alone Carrier Boards. A MicroMod processor board is approximately 22x22 mm, +and can insert into any MicroMod carrier board. More information can be found in +the `Micromod specification website`_. + +All Micromod board targets support the following hardware features: + +- USB host mode compliant to 2.0 specification +- GPIO +- 2 UART +- 2 I2C +- 2 SPI +- 2 ADC +- 2 PWM +- Watchdog Timer (WDT) + +.. figure:: img/sparkfun_micromod.webp + :align: center + :alt: Sparkfun Micromod board + + Sparkfun Micromod board (Credit: https://www.sparkfun.com) + +Zephyr currently supports the following SoCs: + +- ``micromod/nrf52840`` + +SparkFun MicroMod nRF52840 board Processor +########################################## + +Overview +******** + +The ``micromod/nrf52840`` board target features the nRF52840 SoC +from Nordic Semiconductor, the SparkFun MicroMod nRF52840 Processor offers +a powerful combination of ARM Cortex-M4 CPU and 2.4 GHz Bluetooth transceiver +in the MicroMod form-factor. More information can be found in +the `Micromod nRF52840 guide`_. + +Hardware +******** + +The ``micromod/nrf52840`` board target supports the following +hardware features: + +- ARM Cortex-M4 CPU with floating point unit (FPU) + + - 1MB internal Flash + - 256kB internal RAM + +- Integrated 2.4GHz radio with support for Bluetooth Low Energy (BLE) and ieee802154 +- USB 2.0 full speed (12 Mbps) controller +- QSPI with 128Mb flash memory +- ARM TrustZone Cryptocell 310 security subsystem +- USB host mode compliant to 2.0 specification +- GPIO +- 2 UART +- 2 I2C +- 2 SPI +- 2 ADC +- 2 PWM +- Watchdog Timer (WDT) + +Supported Features +================== + +The Zephyr ``micromod/nrf52840`` board target supports the following hardware +features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| SYSTICK | on-chip | system clock | ++-----------+------------+-------------------------------------+ +| RADIO | on-chip | Bluetooth, | +| | | ieee802154 | ++-----------+------------+-------------------------------------+ +| UART | on-chip | serial port | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| PINMUX | on-chip | pinmux | ++-----------+------------+-------------------------------------+ +| FLASH | on-chip | flash | ++-----------+------------+-------------------------------------+ +| SPI | on-chip | spi | ++-----------+------------+-------------------------------------+ +| I2C | on-chip | i2c | ++-----------+------------+-------------------------------------+ +| USB | on-chip | usb | ++-----------+------------+-------------------------------------+ +| QSPI | on-chip | nordic,nrf-qspi | ++-----------+------------+-------------------------------------+ + + +Connections and IOs +=================== + +LED +--- + +* Led0 (blue) = P0.13 + +Micromod header +--------------- + +* micromod_1_uart = uart0 +* micromod_2_uart = uart1 +* micromod_0_i2c = i2c0 +* micromod_1_i2c = i2c1 +* micromod_0_spi = spi2 +* micromod_header compatible with ``sparkfun,micromod-gpio`` + +Programming and Debugging +************************* + +Applications for the ``micromod/nrf52840`` board target can be +built, flashed, and debugged in the usual way. See +:ref:`build_an_application` and :ref:`application_run` for more details on +building and running. + +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). + +The flashing tool will depend on the carrier used along with the board. +In the case of `Sparkfun asset tracking carrier`, it is possible to use +the SWD interface along with a J-Link. + +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 port where the board nRF52840 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: micromod/nrf52840 + :goals: build flash + +Debugging +========= + +Refer to the :ref:`nordic_segger` page to learn about debugging Nordic boards with a +Segger IC. + +In case of using a Nordic Segger Jlink, it is possible to configure the app to use Segger Real +Time Transfer (RTT) for debugging. In this case, build your app with the +:ref:`RTT snippet `. + +Testing the on-board LED +************************ + +There is a sample that allow you to test the LED on the board is working properly +with Zephyr: + +* :zephyr:code-sample:`blinky` + +You can build and flash the example to make sure Zephyr is running correctly on +your board. The button and LED definitions can be found in +:zephyr_file:`boards/sparkfun/micromod/micromod_nrf52840.dts`. + +Testing the 128Mb qspi memory flash +*********************************** + +The ``micromod/nrf52840`` board target has a built-in NOR flash memory connected +to the qspi interface. It can be tested with the samples/drivers/jesd216 app. + +.. zephyr-app-commands:: + :zephyr-app: samples/drivers/jesd216 + :board: micromod/nrf52840 + :goals: build flash + +References +********** + +.. target-notes:: + +.. _Micromod specification website: https://www.sparkfun.com/micromod +.. _Micromod nRF52840 guide: https://learn.sparkfun.com/tutorials/micromod-nrf52840-processor-hookup-guide +.. _J-Link Software and documentation pack: https://www.segger.com/jlink-software.html +.. _nRF52840 Product Specification: http://infocenter.nordicsemi.com/pdf/nRF52840_PS_v1.0.pdf diff --git a/boards/sparkfun/micromod/micromod_nrf52840-pinctrl.dtsi b/boards/sparkfun/micromod/micromod_nrf52840-pinctrl.dtsi new file mode 100644 index 00000000000..4cba8a1d098 --- /dev/null +++ b/boards/sparkfun/micromod/micromod_nrf52840-pinctrl.dtsi @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2024 Jerónimo Agulló + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + uart1_default: uart1_default { + group1 { + psels = , + ; + }; + }; + + uart1_sleep: uart1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c1_default: i2c1_default { + group1 { + psels = , + ; + }; + }; + + i2c1_sleep: i2c1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + qspi_default: qspi_default { + group1 { + psels = , + , + , + , + , + ; + nordic,drive-mode = ; + }; + }; + + qspi_sleep: qspi_sleep { + group1 { + psels = , + , + , + , + ; + low-power-enable; + }; + group2 { + psels = ; + low-power-enable; + bias-pull-up; + }; + }; +}; diff --git a/boards/sparkfun/micromod/micromod_nrf52840.dts b/boards/sparkfun/micromod/micromod_nrf52840.dts new file mode 100644 index 00000000000..345714a5cd3 --- /dev/null +++ b/boards/sparkfun/micromod/micromod_nrf52840.dts @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2024 Jerónimo Agulló + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "micromod_nrf52840-pinctrl.dtsi" +#include + +/ { + model = "Sparkfun Micrmod nRF52840 board"; + compatible = "sparkfun,micromod-nrf52840"; + + chosen { + zephyr,console = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,ieee802154 = &ieee802154; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led0; + watchdog0 = &wdt0; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio0 13 0>; + label = "Blue LED"; + }; + }; + + micromod_header: connector { + compatible = "sparkfun,micromod-gpio"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpio0 4 0>, /* A0 */ + <1 0 &gpio0 5 0>, /* A1 */ + <2 0 &gpio0 27 0>, /* D0 */ + <3 0 &gpio1 8 0>, /* D1/CAM_TRIG */ + <4 0 &gpio0 15 0>, /* I2C_INT# */ + <5 0 &gpio0 29 0>, /* G0/BUS0 */ + <6 0 &gpio0 3 0>, /* G1/BUS1 */ + <7 0 &gpio1 13 0>, /* G2/BUS2 */ + <8 0 &gpio1 12 0>, /* G3/BUS3 */ + <9 0 &gpio1 11 0>, /* G4/BUS4 */ + <10 0 &gpio0 17 0>, /* G5/BUS5 */ + <11 0 &gpio1 6 0>, /* G6/BUS6 */ + <12 0 &gpio1 4 0>, /* G7/BUS7 */ + <13 0 &gpio1 14 0>, /* G8 */ + <14 0 &gpio0 9 0>, /* G9/ADC_D-/CAM_HSYNC */ + <15 0 &gpio0 10 0>, /* G10/ADC_D+/CAM_VSYNC */ + //<16 NO CONNECTED /* G11/SWO */ + <17 0 &gpio0 20 0>; /* SPI_CS */ + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&uicr { + nfct-pins-as-gpios; + gpio-as-nreset; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + current-speed = <115200>; + status = "okay"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart1 { + compatible = "nordic,nrf-uarte"; + current-speed = <115200>; + status = "okay"; + pinctrl-0 = <&uart1_default>; + pinctrl-1 = <&uart1_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + status = "okay"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&i2c1 { + compatible = "nordic,nrf-twi"; + status = "okay"; + pinctrl-0 = <&i2c1_default>; + pinctrl-1 = <&i2c1_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&spi2 { + compatible = "nordic,nrf-spi"; + status = "okay"; + cs-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&qspi { + status = "okay"; + pinctrl-0 = <&qspi_default>; + pinctrl-1 = <&qspi_sleep>; + pinctrl-names = "default", "sleep"; + w25q128jv: w25q128jv@0 { + status="okay"; + compatible = "nordic,qspi-nor"; + reg = <0>; + writeoc = "pp4io"; + readoc = "read4io"; + sck-frequency = ; + jedec-id = [ef 70 18]; + size = ; + has-dpd; + t-enter-dpd = <3000>; + t-exit-dpd = <3000>; + }; +}; + +&ieee802154 { + status = "okay"; +}; + +&flash0 { + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x00010000>; + }; + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x00010000 0x00076000>; + }; + + slot1_partition: partition@86000 { + label = "image-1"; + reg = <0x00086000 0x00074000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + + storage_partition: partition@fA000 { + label = "storage"; + reg = <0x000fA000 0x00006000>; + }; + }; +}; + +zephyr_udc0: &usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; +}; + +// Sparkfun Micromod compatible pins +micromod_1_uart: &uart0 {}; +micromod_2_uart: &uart1 {}; +micromod_0_i2c: &i2c0 {}; +micromod_1_i2c: &i2c1 {}; +micromod_0_spi: &spi2 {}; diff --git a/boards/sparkfun/micromod/micromod_nrf52840.yaml b/boards/sparkfun/micromod/micromod_nrf52840.yaml new file mode 100644 index 00000000000..3afd6269313 --- /dev/null +++ b/boards/sparkfun/micromod/micromod_nrf52840.yaml @@ -0,0 +1,26 @@ +identifier: micromod/nrf52840 +name: Sparkfun Micromod nRF52840 board +type: mcu +arch: arm +ram: 256 +flash: 1024 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - ble + - gpio + - spi + - qspi + - i2c + - pwm + - adc + - usb_device + - usb_cdc + - watchdog + - micromod_gpio + - micromod_uart + - micromod_i2c + - micromod_spi +vendor: Sparkfun diff --git a/boards/sparkfun/micromod/micromod_nrf52840_defconfig b/boards/sparkfun/micromod/micromod_nrf52840_defconfig new file mode 100644 index 00000000000..f8f1759f51c --- /dev/null +++ b/boards/sparkfun/micromod/micromod_nrf52840_defconfig @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: Apache-2.0 + +# 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 console +CONFIG_CONSOLE=y + +# Enable UART +CONFIG_SERIAL=y diff --git a/boards/sparkfun/micromod/pre_dt_board.cmake b/boards/sparkfun/micromod/pre_dt_board.cmake new file mode 100644 index 00000000000..3369c21d3af --- /dev/null +++ b/boards/sparkfun/micromod/pre_dt_board.cmake @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Nordic Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +# Suppress "unique_unit_address_if_enabled" to handle the following overlaps: +# - power@40000000 & clock@40000000 & bprot@40000000 +# - acl@4001e000 & flash-controller@4001e000 +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") diff --git a/dts/bindings/gpio/sparkfun,micromod-gpio.yaml b/dts/bindings/gpio/sparkfun,micromod-gpio.yaml new file mode 100644 index 00000000000..ae0c290aee3 --- /dev/null +++ b/dts/bindings/gpio/sparkfun,micromod-gpio.yaml @@ -0,0 +1,51 @@ +# Copyright (c) 2024 Jerónimo Agulló +# SPDX-License-Identifier: Apache-2.0 + +description: | + GPIO pins exposed on micromod headers. + + The micromod standard leverages the M.2 connector with 76 pins for + swap between a myriad of supported boards and carriers. + + The micromod standard consists of two lanes with the following + supported buses: + * An 6-pin Power Supply header. No pins on this header are exposed + by this binding. + * Reset, Boot pins and SWD pins not exposed by this binding. + * 2 UART buses. First with RTS and CTS pins, while the 2nd with only + RX and TX pins. Neither of them are exposed by this binding. + * 2 i2c buses. Only the corresponding interrupt pin is exposed by + this binding. + * 2 SPI buses not exposed by this binding. Only SPI CS control pin + is exposed by this binding. + * Audio line not exposed by this binding. + * 2 analog pins (A0 and A1). + * 2 digital pins (D0 and D1). + * 12 General purpose pins (G0 - G11). + + This binding provides a nexus mapping for the analog, digital and + general purpose gpios in the order depicted below: + + - 00 -> A0 PIN 34 + - 01 -> A1 PIN 38 + - 02 -> D0 PIN 10 + - 03 -> D1/CAM_TRIG PIN 18 + - 04 -> I2C_INT# PIN 16 + - 05 -> G0/BUS0 PIN 40 + - 06 -> G1/BUS1 PIN 42 + - 07 -> G2/BUS2 PIN 44 + - 08 -> G3/BUS3 PIN 46 + - 09 -> G4/BUS4 PIN 48 + - 10 -> G5/BUS5 PIN 73 + - 11 -> G6/BUS6 PIN 71 + - 12 -> G7/BUS7 PIN 69 + - 13 -> G8 PIN 67 + - 14 -> G9/ADC_D-/CAM_HSYNC PIN 65 + - 15 -> G10/ADC_D+/CAM_VSYNC PIN 63 + - 16 -> G11/SWO PIN 8 + - 17 -> SPI_CS PIN 55 + + +compatible: "sparkfun,micromod-gpio" + +include: [gpio-nexus.yaml, base.yaml] diff --git a/tests/drivers/adc/adc_api/boards/micromod_nrf52840.overlay b/tests/drivers/adc/adc_api/boards/micromod_nrf52840.overlay new file mode 100644 index 00000000000..cbc9b08e0e8 --- /dev/null +++ b/tests/drivers/adc/adc_api/boards/micromod_nrf52840.overlay @@ -0,0 +1,7 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2024 Jerónimo Agulló + */ + +#include "nordic,nrf-saadc-common.dtsi"