From 8d55e73808acce2920fd721ad84f5df52c181f7d Mon Sep 17 00:00:00 2001 From: Shan Pen Date: Wed, 21 May 2025 20:13:07 +0800 Subject: [PATCH] boards: ruiside: RA8D1 Vision Board: add support this is another board from ruiside, tested uart, button, led, sdram, sd card Signed-off-by: Shan Pen --- .../ra8d1_vision_board/Kconfig.defconfig | 13 ++ .../Kconfig.ra8d1_vision_board | 5 + boards/ruiside/ra8d1_vision_board/board.cmake | 7 + boards/ruiside/ra8d1_vision_board/board.yml | 6 + .../ruiside/ra8d1_vision_board/doc/index.rst | 96 ++++++++ .../doc/ra8d1_vision_board.webp | Bin 0 -> 41624 bytes .../ra8d1_vision_board-pinctrl.dtsi | 130 +++++++++++ .../ra8d1_vision_board/ra8d1_vision_board.dts | 219 ++++++++++++++++++ .../ra8d1_vision_board.yaml | 15 ++ .../ra8d1_vision_board_defconfig | 11 + tests/drivers/memc/ram/testcase.yaml | 4 +- 11 files changed, 505 insertions(+), 1 deletion(-) create mode 100644 boards/ruiside/ra8d1_vision_board/Kconfig.defconfig create mode 100644 boards/ruiside/ra8d1_vision_board/Kconfig.ra8d1_vision_board create mode 100644 boards/ruiside/ra8d1_vision_board/board.cmake create mode 100644 boards/ruiside/ra8d1_vision_board/board.yml create mode 100644 boards/ruiside/ra8d1_vision_board/doc/index.rst create mode 100644 boards/ruiside/ra8d1_vision_board/doc/ra8d1_vision_board.webp create mode 100644 boards/ruiside/ra8d1_vision_board/ra8d1_vision_board-pinctrl.dtsi create mode 100644 boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.dts create mode 100644 boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.yaml create mode 100644 boards/ruiside/ra8d1_vision_board/ra8d1_vision_board_defconfig diff --git a/boards/ruiside/ra8d1_vision_board/Kconfig.defconfig b/boards/ruiside/ra8d1_vision_board/Kconfig.defconfig new file mode 100644 index 00000000000..1305f828c36 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/Kconfig.defconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2025 Shan Pen +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_RA8D1_VISION_BOARD + +if DISK_DRIVER_SDMMC + +config SD_CMD_TIMEOUT + default 1000 + +endif # DISK_DRIVER_SDMMC + +endif # BOARD_RA8D1_VISION_BOARD diff --git a/boards/ruiside/ra8d1_vision_board/Kconfig.ra8d1_vision_board b/boards/ruiside/ra8d1_vision_board/Kconfig.ra8d1_vision_board new file mode 100644 index 00000000000..79b9537d9c1 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/Kconfig.ra8d1_vision_board @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Shan Pen +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_RA8D1_VISION_BOARD + select SOC_R7FA8D1BHECBD diff --git a/boards/ruiside/ra8d1_vision_board/board.cmake b/boards/ruiside/ra8d1_vision_board/board.cmake new file mode 100644 index 00000000000..50fa8d9c031 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/board.cmake @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +# keep first +board_runner_args(pyocd "--target=R7FA8D1BH") + +# keep first +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) diff --git a/boards/ruiside/ra8d1_vision_board/board.yml b/boards/ruiside/ra8d1_vision_board/board.yml new file mode 100644 index 00000000000..779834f7fe6 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/board.yml @@ -0,0 +1,6 @@ +board: + name: ra8d1_vision_board + full_name: RA8D1 Vision Board + vendor: ruiside + socs: + - name: r7fa8d1bhecbd diff --git a/boards/ruiside/ra8d1_vision_board/doc/index.rst b/boards/ruiside/ra8d1_vision_board/doc/index.rst new file mode 100644 index 00000000000..9e7ff464e90 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/doc/index.rst @@ -0,0 +1,96 @@ +.. zephyr:board:: ra8d1_vision_board + +Overview +******** + +The RA8D1-VISION-BOARD, based on the Renesas Cortex-M85 architecture RA8D1 chip, offers +engineers a flexible and comprehensive development platform, empowering them to explore the realm of +machine vision more deeply. + +Key Features + +- Arm Cortex-M85 +- 480MHz frequency, on-chip 2Mb Flash, 1Mb SRAM +- 32Mb-SDRAM; 8Mb-QSPI Flash +- MIPI-DSI; RGB666; 8bit Camera +- On-board DAP-LINK debugger with CMSIS-DAP +- Raspberry Pi Interface + +More information about the board can be found at the `RA8D1-VISION-BOARD website`_. + +Hardware +******** +Detailed Hardware features for the RA8D1 MCU group can be found at `RA8D1 Group User's Manual Hardware`_ + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Default Zephyr Peripheral Mapping: +---------------------------------- + +The RA8D1-VISION-BOARD board features a On-board CMSIS-DAP debugger/programmer. Board is configured as follows: + +- UART9 TX/RX : P209/P208 (CMSIS-DAP Virtual Port Com) +- LED0 : P102 +- LED1 : P106 +- LED2 : PA07 +- USER BUTTON : P907 + +Programming and Debugging +************************* + +.. zephyr:board-supported-runners:: + +Applications for the ``ra8d1_vision_board`` board 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. + +**Note:** Only support from SDK v0.16.6 in which GCC for Cortex Arm-M85 was available. +To build for RA8D1-VISION-BOARD user need to get and install GNU Arm Embedded toolchain from https://github.com/zephyrproject-rtos/sdk-ng/releases/tag/v0.16.6 + +Flashing +======== + +Program can be flashed to RA8D1-VISION-BOARD via the on-board DAP-LINK debugger. + +Linux users: to fix the permission issue, simply add the following udev rule for the +CMSIS-DAP interface: + +.. code-block:: console + + $ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0416", ATTR{idProduct}=="7687", MODE:="666"' > /etc/udev/rules.d/50-cmsis-dap.rules + +To flash the program to board + +1. Connect to DAP-LINK via USB port to host PC + +2. Execute west command + + .. code-block:: console + + west flash + +Debugging +========= + +You can debug an application in the usual way. Here is an example for the +:zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: ra8d1_vision_board + :maybe-skip-config: + :goals: debug + +References +********** +.. target-notes:: + +.. _RA8D1-VISION-BOARD Website: + https://github.com/RT-Thread-Studio/sdk-bsp-ra8d1-vision-board + +.. _RA8D1 Group User's Manual Hardware: + https://www.renesas.com/us/en/document/mah/ra8d1-group-users-manual-hardware diff --git a/boards/ruiside/ra8d1_vision_board/doc/ra8d1_vision_board.webp b/boards/ruiside/ra8d1_vision_board/doc/ra8d1_vision_board.webp new file mode 100644 index 0000000000000000000000000000000000000000..1c1dafef60cf20f18cfc2a387cc7670526de3167 GIT binary patch literal 41624 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 literal 0 HcmV?d00001 diff --git a/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board-pinctrl.dtsi b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board-pinctrl.dtsi new file mode 100644 index 00000000000..d5de306a80a --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board-pinctrl.dtsi @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2025 Shan Pen + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + sci9_default: sci9_default { + group1 { + /* tx */ + psels = ; + drive-strength = "medium"; + }; + + group2 { + /* rx */ + psels = ; + }; + }; + + sdram_default: sdram_default { + group1 { + /* SDRAM_DQM1 */ + psels = , + /* SDRAM_CKE */ + , + /* SDRAM_WE */ + , + /* SDRAM_CS */ + , + /* SDRAM_A0 */ + , + /* SDRAM_A1 */ + , + /* SDRAM_A2 */ + , + /* SDRAM_A3 */ + , + /* SDRAM_A4 */ + , + /* SDRAM_A5 */ + , + /* SDRAM_A6 */ + , + /* SDRAM_A7 */ + , + /* SDRAM_A8 */ + , + /* SDRAM_A9 */ + , + /* SDRAM_A10 */ + , + /* SDRAM_A11 */ + , + /* SDRAM_A12 */ + , + /* SDRAM_A13 */ + , + /* SDRAM_A14 */ + , + /* SDRAM_A15 */ + , + /* SDRAM_D0 */ + , + /* SDRAM_D1 */ + , + /* SDRAM_D2 */ + , + /* SDRAM_D3 */ + , + /* SDRAM_D4 */ + , + /* SDRAM_D5 */ + , + /* SDRAM_D6 */ + , + /* SDRAM_D8 */ + , + /* SDRAM_D9 */ + , + /* SDRAM_D10 */ + , + /* SDRAM_D11 */ + , + /* SDRAM_D12 */ + , + /* SDRAM_D13 */ + , + /* SDRAM_D14 */ + , + /* SDRAM_RAS */ + , + /* SDRAM_CAS */ + ; + drive-strength = "high"; + }; + + group2 { + /* SDRAM_SDCLK */ + psels = ; + drive-strength = "highspeed-high"; + }; + + group3 { + /* SDRAM_D7 */ + psels = , + /* SDRAM_D15 */ + , + /* SDRAM_DQM0 */ + ; + drive-strength = "high"; + }; + }; + + sdhc1_default: sdhc1_default { + group1 { + psels = , /* SDCD */ + , /* SDCMD */ + , /* SDDATA0 */ + , /* SDDATA1 */ + , /* SDDATA2 */ + ; /* SDDATA3 */ + drive-strength = "high"; + }; + + group2 { + psels = ; /* SDCLK */ + drive-strength = "highspeed-high"; + }; + }; +}; diff --git a/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.dts b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.dts new file mode 100644 index 00000000000..e87f9eee310 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.dts @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2025 Shan Pen + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include +#include +#include +#include "ra8d1_vision_board-pinctrl.dtsi" + +/ { + model = "Ruiside Electronic RA8D1-VISION-BOARD"; + compatible = "ruiside,ra8d1-vision-board"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &uart9; + zephyr,shell-uart = &uart9; + zephyr,entropy = &trng; + zephyr,flash-controller = &flash; + }; + + leds { + compatible = "gpio-leds"; + + led0: led0 { + gpios = <&ioport1 2 GPIO_ACTIVE_LOW>; + label = "LED0"; + }; + + led1: led1 { + gpios = <&ioport1 6 GPIO_ACTIVE_LOW>; + label = "LED1"; + }; + + led2: led2 { + gpios = <&ioporta 7 GPIO_ACTIVE_LOW>; + label = "LED2"; + }; + }; + + buttons { + compatible = "gpio-keys"; + + user_button: button_0 { + gpios = <&ioport9 7 GPIO_ACTIVE_LOW>; + label = "User Button"; + zephyr,code = ; + }; + }; + + sdram1: sdram@68000000 { + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x68000000 DT_SIZE_M(32)>; + zephyr,memory-region = "SDRAM"; + status = "okay"; + }; + + aliases { + led0 = &led0; + sw0 = &user_button; + watchdog0 = &wdt; + sdhc0 = &sdhc1; + }; +}; + +&xtal { + clock-frequency = ; + mosel = <0>; + #clock-cells = <0>; + status = "okay"; +}; + +&subclk { + status = "okay"; +}; + +&pll { + status = "okay"; + + pllp { + status = "okay"; + }; + + pllq { + div = <4>; + freq = ; + status = "okay"; + }; + + pllr { + status = "okay"; + }; +}; + +&sciclk { + clocks = <&pllp>; + div = <4>; + status = "okay"; +}; + +&uclk { + clocks = <&pllq>; + div = <5>; + status = "okay"; +}; + +&ioport0 { + status = "okay"; +}; + +&ioport1 { + status = "okay"; +}; + +&ioport4 { + status = "okay"; +}; + +&ioport5 { + status = "okay"; +}; + +&ioport6 { + status = "okay"; +}; + +&ioport8 { + status = "okay"; +}; + +&ioport9 { + status = "okay"; +}; + +&ioporta { + status = "okay"; +}; + +&sci9 { + pinctrl-0 = <&sci9_default>; + pinctrl-names = "default"; + status = "okay"; + + uart9: uart { + current-speed = <115200>; + status = "okay"; + }; +}; + +&trng { + status = "okay"; +}; + +&flash1 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + storage_partition: partition@0 { + label = "storage"; + reg = <0X0 DT_SIZE_K(12)>; + }; + }; +}; + +&port_irq10 { + interrupts = <86 12>; + status = "okay"; +}; + +&sdram { + pinctrl-0 = <&sdram_default>; + pinctrl-names = "default"; + status = "okay"; + auto-refresh-interval = ; + auto-refresh-count = ; + precharge-cycle-count = ; + multiplex-addr-shift = "9-bit"; + edian-mode = "little-endian"; + continuous-access; + bus-width = "16-bit"; + + bank@0 { + reg = <0>; + renesas,ra-sdram-timing = ; + }; +}; + +&sdhc1 { + pinctrl-names = "default"; + interrupt-names = "accs", "card", "dma-req"; + interrupts = <60 12>, <61 12>, <62 12>; + pinctrl-0 = <&sdhc1_default>; + status = "okay"; + /delete-property/ card-detect; + + sdmmc { + compatible = "zephyr,sdmmc-disk"; + disk-name = "SD"; + status = "okay"; + }; +}; + +&wdt { + status = "okay"; +}; diff --git a/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.yaml b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.yaml new file mode 100644 index 00000000000..682545a8b09 --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board.yaml @@ -0,0 +1,15 @@ +identifier: ra8d1_vision_board +name: ra8d1 vision board +type: mcu +arch: arm +ram: 1024 +flash: 2048 +toolchain: + - zephyr + - gnuarmemb +supported: + - gpio + - uart + - watchdog + - memc +vendor: ruiside diff --git a/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board_defconfig b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board_defconfig new file mode 100644 index 00000000000..6a3a48ad85c --- /dev/null +++ b/boards/ruiside/ra8d1_vision_board/ra8d1_vision_board_defconfig @@ -0,0 +1,11 @@ +# Copyright (c) 2025 Shan Pen +# SPDX-License-Identifier: Apache-2.0 + +# Enable GPIO +CONFIG_GPIO=y + +# Enable Console +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_CONSOLE=y diff --git a/tests/drivers/memc/ram/testcase.yaml b/tests/drivers/memc/ram/testcase.yaml index aaebc75c70a..7a98e2706f6 100644 --- a/tests/drivers/memc/ram/testcase.yaml +++ b/tests/drivers/memc/ram/testcase.yaml @@ -33,7 +33,9 @@ tests: - memc depends_on: memc filter: dt_compat_enabled("renesas,ra-sdram") - platform_allow: ek_ra8d1 + platform_allow: + - ek_ra8d1 + - ra8d1_vision_board drivers.memc.max32_hpb: tags: - drivers