diff --git a/boards/arm/gd32a503v_eval/Kconfig.board b/boards/arm/gd32a503v_eval/Kconfig.board new file mode 100644 index 00000000000..827b0b4dcb8 --- /dev/null +++ b/boards/arm/gd32a503v_eval/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2022 YuLong Yao +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_GD32A503V_EVAL + bool "GigaDevice GD32A503V-EVAL" + depends on SOC_GD32A503 diff --git a/boards/arm/gd32a503v_eval/Kconfig.defconfig b/boards/arm/gd32a503v_eval/Kconfig.defconfig new file mode 100644 index 00000000000..7c0c1ad2b70 --- /dev/null +++ b/boards/arm/gd32a503v_eval/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2022 YuLong Yao +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_GD32A503V_EVAL + +config BOARD + default "gd32a503v_eval" + +endif # BOARD_GD32A503V_EVAL diff --git a/boards/arm/gd32a503v_eval/board.cmake b/boards/arm/gd32a503v_eval/board.cmake new file mode 100644 index 00000000000..d8afe770a08 --- /dev/null +++ b/boards/arm/gd32a503v_eval/board.cmake @@ -0,0 +1,8 @@ +# Copyright (c) 2022 YuLong Yao +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(pyocd "--target=gd32a503vd" "--tool-opt=--pack=${ZEPHYR_HAL_GIGADEVICE_MODULE_DIR}/${CONFIG_SOC_SERIES}/support/GigaDevice.GD32A50x_DFP.1.0.0.pack") +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) + +board_runner_args(gd32isp "--device=GD32A503VDT3") +include(${ZEPHYR_BASE}/boards/common/gd32isp.board.cmake) diff --git a/boards/arm/gd32a503v_eval/doc/img/gd32a503v_eval.jpg b/boards/arm/gd32a503v_eval/doc/img/gd32a503v_eval.jpg new file mode 100644 index 00000000000..b18530d9e39 Binary files /dev/null and b/boards/arm/gd32a503v_eval/doc/img/gd32a503v_eval.jpg differ diff --git a/boards/arm/gd32a503v_eval/doc/index.rst b/boards/arm/gd32a503v_eval/doc/index.rst new file mode 100644 index 00000000000..1039faf515f --- /dev/null +++ b/boards/arm/gd32a503v_eval/doc/index.rst @@ -0,0 +1,223 @@ +.. _gd32a503v_eval: + +GigaDevice GD32A503V-EVAL +######################### + + +Overview +******** + +The GD32A503V-EVAL board is a hardware platform that enables design and debug +of the GigaDevice A503 Cortex-M4F High Performance MCU. + +The GD32A503VD features a single-core ARM Cortex-M4F MCU which can run up +to 120-MHz with flash accesses zero wait states, 384kiB of Flash, 48kiB of +SRAM and 88 GPIOs. + +.. image:: img/gd32a503v_eval.jpg + :align: center + :alt: gd32a503v_eval + + +Hardware +******** + +- 2 user LEDs +- 2 user push buttons +- Reset Button +- ADC connected to a potentiometer +- 1 DAC channels +- GD25Q16 2Mib SPI Flash +- AT24C02C 2KiB EEPROM +- CS4344 Stereo DAC with Headphone Amplifier +- GD-Link interface + + - CMSIS-DAP swd debug interface over USB HID. + +- 2 CAN port(support CAN-FD) + +For more information about the GD32A503 SoC and GD32A503V-EVAL board: + +- `GigaDevice Cortex-M33 High Performance SoC Website`_ +- `GD32A503 Datasheet`_ +- `GD32A503 Reference Manual`_ +- `GD32A503V Eval Schematics`_ +- `GD32 ISP Console`_ + + +Supported Features +================== + +The board configuration supports the following hardware features: + +.. list-table:: + :header-rows: 1 + + * - Peripheral + - Kconfig option + - Devicetree compatible + * - EXTI + - :kconfig:option:`CONFIG_GD32_EXTI` + - :dtcompatible:`gd,gd32-exti` + * - GPIO + - :kconfig:option:`CONFIG_GPIO` + - :dtcompatible:`gd,gd32-gpio` + * - NVIC + - N/A + - :dtcompatible:`arm,v8m-nvic` + * - PWM + - :kconfig:option:`CONFIG_PWM` + - :dtcompatible:`gd,gd32-pwm` + * - SYSTICK + - N/A + - N/A + * - USART + - :kconfig:option:`CONFIG_SERIAL` + - :dtcompatible:`gd,gd32-usart` + * - PINMUX + - :kconfig:option:`CONFIG_PINCTRL` + - :dtcompatible:`gd,gd32-pinctrl-af` + * - ADC + - :kconfig:option:`CONFIG_ADC` + - :dtcompatible:`gd,gd32-adc` + * - DAC + - :kconfig:option:`CONFIG_DAC` + - :dtcompatible:`gd,gd32-dac` + * - FMC + - N/A + - :dtcompatible:`gd,gd32-flash-controller` + * - SPI + - :kconfig:option:`CONFIG_SPI` + - :dtcompatible:`gd,gd32-spi` + +Serial Port +=========== + +The GD32A503V-EVAL board has 3 serial communication ports. The default port +is UART0 at PIN-72 and PIN-73. + +Programming and Debugging +************************* + +Before program your board make sure to configure boot setting and serial port. +The default serial port is USART0. + ++--------+--------+------------+ +| Boot-0 | Boot-1 | Function | ++========+========+============+ +| 1-2 | 1-2 | SRAM | ++--------+--------+------------+ +| 1-2 | 2-3 | Bootloader | ++--------+--------+------------+ +| 2-3 | Any | Flash | ++--------+--------+------------+ + +Using GD-Link +============= + +The GD32A503V-EVAL includes an onboard programmer/debugger (GD-Link) which +allow flash programming and debug over USB. There are also program and debug +headers J2 and J100 that can be used with any ARM compatible tools. + +#. Build the Zephyr kernel and the :ref:`hello_world` sample application: + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: gd32a503v_eval + :goals: build + :compact: + +#. Run your favorite terminal program to listen for output. Under Linux the + terminal should be :code:`/dev/ttyUSB0`. For example: + + .. code-block:: console + + $ minicom -D /dev/ttyUSB0 -o + + The -o option tells minicom not to send the modem initialization + string. Connection should be configured as follows: + + - Speed: 115200 + - Data: 8 bits + - Parity: None + - Stop bits: 1 + +#. To flash an image: + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: gd32a503v_eval + :goals: flash + :compact: + + You should see "Hello World! gd32a503v_eval" in your terminal. + +#. To debug an image: + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: gd32a503v_eval + :goals: debug + :compact: + + +Using ROM bootloader +==================== + +The GD32A503 MCU have a ROM bootloader which allow flash programming. User +should install `GD32 ISP Console`_ software at some Linux path. The recommended +is :code:`$HOME/.local/bin`. + +#. Build the Zephyr kernel and the :ref:`hello_world` sample application: + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: gd32a503v_eval + :goals: build + :compact: + +#. Enable board bootloader: + + - Remove boot-0 jumper + - press reset button + +#. To flash an image: + + .. code-block:: console + + west flash -r gd32isp [--port=/dev/ttyUSB0] + +#. Run your favorite terminal program to listen for output. Under Linux the + terminal should be :code:`/dev/ttyUSB0`. For example: + + .. code-block:: console + + $ minicom -D /dev/ttyUSB0 -o + + The -o option tells minicom not to send the modem initialization + string. Connection should be configured as follows: + + - Speed: 115200 + - Data: 8 bits + - Parity: None + - Stop bits: 1 + + Press reset button + + You should see "Hello World! gd32a503v_eval" in your terminal. + + +.. _GigaDevice Cortex-M33 High Performance SoC Website: + https://www.gigadevice.com.cn/product/mcu/arm-cortex-m33/gd32a503vdt3 + +.. _GD32A503 Datasheet: + https://www.gd32mcu.com/download/down/document_id/401/path_type/1 + +.. _GD32A503 Reference Manual: + https://www.gd32mcu.com/download/down/document_id/402/path_type/1 + +.. _GD32A503V Eval Schematics: + https://www.gd32mcu.com/download/down/document_id/404/path_type/1 + +.. _GD32 ISP Console: + http://www.gd32mcu.com/download/down/document_id/175/path_type/1 diff --git a/boards/arm/gd32a503v_eval/gd32a503v_eval-pinctrl.dtsi b/boards/arm/gd32a503v_eval/gd32a503v_eval-pinctrl.dtsi new file mode 100644 index 00000000000..4c53fce3780 --- /dev/null +++ b/boards/arm/gd32a503v_eval/gd32a503v_eval-pinctrl.dtsi @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 YuLong Yao + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + usart0_default: usart0_default { + group1 { + pinmux = , ; + }; + }; + + adc0_default: adc0_default { + group1 { + pinmux = ; + }; + }; + + dac_default: dac_default { + group1 { + pinmux = ; + }; + }; + + spi0_default: spi0_default { + group1 { + pinmux = , , + , + /* Use pinmux to pullup pg10 and pg11. */ + , ; + }; + }; +}; diff --git a/boards/arm/gd32a503v_eval/gd32a503v_eval.dts b/boards/arm/gd32a503v_eval/gd32a503v_eval.dts new file mode 100644 index 00000000000..f5f79267c16 --- /dev/null +++ b/boards/arm/gd32a503v_eval/gd32a503v_eval.dts @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2022 YuLong Yao + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "gd32a503v_eval-pinctrl.dtsi" + +/ { + model = "GigaDevice GD32A503V-EVAL"; + compatible = "gd,gd32a503v-eval"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &usart0; + zephyr,shell-uart = &usart0; + zephyr,flash-controller = &fmc; + }; + + leds { + compatible = "gpio-leds"; + led1: led1 { + gpios = <&gpioc 0 GPIO_ACTIVE_LOW>; + label = "LED1"; + }; + led2: led2 { + gpios = <&gpioc 1 GPIO_ACTIVE_LOW>; + label = "LED2"; + }; + }; + + aliases { + led0 = &led1; + led1 = &led2; + spi-flash0 = &nor_flash; + }; +}; + +&gpioa { + status = "okay"; +}; + +&gpiob { + status = "okay"; +}; + +&gpioc { + status = "okay"; +}; + +&gpiod { + status = "okay"; +}; + +&gpioe { + status = "okay"; +}; + +&gpiof { + status = "okay"; +}; + +&usart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&usart0_default>; + pinctrl-names = "default"; +}; + +&adc0 { + status = "okay"; + pinctrl-0 = <&adc0_default>; + pinctrl-names = "default"; +}; + +&dac { + status = "okay"; + pinctrl-0 = <&dac_default>; + pinctrl-names = "default"; +}; + +&fwdgt { + status = "okay"; +}; + +&spi0 { + status = "okay"; + pinctrl-0 = <&spi0_default>; + pinctrl-names = "default"; + cs-gpios = <&gpioa 1 GPIO_ACTIVE_LOW>; + + nor_flash: gd25q16@0 { + compatible ="jedec,spi-nor"; + size = <0x1000000>; + reg = <0>; + spi-max-frequency = <4000000>; + status = "okay"; + jedec-id = [c8 40 15]; + }; +}; diff --git a/boards/arm/gd32a503v_eval/gd32a503v_eval_defconfig b/boards/arm/gd32a503v_eval/gd32a503v_eval_defconfig new file mode 100644 index 00000000000..1bb7621214f --- /dev/null +++ b/boards/arm/gd32a503v_eval/gd32a503v_eval_defconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2022 YuLong Yao +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_GD32A50X=y +CONFIG_SOC_GD32A503=y +CONFIG_BOARD_GD32A503V_EVAL=y + +CONFIG_ARM_MPU=y +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y diff --git a/boards/arm/gd32a503v_eval/gd32f450z_eval.yaml b/boards/arm/gd32a503v_eval/gd32f450z_eval.yaml new file mode 100644 index 00000000000..ea5a264f5b4 --- /dev/null +++ b/boards/arm/gd32a503v_eval/gd32f450z_eval.yaml @@ -0,0 +1,23 @@ +# Copyright (c) 2022 YuLong Yao +# SPDX-License-Identifier: Apache-2.0 + +identifier: gd32a503v_eval +name: GigaDevice GD32A503V-EVAL +type: mcu +arch: arm +ram: 48 +flash: 384 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - counter + - dac + - dma + - gpio + - pwm + - spi + - uart + - watchdog