From f3f851306d449f172b50b1dc5bcd1c87dc8c159b Mon Sep 17 00:00:00 2001 From: David Schneider Date: Sun, 4 May 2025 09:59:10 +0200 Subject: [PATCH] boards: waveshare: rp2040_plus: Initial support Add support for Waveshare RP2040 Plus board a Raspberry Pi Pico like board including a battery charger. Signed-off-by: David Schneider --- boards/waveshare/rp2040_plus/Kconfig | 5 + .../waveshare/rp2040_plus/Kconfig.defconfig | 13 ++ .../waveshare/rp2040_plus/Kconfig.rp2040_plus | 5 + boards/waveshare/rp2040_plus/board.cmake | 5 + boards/waveshare/rp2040_plus/board.yml | 6 + .../doc/img/rp2040_plus-details.webp | Bin 0 -> 38488 bytes .../rp2040_plus/doc/img/rp2040_plus.webp | Bin 0 -> 7946 bytes boards/waveshare/rp2040_plus/doc/index.rst | 94 ++++++++ .../rp2040_plus/rp2040_plus-pinctrl.dtsi | 57 +++++ boards/waveshare/rp2040_plus/rp2040_plus.dts | 200 ++++++++++++++++++ boards/waveshare/rp2040_plus/rp2040_plus.yaml | 23 ++ .../rp2040_plus/rp2040_plus_defconfig | 12 ++ .../adc/adc_api/boards/rp2040_plus.overlay | 30 +++ 13 files changed, 450 insertions(+) create mode 100644 boards/waveshare/rp2040_plus/Kconfig create mode 100644 boards/waveshare/rp2040_plus/Kconfig.defconfig create mode 100644 boards/waveshare/rp2040_plus/Kconfig.rp2040_plus create mode 100644 boards/waveshare/rp2040_plus/board.cmake create mode 100644 boards/waveshare/rp2040_plus/board.yml create mode 100644 boards/waveshare/rp2040_plus/doc/img/rp2040_plus-details.webp create mode 100644 boards/waveshare/rp2040_plus/doc/img/rp2040_plus.webp create mode 100644 boards/waveshare/rp2040_plus/doc/index.rst create mode 100644 boards/waveshare/rp2040_plus/rp2040_plus-pinctrl.dtsi create mode 100644 boards/waveshare/rp2040_plus/rp2040_plus.dts create mode 100644 boards/waveshare/rp2040_plus/rp2040_plus.yaml create mode 100644 boards/waveshare/rp2040_plus/rp2040_plus_defconfig create mode 100644 tests/drivers/adc/adc_api/boards/rp2040_plus.overlay diff --git a/boards/waveshare/rp2040_plus/Kconfig b/boards/waveshare/rp2040_plus/Kconfig new file mode 100644 index 00000000000..18f7b99232b --- /dev/null +++ b/boards/waveshare/rp2040_plus/Kconfig @@ -0,0 +1,5 @@ +# Copyright (c) 2025 David Schneider +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_RP2040_PLUS + select RP2_FLASH_W25Q080 diff --git a/boards/waveshare/rp2040_plus/Kconfig.defconfig b/boards/waveshare/rp2040_plus/Kconfig.defconfig new file mode 100644 index 00000000000..00b2c0b2402 --- /dev/null +++ b/boards/waveshare/rp2040_plus/Kconfig.defconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2025 David Schneider +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_RP2040_PLUS + +if I2C_DW + +config I2C_DW_CLOCK_SPEED + default 125 + +endif # I2C_DW + +endif # BOARD_RP2040_PLUS diff --git a/boards/waveshare/rp2040_plus/Kconfig.rp2040_plus b/boards/waveshare/rp2040_plus/Kconfig.rp2040_plus new file mode 100644 index 00000000000..d6c008f3dbf --- /dev/null +++ b/boards/waveshare/rp2040_plus/Kconfig.rp2040_plus @@ -0,0 +1,5 @@ +# Copyright (c) 2025 David Schneider +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_RP2040_PLUS + select SOC_RP2040 diff --git a/boards/waveshare/rp2040_plus/board.cmake b/boards/waveshare/rp2040_plus/board.cmake new file mode 100644 index 00000000000..4103e36e635 --- /dev/null +++ b/boards/waveshare/rp2040_plus/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(uf2 "--board-id=RPI-RP2") + +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) diff --git a/boards/waveshare/rp2040_plus/board.yml b/boards/waveshare/rp2040_plus/board.yml new file mode 100644 index 00000000000..7e3e098fa81 --- /dev/null +++ b/boards/waveshare/rp2040_plus/board.yml @@ -0,0 +1,6 @@ +board: + name: rp2040_plus + full_name: RP2040-Plus + vendor: waveshare + socs: + - name: rp2040 diff --git a/boards/waveshare/rp2040_plus/doc/img/rp2040_plus-details.webp b/boards/waveshare/rp2040_plus/doc/img/rp2040_plus-details.webp new file mode 100644 index 0000000000000000000000000000000000000000..ee717c82732a9468167f5c7ea704593f273d812f GIT binary patch literal 38488 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
=~;1kfY|zVP%$u_itO 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 literal 0 HcmV?d00001 diff --git a/boards/waveshare/rp2040_plus/doc/img/rp2040_plus.webp b/boards/waveshare/rp2040_plus/doc/img/rp2040_plus.webp new file mode 100644 index 0000000000000000000000000000000000000000..a0869238d2ba55e42c41aad805990f807eb77e17 GIT binary patch literal 7946 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 z +#include + +&pinctrl { + uart0_default: uart0_default { + group1 { + pinmux = ; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , ; + input-enable; + input-schmitt-enable; + }; + }; + + i2c1_default: i2c1_default { + group1 { + pinmux = , ; + input-enable; + input-schmitt-enable; + }; + }; + + spi0_default: spi0_default { + group1 { + pinmux = , , ; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + pwm_ch4b_default: pwm_ch4b_default { + group1 { + pinmux = ; + }; + }; + + adc_default: adc_default { + group1 { + pinmux = , , , ; + input-enable; + }; + }; +}; diff --git a/boards/waveshare/rp2040_plus/rp2040_plus.dts b/boards/waveshare/rp2040_plus/rp2040_plus.dts new file mode 100644 index 00000000000..2239f1fa7b4 --- /dev/null +++ b/boards/waveshare/rp2040_plus/rp2040_plus.dts @@ -0,0 +1,200 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include + +#include "rp2040_plus-pinctrl.dtsi" + +/ { + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,flash-controller = &ssi; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,code-partition = &code_partition; + }; + + aliases { + rtc = &rtc; + watchdog0 = &wdt0; + led0 = &led0; + pwm-led0 = &pwm_led0; + }; + + pico_header: connector { + compatible = "raspberrypi,pico-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpio0 0 0>, /* GP0 */ + <1 0 &gpio0 1 0>, /* GP1 */ + <2 0 &gpio0 2 0>, /* GP2 */ + <3 0 &gpio0 3 0>, /* GP3 */ + <4 0 &gpio0 4 0>, /* GP4 */ + <5 0 &gpio0 5 0>, /* GP5 */ + <6 0 &gpio0 6 0>, /* GP6 */ + <7 0 &gpio0 7 0>, /* GP7 */ + <8 0 &gpio0 8 0>, /* GP8 */ + <9 0 &gpio0 9 0>, /* GP9 */ + <10 0 &gpio0 10 0>, /* GP10 */ + <11 0 &gpio0 11 0>, /* GP11 */ + <12 0 &gpio0 12 0>, /* GP12 */ + <13 0 &gpio0 13 0>, /* GP13 */ + <14 0 &gpio0 14 0>, /* GP14 */ + <15 0 &gpio0 15 0>, /* GP15 */ + <16 0 &gpio0 16 0>, /* GP16 */ + <17 0 &gpio0 17 0>, /* GP17 */ + <18 0 &gpio0 18 0>, /* GP18 */ + <19 0 &gpio0 19 0>, /* GP19 */ + <20 0 &gpio0 20 0>, /* GP20 */ + <21 0 &gpio0 21 0>, /* GP21 */ + <22 0 &gpio0 22 0>, /* GP22 */ + <26 0 &gpio0 26 0>, /* GP26 */ + <27 0 &gpio0 27 0>, /* GP27 */ + <28 0 &gpio0 28 0>; /* GP28 */ + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; + label = "LED"; + }; + }; + + pwm_leds { + compatible = "pwm-leds"; + status = "disabled"; + pwm_led0: pwm_led_0 { + pwms = <&pwm 9 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "PWM_LED"; + }; + }; + + vbatt: vbatt { + compatible = "voltage-divider"; + io-channels = <&adc 3>; + output-ohms = <100000>; + full-ohms = <(200000 + 100000)>; + }; +}; + +&flash0 { + reg = <0x10000000 DT_SIZE_M(4)>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Reserved memory for the second stage bootloader */ + second_stage_bootloader: partition@0 { + label = "second_stage_bootloader"; + reg = <0x00000000 0x100>; + read-only; + }; + + /* + * Usable flash. Starts at 0x100, after the bootloader. The partition + * size is 4MB minus the 0x100 bytes taken by the bootloader. + */ + code_partition: partition@100 { + label = "code-partition"; + reg = <0x100 (DT_SIZE_M(4) - 0x100)>; + read-only; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&i2c0 { + status = "okay"; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; + clock-frequency = ; +}; + +&i2c1 { + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; + clock-frequency = ; +}; + +&spi0 { + clock-frequency = ; + status = "okay"; + pinctrl-0 = <&spi0_default>; + pinctrl-names = "default"; +}; + +&timer { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&rtc { + clocks = <&clocks RPI_PICO_CLKID_CLK_RTC>; + status = "okay"; +}; + +&adc { + status = "okay"; + pinctrl-0 = <&adc_default>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + + channel@3 { + reg = <3>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; + + channel@4 { + reg = <4>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; +}; + +zephyr_udc0: &usbd { + status = "okay"; +}; + +&pwm { + pinctrl-0 = <&pwm_ch4b_default>; + pinctrl-names = "default"; +}; + +&vreg { + regulator-always-on; + regulator-allowed-modes = ; +}; + +pico_spi: &spi0 {}; +pico_i2c0: &i2c0 {}; +pico_i2c1: &i2c1 {}; +pico_serial: &uart0 {}; diff --git a/boards/waveshare/rp2040_plus/rp2040_plus.yaml b/boards/waveshare/rp2040_plus/rp2040_plus.yaml new file mode 100644 index 00000000000..d31f78c91a8 --- /dev/null +++ b/boards/waveshare/rp2040_plus/rp2040_plus.yaml @@ -0,0 +1,23 @@ +identifier: rp2040_plus +name: Waveshare RP2040-Plus +type: mcu +arch: arm +flash: 4096 +ram: 264 +toolchain: + - zephyr + - gnuarmemb +supported: + - uart + - gpio + - adc + - i2c + - spi + - hwinfo + - watchdog + - pwm + - flash + - dma + - counter + - clock + - usbd diff --git a/boards/waveshare/rp2040_plus/rp2040_plus_defconfig b/boards/waveshare/rp2040_plus/rp2040_plus_defconfig new file mode 100644 index 00000000000..ec7e8e3f931 --- /dev/null +++ b/boards/waveshare/rp2040_plus/rp2040_plus_defconfig @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_BUILD_OUTPUT_HEX=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_RESET=y +CONFIG_CLOCK_CONTROL=y diff --git a/tests/drivers/adc/adc_api/boards/rp2040_plus.overlay b/tests/drivers/adc/adc_api/boards/rp2040_plus.overlay new file mode 100644 index 00000000000..4c8059422a4 --- /dev/null +++ b/tests/drivers/adc/adc_api/boards/rp2040_plus.overlay @@ -0,0 +1,30 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + zephyr,user { + io-channels = <&adc 0>, <&adc 1>; + }; +}; + +&adc { + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; + + channel@1 { + reg = <1>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; +};