diff --git a/boards/raytac/mdbt50q_cx_40_dongle/CMakeLists.txt b/boards/raytac/mdbt50q_cx_40_dongle/CMakeLists.txt new file mode 100644 index 00000000000..218a0602483 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/CMakeLists.txt @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: Apache-2.0 + +zephyr_library() +zephyr_library_sources(board.c) diff --git a/boards/raytac/mdbt50q_cx_40_dongle/Kconfig b/boards/raytac/mdbt50q_cx_40_dongle/Kconfig new file mode 100644 index 00000000000..36da7f834a6 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/Kconfig @@ -0,0 +1,16 @@ +# Raytac MDBT50Q-CX Dongle NRF52840 board configuration +# +# Copyright (c) 2018-2023 Nordic Semiconductor ASA +# Copyright (c) 2025 Raytac Corporation. +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_RAYTAC_MDBT50Q_CX_40_DONGLE + +config BOARD_HAS_NRF5_BOOTLOADER + bool "Board has nRF5 bootloader" + default y + help + If selected, applications are linked so that they can be loaded by Nordic + nRF5 bootloader. + +endif # BOARD_RAYTAC_MDBT50Q_CX_40_DONGLE diff --git a/boards/raytac/mdbt50q_cx_40_dongle/Kconfig.defconfig b/boards/raytac/mdbt50q_cx_40_dongle/Kconfig.defconfig new file mode 100644 index 00000000000..ddfe9b77256 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/Kconfig.defconfig @@ -0,0 +1,27 @@ +# Raytac MDBT50Q-CX-40 Dongle NRF52840 board configuration +# +# Copyright (c) 2018-2023 Nordic Semiconductor ASA +# Copyright (c) 2025 Raytac Corporation +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_RAYTAC_MDBT50Q_CX_40_DONGLE + +# To let the nRF5 bootloader load an application, the application +# must be linked after Nordic MBR, that is factory-programmed on the board. + +# Nordic nRF5 bootloader exists outside of the partitions specified in the +# DTS file, so we manually override FLASH_LOAD_OFFSET to link the application +# correctly, after Nordic MBR. + +# When building MCUBoot, MCUBoot itself will select USE_DT_CODE_PARTITION +# which will make it link into the correct partition specified in DTS file, +# the offset is applied here so that the full partition size can be used when +# the bootloader Kconfig option has been disabled. + +config FLASH_LOAD_OFFSET + default 0x1000 + depends on BOARD_HAS_NRF5_BOOTLOADER && (MCUBOOT || !USE_DT_CODE_PARTITION) + +source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig" + +endif # BOARD_RAYTAC_MDBT50Q_CX_40_DONGLE diff --git a/boards/raytac/mdbt50q_cx_40_dongle/Kconfig.raytac_mdbt50q_cx_40_dongle b/boards/raytac/mdbt50q_cx_40_dongle/Kconfig.raytac_mdbt50q_cx_40_dongle new file mode 100644 index 00000000000..416aa75a1b5 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/Kconfig.raytac_mdbt50q_cx_40_dongle @@ -0,0 +1,8 @@ +# Raytac MDBT50Q-CX-40 Dongle nRF52840 board configuration +# +# Copyright (c) 2018 Nordic Semiconductor ASA +# Copyright (c) 2025 Raytac Corporation +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_RAYTAC_MDBT50Q_CX_40_DONGLE + select SOC_NRF52840_QIAA diff --git a/boards/raytac/mdbt50q_cx_40_dongle/board.c b/boards/raytac/mdbt50q_cx_40_dongle/board.c new file mode 100644 index 00000000000..04c1abe7f6f --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/board.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA. + * Copyright (c) 2025 Raytac Corporation. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +void board_early_init_hook(void) +{ + /* if the raytac_mdbt50q_cx_40_dongle is powered from USB + * (high voltage mode), GPIO output voltage is set to 1.8 volts by + * default and that is not enough to turn the LEDs on. + * Increase GPIO voltage to 3.0 volts. + */ + if ((nrf_power_mainregstatus_get(NRF_POWER) == + NRF_POWER_MAINREGSTATUS_HIGH) && + ((NRF_UICR->REGOUT0 & UICR_REGOUT0_VOUT_Msk) == + (UICR_REGOUT0_VOUT_DEFAULT << UICR_REGOUT0_VOUT_Pos))) { + + NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos; + while (NRF_NVMC->READY == NVMC_READY_READY_Busy) { + __NOP(); + } + + NRF_UICR->REGOUT0 = + (NRF_UICR->REGOUT0 & ~((uint32_t)UICR_REGOUT0_VOUT_Msk)) | + (UICR_REGOUT0_VOUT_3V0 << UICR_REGOUT0_VOUT_Pos); + + NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos; + while (NRF_NVMC->READY == NVMC_READY_READY_Busy) { + __NOP(); + } + + /* a reset is required for changes to take effect */ + NVIC_SystemReset(); + } +} diff --git a/boards/raytac/mdbt50q_cx_40_dongle/board.cmake b/boards/raytac/mdbt50q_cx_40_dongle/board.cmake new file mode 100644 index 00000000000..b052a8936bf --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/board.cmake @@ -0,0 +1,9 @@ +# Copyright (c) 2018-2023 Nordic Semiconductor ASA +# 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/nrfutil.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) diff --git a/boards/raytac/mdbt50q_cx_40_dongle/board.yml b/boards/raytac/mdbt50q_cx_40_dongle/board.yml new file mode 100644 index 00000000000..7d320d72e92 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/board.yml @@ -0,0 +1,6 @@ +board: + name: raytac_mdbt50q_cx_40_dongle + full_name: MDBT50Q-CX-40 Dongle + vendor: raytac + socs: + - name: nrf52840 diff --git a/boards/raytac/mdbt50q_cx_40_dongle/doc/img/raytac_mdbt50q_cx_40_dongle.webp b/boards/raytac/mdbt50q_cx_40_dongle/doc/img/raytac_mdbt50q_cx_40_dongle.webp new file mode 100644 index 00000000000..4bc0abb90b7 Binary files /dev/null and b/boards/raytac/mdbt50q_cx_40_dongle/doc/img/raytac_mdbt50q_cx_40_dongle.webp differ diff --git a/boards/raytac/mdbt50q_cx_40_dongle/doc/img/raytac_mdbt50q_cx_40_dongle_button_led.webp b/boards/raytac/mdbt50q_cx_40_dongle/doc/img/raytac_mdbt50q_cx_40_dongle_button_led.webp new file mode 100644 index 00000000000..bd88377bfce Binary files /dev/null and b/boards/raytac/mdbt50q_cx_40_dongle/doc/img/raytac_mdbt50q_cx_40_dongle_button_led.webp differ diff --git a/boards/raytac/mdbt50q_cx_40_dongle/doc/index.rst b/boards/raytac/mdbt50q_cx_40_dongle/doc/index.rst new file mode 100644 index 00000000000..ba046fb55b7 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/doc/index.rst @@ -0,0 +1,296 @@ +.. zephyr:board:: raytac_mdbt50q_cx_40_dongle + +Overview +******** + +The Raytac MDBT50Q-CX-40 Dongle hardware provides support for the Nordic +Semiconductor nRF52840 ARM Cortex-M4F CPU and the following devices: + +- Nordic nRF52840 SoC Solution Dongle +- A recommended 3rd-party module by Nordic Semiconductor. +- BT5.4 & BT5.2 & BT5.1 & BT5 Bluetooth Specification Certified. +- Type C USB +- Supports Open Bootloader +- Supports BT5 Long Range Feature +- Deployed Raytac MDBT50Q-P1M Module +- Certifications: FCC, IC, CE, UKCA, Telec (MIC), KC, SRRC, NCC, RCM, WPC +- 32-bit ARM® Cortex™ M4F CPU +- 1MB Flash Memory / 256kB RAM +- RoHS & Reach Compliant. +- Dimension:26.2 x 15.1 x 6.8 mm (excluding Type C USB Connector) +- Highly flexible multiprotocol SoC ideally suited for Bluetooth® Low Energy, + ANT+, Zigbee, Thread (802.15.4) ultra low-power wireless applications. + +Hardware +******** + +The ``raytac_mdbt50q_cx_40_dongle/nrf52840`` board target 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 +================== + +.. zephyr:board-supported-hw:: + +Connections and IOs +=================== + +LED +--- + +* LED0 ( blue ) = P0.8 +* LED1 ( blue ) = P0.6 (No pasted components by default) + +Push buttons +------------ + +* BUTTON1 = SW1 = P1.6 + +Programming and Debugging +************************* + +.. zephyr:board-supported-runners:: + +Applications for the ``raytac_mdbt50q_cx_40_dongle/nrf52840`` board target can be +built in the usual way (see :ref:`build_an_application` for more details). + +Flashing +======== + +The board supports the following programming options: + +1. Using the built-in bootloader only +2. Using MCUboot in serial recovery mode +3. Using an external :ref:`debug probe ` + +These instructions use the :ref:`west ` tool and assume you are in the +root directory of your :term:`west installation`. + +Option 1: Using the Built-In Bootloader Only +-------------------------------------------- + +The board is factory-programmed with Open bootloader from Nordic's nRF5 +SDK. With this option, you'll use Nordic's `nrfutil`_ program to create +firmware packages supported by this bootloader and flash them to the +device. Make sure ``nrfutil`` is installed before proceeding. + +#. Hold the button and plug it into the USB socket in the bootloader. + + The push button is on the far side of the board from the USB connector. Note + that the button does not face up. You will have to push it from the outside + in, towards the USB connector: + + .. image:: img/raytac_mdbt50q_cx_40_dongle_button_led.webp + :alt: Location of the user button and LED. + + The red LED should start a fade pattern, signalling the bootloader is + running. + +#. Compile a Zephyr application; we'll use :zephyr:code-sample:`blinky`. + + .. zephyr-app-commands:: + :app: zephyr/samples/basic/blinky + :board: raytac_mdbt50q_cx_40_dongle/nrf52840 + :goals: build + +#. Package the application for the bootloader using ``nrfutil``: + + .. code-block:: console + + nrfutil nrf5sdk-tools pkg generate \ + --hw-version 52 \ + --sd-req=0x00 \ + --application build/zephyr/zephyr.hex \ + --application-version 1 \ + blinky.zip + +#. Flash it onto the board. Note :file:`/dev/ttyACM0` is for Linux; it will be + something like ``COMx`` on Windows, and something else on macOS. + + .. code-block:: console + + nrfutil nrf5sdk-tools dfu usb-serial -pkg blinky.zip -p /dev/ttyACM0 + + When this command exits, observe the green LED on the board blinking, + instead of the red LED used by the bootloader. + +For more information, see `Nordic Semiconductor USB DFU`_. + +Option 2: Using MCUboot in Serial Recovery Mode +----------------------------------------------- + +It is also possible to use the MCUboot bootloader with this board to flash +Zephyr applications. You need to do some one-time set-up to build and flash +MCUboot on your board. From that point on, you can build and flash other Zephyr +applications using MCUboot's serial recovery mode. This process does not +overwrite the built-in Nordic bootloader, so you can always go back to using +Option 1 later. + +Install `nrfutil`_ and `mcumgr`_ first, and make sure MCUboot's ``imgtool`` is +available for signing your binary for MCUboot as described on :ref:`west-sign`. + +Next, do the **one-time setup** to flash MCUboot. We'll assume you've cloned +the `MCUboot`_ repository into the directory ``mcuboot``, and that it is next +to the zephyr repository on your computer. + +#. Reset the board into the Nordic bootloader as described above. + +#. Compile MCUboot as a Zephyr application. + + .. zephyr-app-commands:: + :app: mcuboot/boot/zephyr + :board: raytac_mdbt50q_cx_40_dongle/nrf52840 + :build-dir: mcuboot + :goals: build + +#. Package the application for the bootloader using ``nrfutil``: + + .. code-block:: console + + nrfutil nrf5sdk-tools pkg generate \ + --hw-version 52 \ + --sd-req=0x00 \ + --application build/mcuboot/zephyr/zephyr.hex \ + --application-version 1 \ + mcuboot.zip + +#. Flash it onto the board. Note :file:`/dev/ttyACM0` is for Linux; it will be + something like ``COMx`` on Windows, and something else on macOS. + + .. code-block:: console + + nrfutil nrf5sdk-tools dfu usb-serial -pkg mcuboot.zip -p /dev/ttyACM0 + +You can now flash a Zephyr application to the board using MCUboot's serial +recovery mode. We'll use the :zephyr:code-sample:`smp-svr` sample since it's ready to be +compiled for chain-loading by MCUboot (and itself supports firmware updates +over Bluetooth). + +#. Boot into MCUboot serial recovery mode by plugging the board in with the SW1 + button pressed down. See above for a picture showing where SW1 is. + + A serial port will enumerate on your board. On Windows, "MCUBOOT" should + appear under "Other Devices" in the Device Manager (in addition to the usual + ``COMx`` device). On Linux, something like + :file:`/dev/serial/by-id/usb-ZEPHYR_MCUBOOT_0.01-if00` should be created. + + If no serial port appears, try plugging it in again, making sure SW1 is + pressed. If it still doesn't appear, retry the one-time MCUboot setup. + +#. Compile ``smp_svr``. + + .. zephyr-app-commands:: + :app: zephyr/samples/subsys/mgmt/mcumgr/smp_svr + :board: raytac_mdbt50q_cx_40_dongle/nrf52840 + :build-dir: smp_svr + :goals: build + +#. Sign ``smp_svr`` for chain-loading by MCUboot. + + .. code-block:: console + + west sign -t imgtool --bin --no-hex -d build/smp_svr \ + -B smp_svr.signed.bin -- --key mcuboot/root-rsa-2048.pem + +#. Flash the application to the MCUboot serial port using ``mcumgr``: + + .. code-block:: console + + mcumgr --conntype=serial --connstring='dev=/dev/ttyACM0,baud=115200' \ + image upload -e smp_svr.signed.bin + +#. Reset the device: + + .. code-block:: console + + mcumgr --conntype=serial --connstring='dev=/dev/ttyACM0,baud=115200' reset + +You should now be able to scan for Bluetooth devices using a smartphone or +computer. The device you just flashed will be listed with ``Zephyr`` in its +name. + +.. note:: + + This board supports building other Zephyr applications for flashing with + MCUboot in this way also. Just make sure :kconfig:option:`CONFIG_BOOTLOADER_MCUBOOT` + is set when building your application. For example, to compile blinky for + loading by MCUboot, use this: + + .. zephyr-app-commands:: + :app: zephyr/samples/basic/blinky + :board: raytac_mdbt50q_cx_40_dongle/nrf52840 + :build-dir: blinky + :goals: build + :gen-args: -DCONFIG_BOOTLOADER_MCUBOOT=y + + You can then sign and flash it using the steps above. + +Option 3: Using an External Debug Probe +--------------------------------------- + +If you have one, you can also use an external :ref:`debug probe ` +to flash and debug Zephyr applications, but you need to solder an SWD header +onto the back side of the board. + +For Segger J-Link debug probes, 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`. + +Locate the DTS file: :``boards/raytac/raytac_mdbt50q_cx_40_dongle_nrf52840.dts``. +This file requires a small modification to use a different partition table. +Edit the include directive to include "fstab-debugger" instead of "fstab-stock". + +In addition, the Kconfig file in the same directory must be modified by setting +``BOARD_HAS_NRF5_BOOTLOADER`` to be default ``n``, otherwise the code will be +flashed with an offset. + +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 :zephyr:code-sample:`blinky` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: raytac_mdbt50q_cx_40_dongle/nrf52840 + :goals: build flash + +Observe the LED on the board blinking. + +Debugging +========= + +The ``raytac_mdbt50q_cx_40_dongle/nrf52840`` board does not have an on-board J-Link debug IC +as some nRF5x development boards, however, instructions from the +:ref:`nordic_segger` page also apply to this board, with the additional step +of connecting an external debugger. + +Testing the LEDs and buttons on the Raytac MDBT50Q-CX-40 Dongle +*************************************************************** + +There are 2 samples that allow you to test that the buttons (switches) and LEDs on +the board are working properly with Zephyr: + +* :zephyr:code-sample:`blinky` +* :zephyr:code-sample:`button` + +You can build and program the examples to make sure Zephyr is running correctly +on your board. + + +References +********** + +.. target-notes:: + +.. _Raytac MDBT50Q-CX-40 Dongle website: + https://www.raytac.com/product/ins.php?index_id=156 +.. _Raytac MDBT50Q-CX-40 Dongle Spec: https://www.raytac.com/download/index.php?index_id=72 +.. _Raytac MDBT50Q-CX-40 Dongle Hardware description: https://www.raytac.com/product/ins.php?index_id=156 +.. _Nordic Semiconductor USB DFU: + https://docs.nordicsemi.com/bundle/sdk_nrf5_v17.1.0/page/sdk_app_serial_dfu_bootloader.html +.. _nrfutil: + https://www.nordicsemi.com/Products/Development-tools/nrf-util +.. _MCUboot: + https://github.com/JuulLabs-OSS/mcuboot +.. _mcumgr: + https://github.com/apache/mynewt-mcumgr-cli diff --git a/boards/raytac/mdbt50q_cx_40_dongle/fstab-debugger.dtsi b/boards/raytac/mdbt50q_cx_40_dongle/fstab-debugger.dtsi new file mode 100644 index 00000000000..dd3d12403c6 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/fstab-debugger.dtsi @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* Flash partition table without support for Nordic nRF5 bootloader */ + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* The size of this partition ensures that MCUBoot can be built + * with an RTT console, CDC ACM support, and w/o optimizations. + */ + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x00012000>; + }; + + slot0_partition: partition@12000 { + label = "image-0"; + reg = <0x00012000 0x00075000>; + }; + + slot1_partition: partition@87000 { + label = "image-1"; + reg = <0x00087000 0x00075000>; + }; + + storage_partition: partition@fc000 { + label = "storage"; + reg = <0x000fc000 0x00004000>; + }; + }; +}; diff --git a/boards/raytac/mdbt50q_cx_40_dongle/fstab-stock.dtsi b/boards/raytac/mdbt50q_cx_40_dongle/fstab-stock.dtsi new file mode 100644 index 00000000000..7c16ea6ab8a --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/fstab-stock.dtsi @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2018-2023 Nordic Semiconductor ASA + * Copyright (c) 2025 Raytac Corporation. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* Flash partition table compatible with Nordic nRF5 bootloader */ + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* MCUboot placed after Nordic MBR (this is set with the FLASH_LOAD_OFFSET + * Kconfig value when BOARD_HAS_NRF5_BOOTLOADER is enabled), otherwise MCUboot + * will be placed at 0x0. The size of this partition ensures that MCUBoot can + * be built with CDC ACM support and w/o optimizations. + */ + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x00010000>; + }; + + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x00010000 0x00066000>; + }; + + slot1_partition: partition@76000 { + label = "image-1"; + reg = <0x00076000 0x00066000>; + }; + + storage_partition: partition@dc000 { + label = "storage"; + reg = <0x000f0000 0x00004000>; + }; + + /* Nordic nRF5 bootloader <0xf4000 0xa000> + * + * In addition, the last and second last flash pages + * are used by the nRF5 bootloader and MBR to store settings. + */ + }; +}; diff --git a/boards/raytac/mdbt50q_cx_40_dongle/pre_dt_board.cmake b/boards/raytac/mdbt50q_cx_40_dongle/pre_dt_board.cmake new file mode 100644 index 00000000000..3369c21d3af --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/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/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840-pinctrl.dtsi b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840-pinctrl.dtsi new file mode 100644 index 00000000000..ecf992611e5 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840-pinctrl.dtsi @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018-2023 Nordic Semiconductor ASA + * Copyright (c) 2025 Raytac Corporation. + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + ; + }; + + group2 { + psels = , + ; + bias-pull-up; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + pwm0_default: pwm0_default { + group1 { + psels = , + ; + nordic,invert; + }; + }; + + pwm0_sleep: pwm0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840.dts b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840.dts new file mode 100644 index 00000000000..5033b663707 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840.dts @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2018-2023 Nordic Semiconductor ASA + * Copyright (c) 2017 Linaro Limited + * Copyright (c) 2025 Raytac Corporation. + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "raytac_mdbt50q_cx_40_dongle_nrf52840-pinctrl.dtsi" +#include +/ { + model = "raytac_mdbt50q_cx_40_dongle_nrf52840"; + compatible = "raytac,raytac-mdbt50q-cx-40-dongle-nrf52840"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,ieee802154 = &ieee802154; + }; + + leds { + compatible = "gpio-leds"; + + led0_d1: led_0 { + gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; + label = "LED D1"; + }; + + led1_d2: led_1 { + gpios = <&gpio0 8 GPIO_ACTIVE_LOW>; + label = "LED D2"; + }; + }; + + pwmleds { + compatible = "pwm-leds"; + + d1_pwm_led: pwm_led_0 { + pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + }; + + d2_pwm_led: pwm_led_1 { + pwms = <&pwm0 1 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + }; + }; + + buttons { + compatible = "gpio-keys"; + + button0: button_0 { + gpios = <&gpio1 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button switch 0"; + zephyr,code = ; + }; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + sw0 = &button0; + led0 = &led0_d1; + led1 = &led1_d2; + led0-green = &led0_d1; + led1-red = &led1_d2; + pwm-led0 = &d1_pwm_led; + pwm-led1 = &d2_pwm_led; + red-pwm-led = &d2_pwm_led; + green-pwm-led = &d1_pwm_led; + mcuboot-button0 = &button0; + mcuboot-led0 = &led0_d1; + watchdog0 = &wdt0; + }; +}; + +®0 { + status = "disabled"; +}; + +®1 { + regulator-initial-mode = <0>; +}; + +&gpiote { + status = "okay"; +}; + +&uicr { + nfct-pins-as-gpios; + gpio-as-nreset; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&ieee802154 { + status = "okay"; +}; + +/* Include flash partition table. + * Two partition tables are available: + * fstab-stock -compatible with Nordic nRF5 bootloader, default + * fstab-debugger -to use an external debugger, w/o the nRF5 bootloader + */ +#include "fstab-stock.dtsi" + +zephyr_udc0: &usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; +}; + +#include <../boards/common/usb/cdc_acm_serial.dtsi> diff --git a/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840.yaml b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840.yaml new file mode 100644 index 00000000000..90e1c1cde51 --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840.yaml @@ -0,0 +1,23 @@ +# Copyright (c) 2018-2023 Nordic Semiconductor ASA +# Copyright (c) 2025 Raytac Corporation. +# SPDX-License-Identifier: Apache-2.0 + +identifier: raytac_mdbt50q_cx_40_dongle/nrf52840 +name: Raytac MDBT50Q-CX-40 Dongle +type: mcu +arch: arm +ram: 256 +flash: 1024 +toolchain: + - zephyr + - gnuarmemb +supported: + - usb_device + - usb_cdc + - ble + - pwm + - watchdog + - counter + - netif:openthread + - gpio +vendor: raytac diff --git a/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840_defconfig b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840_defconfig new file mode 100644 index 00000000000..d0b5322cfeb --- /dev/null +++ b/boards/raytac/mdbt50q_cx_40_dongle/raytac_mdbt50q_cx_40_dongle_nrf52840_defconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable GPIO +CONFIG_GPIO=y + +# Board Kconfig.defconfig enables USB CDC ACM and should disable USB remote +# wakeup by default. It needs to be disabled here, because the USB nrfx +# driver always overwrites option from Kconfig mentioned above with the +# imply from CONFIG_USB_NRFX. +CONFIG_USB_DEVICE_REMOTE_WAKEUP=n