diff --git a/boards/makerbase/index.rst b/boards/makerbase/index.rst new file mode 100644 index 00000000000000..4e8d4a84c932c6 --- /dev/null +++ b/boards/makerbase/index.rst @@ -0,0 +1,10 @@ +.. _boards-makerbase: + +Makerbase +######### + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/boards/makerbase/mks_canable_v20/Kconfig.mks_canable_v20 b/boards/makerbase/mks_canable_v20/Kconfig.mks_canable_v20 new file mode 100644 index 00000000000000..ef676f4ffcd028 --- /dev/null +++ b/boards/makerbase/mks_canable_v20/Kconfig.mks_canable_v20 @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Alexander Kozhinov +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_MKS_CANABLE_V20 + select SOC_STM32G431XX diff --git a/boards/makerbase/mks_canable_v20/board.cmake b/boards/makerbase/mks_canable_v20/board.cmake new file mode 100644 index 00000000000000..5b98199c697caf --- /dev/null +++ b/boards/makerbase/mks_canable_v20/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Alexander Kozhinov +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(openocd "--config=${BOARD_DIR}/support/openocd.cfg") + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/makerbase/mks_canable_v20/board.yml b/boards/makerbase/mks_canable_v20/board.yml new file mode 100644 index 00000000000000..ac103e7655a0fb --- /dev/null +++ b/boards/makerbase/mks_canable_v20/board.yml @@ -0,0 +1,6 @@ +board: + name: mks_canable_v20 + full_name: MKS CANable V2.0 + vendor: makerbase + socs: + - name: stm32g431xx diff --git a/boards/makerbase/mks_canable_v20/doc/img/mks_canable_v20.webp b/boards/makerbase/mks_canable_v20/doc/img/mks_canable_v20.webp new file mode 100644 index 00000000000000..7f92a5ed81d764 Binary files /dev/null and b/boards/makerbase/mks_canable_v20/doc/img/mks_canable_v20.webp differ diff --git a/boards/makerbase/mks_canable_v20/doc/index.rst b/boards/makerbase/mks_canable_v20/doc/index.rst new file mode 100644 index 00000000000000..0a86e6fa6fcc1b --- /dev/null +++ b/boards/makerbase/mks_canable_v20/doc/index.rst @@ -0,0 +1,170 @@ +.. zephyr:board:: mks_canable_v20 + +Overview +******** + +The Makerbase MKS CANable V2.0 board features an ARM Cortex-M4 based STM32G431C8 MCU +with a CAN, USB and debugger connections. +Here are some highlights of the MKS CANable V2.0 board: + +- STM32 microcontroller in LQFP48 package +- USB Type-C connector (J1) +- CAN-Bus connector (J2) +- ST-LINK/V3E debugger/programmer header (J4) +- USB VBUS power supply (5 V) +- Three LEDs: red/power_led (D1), blue/stat_led (D2), green/word_led (D3) +- One push-button for RESET +- Development support: serial wire debug (SWD), JTAG, Embedded Trace Macrocell. + +The LED red/power_led (D1) is connected directly to on-board 3.3 V and not controllable by the MCU. + +More information about the board can be found at the `MKS CANable V2.0 website`_. +It is very advisable to take a look in on user manual `MKS CANable V2.0 User Manual`_ and +schematic `MKS CANable V2.0 schematic`_ before start. + +More information about STM32G431KB can be found here: + +- `STM32G431C8 on www.st.com`_ +- `STM32G4 reference manual`_ + +Supported Features +================== + +The Zephyr ``mks_canable_v20`` board target supports the following hardware features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| USB | on-chip | universal-serial-bus | ++-----------+------------+-------------------------------------+ +| PINMUX | on-chip | pinmux | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| FDCAN | on-chip | can | ++-----------+------------+-------------------------------------+ + +Other hardware features are not yet supported on this Zephyr port. + +The default configuration can be found in the defconfig file: +:zephyr_file:`boards/makerbase/mks_canable_v20/mks_canable_v20_defconfig` + + +Connections and IOs +=================== + +Default Zephyr Peripheral Mapping: +---------------------------------- + +.. rst-class:: rst-columns + +- CAN_RX/BOOT0 : PB8 +- CAN_TX : PB9 +- D2 : PA15 +- D3 : PA0 +- USB_DN : PA11 +- USB_DP : PA12 +- SWDIO : PA13 +- SWCLK : PA14 +- NRST : PG10 + +For more details please refer to `MKS CANable V2.0 schematic`_. + +System Clock +------------ + +The MKS CANable V2.0 system clock is driven by internal high speed oscillator. +By default system clock is driven by PLL clock at 160 MHz, +the PLL is driven by the 16 MHz high speed internal oscillator. + +The FDCAN1 peripheral is driven by PLLQ, which has 80 MHz frequency. + +Programming and Debugging +************************* + +MKS CANable V2.0 board includes an SWDIO debug connector header J4. + +.. note:: + + The debugger is not the part of the board! + +Applications for the ``mks_canable_v20`` board target can be built and +flashed in the usual way (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +Flashing +======== + +The board could be flashed using west. + +Flashing an application to MKS CANable V2.0 +------------------------------------------- + +The debugger shall be wired to MKS CANable V2.0 board's J4 connector +according `MKS CANable V2.0 schematic`_. + +Build and flash an application. Here is an example for +:zephyr:code-sample:`hello_world`. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: mks_canable_v20 + :goals: build flash + :west-args: -S rtt-console + :compact: + +The argument ``-S rtt-console`` is needed for debug purposes with SEGGER RTT protocol. +This option is optional and may be omitted. Omitting it frees up RAM space but prevents RTT usage. + +If option ``-S rtt-console`` is selected, the connection to the target can be established as follows: + +.. code-block:: console + + $ telnet localhost 9090 + +You should see the following message on the console: + +.. code-block:: console + + $ Hello World! mks_canable_v20/stm32g431xx + +.. note:: + + Current OpenOCD config will skip Segger RTT for OpenOCD under 0.12.0. + +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: mks_canable_v20 + :maybe-skip-config: + :goals: debug + +References +********** + +.. target-notes:: + +.. _MKS CANable V2.0 website: + https://github.com/makerbase-mks/CANable-MKS + +.. _MKS CANable V2.0 User Manual: + https://github.com/makerbase-mks/CANable-MKS/blob/main/User%20Manual/CANable%20V2.0/Makerbase%20CANable%20V2.0%20Use%20Manual.pdf + +.. _MKS CANable V2.0 schematic: + https://github.com/makerbase-mks/CANable-MKS/blob/main/Hardware/MKS%20CANable%20V2.0/MKS%20CANable%20V2.0_001%20schematic.pdf + +.. _STM32G431C8 on www.st.com: + https://www.st.com/en/microcontrollers-microprocessors/stm32g431c8.html + +.. _STM32G4 reference manual: + https://www.st.com/resource/en/reference_manual/rm0440-stm32g4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf + +.. _STM32CubeProgrammer: + https://www.st.com/en/development-tools/stm32cubeprog.html diff --git a/boards/makerbase/mks_canable_v20/mks_canable_v20.dts b/boards/makerbase/mks_canable_v20/mks_canable_v20.dts new file mode 100644 index 00000000000000..b619d8b900cfb5 --- /dev/null +++ b/boards/makerbase/mks_canable_v20/mks_canable_v20.dts @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2024 Alexander Kozhinov + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include + +/ { + model = "Makerbase MKS CANable V2.0"; + compatible = "makerbase,mks-canable-v20"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,canbus = &fdcan1; + }; + + aliases { + led0 = &blue_led; + led1 = &green_led; + }; + + leds: leds { + compatible = "gpio-leds"; + blue_led: led_2 { + gpios = <&gpioa 15 GPIO_ACTIVE_LOW>; + label = "blue-status D2"; + }; + green_led: led_3 { + gpios = <&gpioa 0 GPIO_ACTIVE_LOW>; + label = "green-word D3"; + }; + }; +}; + +&clk_hsi { + /* Internal 16 MHz clock used to drive PLL */ + status = "okay"; +}; + +&clk_hsi48 { + /* Internal 48 MHz clock used to drive USB */ + status = "okay"; +}; + +/* Adjust the pll for a SYSTEM Clock of 160 MHz */ +&pll { + div-m = <4>; + mul-n = <80>; + div-p = <2>; + div-q = <4>; + div-r = <2>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; + apb2-prescaler = <1>; +}; + +stm32_lp_tick_source: &lptim1 { + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x80000000>, + <&rcc STM32_SRC_LSE LPTIM1_SEL(3)>; + status = "okay"; +}; + +zephyr_udc0: &usb { + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; + clocks = <&rcc STM32_CLOCK(APB1, 23U)>, + <&rcc STM32_SRC_HSI48 CLK48_SEL(0)>; + status = "okay"; +}; + +&fdcan1 { + pinctrl-0 = <&fdcan1_rx_pb8 &fdcan1_tx_pb9>; + pinctrl-names = "default"; + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x00001000>, + <&rcc STM32_SRC_PLL_Q FDCAN_SEL(1)>; + status = "okay"; +}; diff --git a/boards/makerbase/mks_canable_v20/mks_canable_v20.yaml b/boards/makerbase/mks_canable_v20/mks_canable_v20.yaml new file mode 100644 index 00000000000000..3ff3138b106a76 --- /dev/null +++ b/boards/makerbase/mks_canable_v20/mks_canable_v20.yaml @@ -0,0 +1,16 @@ +identifier: mks_canable_v20 +name: MKS CANable V2.0 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +ram: 32 +flash: 64 +supported: + - can + - counter + - gpio + - usb_device + - usbd +vendor: makerbase diff --git a/boards/makerbase/mks_canable_v20/mks_canable_v20_defconfig b/boards/makerbase/mks_canable_v20/mks_canable_v20_defconfig new file mode 100644 index 00000000000000..f2613819bf534e --- /dev/null +++ b/boards/makerbase/mks_canable_v20/mks_canable_v20_defconfig @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Alexander Kozhinov +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_GPIO=y +CONFIG_ARM_MPU=y diff --git a/boards/makerbase/mks_canable_v20/support/openocd.cfg b/boards/makerbase/mks_canable_v20/support/openocd.cfg new file mode 100644 index 00000000000000..b614de4fbf5cc6 --- /dev/null +++ b/boards/makerbase/mks_canable_v20/support/openocd.cfg @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Alexander Kozhinov +# SPDX-License-Identifier: Apache-2.0 + +source [find interface/stlink.cfg] +source [find target/stm32g4x.cfg]