From c21bc771698a5722b268dbb4ab211e3fc5cdafa8 Mon Sep 17 00:00:00 2001 From: TOKITA Hiroshi Date: Mon, 18 Oct 2021 07:44:47 -0700 Subject: [PATCH] boards: riscv: Add SiPeed Longan Nano platform SiPeed Longan Nano is a minimal development board based on GigaDevice's RISC-V processor. There are 2 board variations. longan_nano: GDGD32VF103CBT6 (128K Flash/32K SRAM) longan_nano_lite: GDGD32VF103C8T6 ( 64K Flash/20K SRAM) Signed-off-by: TOKITA Hiroshi --- CODEOWNERS | 1 + boards/riscv/longan_nano/Kconfig.board | 10 +++ boards/riscv/longan_nano/Kconfig.defconfig | 11 ++++ boards/riscv/longan_nano/board.cmake | 10 +++ boards/riscv/longan_nano/doc/index.rst | 64 +++++++++++++++++++ boards/riscv/longan_nano/longan_nano.dts | 18 ++++++ boards/riscv/longan_nano/longan_nano.yaml | 9 +++ .../riscv/longan_nano/longan_nano_defconfig | 13 ++++ boards/riscv/longan_nano/longan_nano_lite.dts | 18 ++++++ .../riscv/longan_nano/longan_nano_lite.yaml | 9 +++ .../longan_nano/longan_nano_lite_defconfig | 13 ++++ boards/riscv/longan_nano/support/openocd.cfg | 33 ++++++++++ 12 files changed, 209 insertions(+) create mode 100644 boards/riscv/longan_nano/Kconfig.board create mode 100644 boards/riscv/longan_nano/Kconfig.defconfig create mode 100644 boards/riscv/longan_nano/board.cmake create mode 100644 boards/riscv/longan_nano/doc/index.rst create mode 100644 boards/riscv/longan_nano/longan_nano.dts create mode 100644 boards/riscv/longan_nano/longan_nano.yaml create mode 100644 boards/riscv/longan_nano/longan_nano_defconfig create mode 100644 boards/riscv/longan_nano/longan_nano_lite.dts create mode 100644 boards/riscv/longan_nano/longan_nano_lite.yaml create mode 100644 boards/riscv/longan_nano/longan_nano_lite_defconfig create mode 100644 boards/riscv/longan_nano/support/openocd.cfg diff --git a/CODEOWNERS b/CODEOWNERS index 35e2eb79894..3473a454a6a 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -153,6 +153,7 @@ /boards/riscv/rv32m1_vega/ @dleach02 /boards/riscv/beaglev_starlight_jh7100/ @rajnesh-kanwal /boards/riscv/adp_xc7k_ae350/ @cwshu @kevinwang821020 @jimmyzhe +/boards/riscv/longan_nano/ @soburi /boards/riscv/neorv32/ @henrikbrixandersen /boards/shields/ @erwango /boards/shields/atmel_rf2xx/ @nandojve diff --git a/boards/riscv/longan_nano/Kconfig.board b/boards/riscv/longan_nano/Kconfig.board new file mode 100644 index 00000000000..f656bdbf67a --- /dev/null +++ b/boards/riscv/longan_nano/Kconfig.board @@ -0,0 +1,10 @@ +# Copyright (c) 2021 Tokita, Hiroshi +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_LONGAN_NANO + bool "Sipeed Longan Nano target" + depends on SOC_GD32VF103 + +config BOARD_LONGAN_NANO_LITE + bool "Sipeed Longan Nano Lite target" + depends on SOC_GD32VF103 diff --git a/boards/riscv/longan_nano/Kconfig.defconfig b/boards/riscv/longan_nano/Kconfig.defconfig new file mode 100644 index 00000000000..23b6a05ce69 --- /dev/null +++ b/boards/riscv/longan_nano/Kconfig.defconfig @@ -0,0 +1,11 @@ +# Sipeed longan nano Development Board Configuration + +# Copyright (c) 2021 Tokita, Hiroshi + +if BOARD_LONGAN_NANO || BOARD_LONGAN_NANO_LITE + +config BOARD + default "longan_nano" if BOARD_LONGAN_NANO + default "longan_nano_lite" if BOARD_LONGAN_NANO_LITE + +endif # BOARD_LONGAN_NANO || BOARD_LONGAN_NANO_LITE diff --git a/boards/riscv/longan_nano/board.cmake b/boards/riscv/longan_nano/board.cmake new file mode 100644 index 00000000000..17955424a25 --- /dev/null +++ b/boards/riscv/longan_nano/board.cmake @@ -0,0 +1,10 @@ +# Copyright (c) 2021 Tokita, Hiroshi +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(openocd --cmd-pre-init "source [find target/gd32vf103.cfg]") + +board_runner_args(openocd "--cmd-pre-load=gd32vf103-pre-load") +board_runner_args(openocd "--cmd-load=gd32vf103-load") +board_runner_args(openocd "--cmd-post-verify=gd32vf103-post-verify") + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/riscv/longan_nano/doc/index.rst b/boards/riscv/longan_nano/doc/index.rst new file mode 100644 index 00000000000..62065c23469 --- /dev/null +++ b/boards/riscv/longan_nano/doc/index.rst @@ -0,0 +1,64 @@ +.. _longan_nano: + +Sipeed Longan Nano +################## + +Overview +******** + +The Sipeed Longan Nano and Longan Nano Lite is an simple and tiny development board with +an GigaDevice GD32VF103 SoC that based on N200 RISC-V IP core by Nuclei system technology. +More information can be found on: + +- `Sipeed Longan website `_ +- `GD32VF103 datasheet `_ +- `GD32VF103 user manual `_ +- `Nuclei website `_ +- `Nuclei Bumblebee core documents `_ +- `Nuclei ISA Spec `_ + +Programming and debugging +************************* + +Building +======== + +Applications for the ``logan_nano`` board configuration can be built as usual +(see :ref:`build_an_application`) using the corresponding board name: + +.. zephyr-app-commands:: + :board: logan_nano + :goals: build + +Flashing +======== + +In order to upload the application to the device, you'll need OpenOCD with +GD32V support. Download the tarball for your OS from the +`SiPEED longan nano download site +`_ and extract it. + +The Zephyr SDK uses a bundled version of OpenOCD by default. You can +overwrite that behavior by adding the +``-DOPENOCD=`` +parameter when building: + +.. zephyr-app-commands:: + :board: longan_nano + :goals: build + :gen-args: -DOPENOCD= + +When using a custom toolchain it should be enough to have the downloaded +version of the binary in your ``PATH``. + +Now you can flash the application as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details): + +.. code-block:: console + + west flash + +Debugging +========= + +Refer to the detailed overview about :ref:`application_debugging`. diff --git a/boards/riscv/longan_nano/longan_nano.dts b/boards/riscv/longan_nano/longan_nano.dts new file mode 100644 index 00000000000..d0f4997d61e --- /dev/null +++ b/boards/riscv/longan_nano/longan_nano.dts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 Tokita, Hiroshi + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + model = "Sipeed Longan Nano"; + compatible = "sipeed,longan_nano"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; +}; diff --git a/boards/riscv/longan_nano/longan_nano.yaml b/boards/riscv/longan_nano/longan_nano.yaml new file mode 100644 index 00000000000..1d324ed5210 --- /dev/null +++ b/boards/riscv/longan_nano/longan_nano.yaml @@ -0,0 +1,9 @@ +identifier: longan_nano +name: Sipeed Longan Nano +type: mcu +arch: riscv32 +toolchain: + - zephyr + - xtools +flash: 128 +ram: 32 diff --git a/boards/riscv/longan_nano/longan_nano_defconfig b/boards/riscv/longan_nano/longan_nano_defconfig new file mode 100644 index 00000000000..b08b78cbc89 --- /dev/null +++ b/boards/riscv/longan_nano/longan_nano_defconfig @@ -0,0 +1,13 @@ +# Sipeed longan nano Development Board Configuration +# +# Copyright (c) 2021 Tokita, Hiroshi +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_SOC_SERIES_GD32VF103=y +CONFIG_SOC_GD32VF103=y +CONFIG_GD32_HXTAL_8MHZ=y + +# enable machine timer +CONFIG_RISCV_MACHINE_TIMER=y diff --git a/boards/riscv/longan_nano/longan_nano_lite.dts b/boards/riscv/longan_nano/longan_nano_lite.dts new file mode 100644 index 00000000000..4c1fafebdf9 --- /dev/null +++ b/boards/riscv/longan_nano/longan_nano_lite.dts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 Tokita, Hiroshi + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + model = "Sipeed Longan Nano Lite"; + compatible = "sipeed,longan_nano_lite"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; +}; diff --git a/boards/riscv/longan_nano/longan_nano_lite.yaml b/boards/riscv/longan_nano/longan_nano_lite.yaml new file mode 100644 index 00000000000..64a216c6118 --- /dev/null +++ b/boards/riscv/longan_nano/longan_nano_lite.yaml @@ -0,0 +1,9 @@ +identifier: longan_nano_lite +name: Sipeed Longan Nano Lite +type: mcu +arch: riscv32 +toolchain: + - zephyr + - xtools +flash: 64 +ram: 20 diff --git a/boards/riscv/longan_nano/longan_nano_lite_defconfig b/boards/riscv/longan_nano/longan_nano_lite_defconfig new file mode 100644 index 00000000000..ec56283e85f --- /dev/null +++ b/boards/riscv/longan_nano/longan_nano_lite_defconfig @@ -0,0 +1,13 @@ +# Sipeed Longan Nano Lite board Configuration +# +# Copyright (c) 2021 Tokita, Hiroshi +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_SOC_SERIES_GD32VF103=y +CONFIG_SOC_GD32VF103=y +CONFIG_GD32_HXTAL_8MHZ=y + +# enable machine timer +CONFIG_RISCV_MACHINE_TIMER=y diff --git a/boards/riscv/longan_nano/support/openocd.cfg b/boards/riscv/longan_nano/support/openocd.cfg new file mode 100644 index 00000000000..4ebb4a0505b --- /dev/null +++ b/boards/riscv/longan_nano/support/openocd.cfg @@ -0,0 +1,33 @@ +# Copyright (c) 2021 Tokita, Hiroshi +# SPDX-License-Identifier: Apache-2.0 + +interface ftdi + +ftdi_device_desc "Dual RS232" +#ftdi_device_desc "Sipeed-Debug" +#ftdi_device_desc "JTAG Debugger" + +ftdi_vid_pid 0x0403 0x6010 +#ftdi_channel 0 + +ftdi_layout_init 0x0008 0x001b +ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020 + +adapter_khz 2000 +transport select jtag + +proc gd32vf103-pre-load {} { + halt +} + +proc gd32vf103-load {file} { + flash protect 0 0 last off + flash write_image erase $file +} + + +proc gd32vf103-post-verify {} { + mww 0xe004200c 0x4b5a6978 + mww 0xe0042008 0x01 + resume +}