From c975951aff28af68bc1a67a333f67f8a1366eaee Mon Sep 17 00:00:00 2001 From: Tianshuang Ke Date: Mon, 27 Feb 2023 15:41:38 +0800 Subject: [PATCH] boards: arm: support board Pandora_STM32L475 Add support board Pandora_STM32L475; Drives that have been verified at present: - GPIO - PWM - QSPI_FLASH_W25Q128 Signed-off-by: Tianshuang Ke --- boards/arm/pandora_stm32l475/Kconfig.board | 8 + .../arm/pandora_stm32l475/Kconfig.defconfig | 11 + boards/arm/pandora_stm32l475/board.cmake | 6 + .../doc/img/pandora_stm32l475.jpg | Bin 0 -> 60984 bytes boards/arm/pandora_stm32l475/doc/index.rst | 214 ++++++++++++++++++ .../pandora_stm32l475/pandora_stm32l475.dts | 130 +++++++++++ .../pandora_stm32l475/pandora_stm32l475.yaml | 13 ++ .../pandora_stm32l475_defconfig | 26 +++ .../arm/pandora_stm32l475/support/openocd.cfg | 25 ++ dts/arm/st/l4/stm32l475Xe.dtsi | 21 ++ 10 files changed, 454 insertions(+) create mode 100644 boards/arm/pandora_stm32l475/Kconfig.board create mode 100644 boards/arm/pandora_stm32l475/Kconfig.defconfig create mode 100644 boards/arm/pandora_stm32l475/board.cmake create mode 100644 boards/arm/pandora_stm32l475/doc/img/pandora_stm32l475.jpg create mode 100644 boards/arm/pandora_stm32l475/doc/index.rst create mode 100644 boards/arm/pandora_stm32l475/pandora_stm32l475.dts create mode 100644 boards/arm/pandora_stm32l475/pandora_stm32l475.yaml create mode 100644 boards/arm/pandora_stm32l475/pandora_stm32l475_defconfig create mode 100644 boards/arm/pandora_stm32l475/support/openocd.cfg create mode 100644 dts/arm/st/l4/stm32l475Xe.dtsi diff --git a/boards/arm/pandora_stm32l475/Kconfig.board b/boards/arm/pandora_stm32l475/Kconfig.board new file mode 100644 index 00000000000..89ba1c54b98 --- /dev/null +++ b/boards/arm/pandora_stm32l475/Kconfig.board @@ -0,0 +1,8 @@ +# STM32L475 Pandora board configuration + +# Copyright (c) 2023 Tisilicon +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_PANDORA_STM32L475 + bool "STM32L475 Pandora Development Board" + depends on SOC_STM32L475XX diff --git a/boards/arm/pandora_stm32l475/Kconfig.defconfig b/boards/arm/pandora_stm32l475/Kconfig.defconfig new file mode 100644 index 00000000000..2d0f4e8c456 --- /dev/null +++ b/boards/arm/pandora_stm32l475/Kconfig.defconfig @@ -0,0 +1,11 @@ +# STM32L475 Pandora board configuration + +# Copyright (c) 2023 Tisilicon +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_PANDORA_STM32L475 + +config BOARD + default "pandora_stm32l475" + +endif # BOARD_PANDORA_STM32L475 diff --git a/boards/arm/pandora_stm32l475/board.cmake b/boards/arm/pandora_stm32l475/board.cmake new file mode 100644 index 00000000000..0da8e07b039 --- /dev/null +++ b/boards/arm/pandora_stm32l475/board.cmake @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=STM32L475VE" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/arm/pandora_stm32l475/doc/img/pandora_stm32l475.jpg b/boards/arm/pandora_stm32l475/doc/img/pandora_stm32l475.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f280ba2424d4c1489f02909ceea1839968992d0 GIT binary patch literal 60984 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⪻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 literal 0 HcmV?d00001 diff --git a/boards/arm/pandora_stm32l475/doc/index.rst b/boards/arm/pandora_stm32l475/doc/index.rst new file mode 100644 index 00000000000..38623ac89f6 --- /dev/null +++ b/boards/arm/pandora_stm32l475/doc/index.rst @@ -0,0 +1,214 @@ +.. _stm32l475ve_pandora_board: + +ST STM32L475 Pandora +#################### + +Overview +******** + +The STM32L475 Pandora board features an ARM Cortex-M4 based STM32L475VE MCU +with a wide range of connectivity support and configurations. Here are +some highlights of the STM32L475 Pandora board: + + +- STM32L475Vx microcontroller featuring 1 Mbyte of Flash memory, 128 Kbytes of RAM in LQFP100 package +- On-board ST-LINK/V2-1 supporting USB re-enumeration capability +- Three different interfaces supported on USB: + + - Virtual com port + - Mass storage + - Debug port + +- Pushbutton (reset) +- Four directions Joystick with selection +- USB OTG FS with micro-AB connector +- SAI Audio DAC, Stereo with output jack +- Digital microphone, accelerometer, magnetometer and gyroscope MEMS +- 128-Mbit Quad-SPI Flash memory +- MCU current ammeter with 4 ranges and auto-calibration +- Connector for external board or RF-EEPROM +- Four power supply options: + - ST-LINK/V2-1 + - USB FS connector + - External 5 V + - CR2032 battery (not provided) + +.. image:: img/pandora_stm32l475.jpg + :align: center + :alt: STM32L475 Pandora + +More information about the board can be found at the `STM32L475 Pandora website`_. + +Hardware +******** + +The STM32L475VE SoC provides the following hardware features: + +- Ultra-low-power with FlexPowerControl (down to 130 nA Standby mode and 100 uA/MHz run mode) +- Core: ARM |reg| 32-bit Cortex |reg|-M4 CPU with FPU, frequency up to 80 MHz, 100DMIPS/1.25DMIPS/MHz (Dhrystone 2.1) +- Clock Sources: + - 4 to 48 MHz crystal oscillator + - 32 kHz crystal oscillator for RTC (LSE) + - Internal 16 MHz factory-trimmed RC ( |plusminus| 1%) + - Internal low-power 32 kHz RC ( |plusminus| 5%) + - Internal multispeed 100 kHz to 48 MHz oscillator, auto-trimmed by + LSE (better than |plusminus| 0.25 % accuracy) + - 3 PLLs for system clock, USB, audio, ADC +- RTC with HW calendar, alarms and calibration +- 16x timers: + - 2x 16-bit advanced motor-control + - 2x 32-bit and 7x 16-bit general purpose + - 2x 16-bit basic + - 2x low-power 16-bit timers (available in Stop mode) + - 2x watchdogs + - SysTick timer +- Up to 82 fast I/Os, most 5 V-tolerant, up to 14 I/Os with independent supply down to 1.08 V +- Memories + - Up to 1 MB Flash, 2 banks read-while-write, proprietary code readout protection + - Up to 128 KB of SRAM including 32 KB with hardware parity check + - External memory interface for static memories supporting SRAM, PSRAM, NOR and NAND memories + - Quad SPI memory interface +- 4x digital filters for sigma delta modulator +- Rich analog peripherals (independent supply) + - 3x 12-bit ADC 5 MSPS, up to 16-bit with hardware oversampling, 200 uA/MSPS + - 2x 12-bit DAC, low-power sample and hold + - 2x operational amplifiers with built-in PGA + - 2x ultra-low-power comparators +- 18x communication interfaces + - USB OTG 2.0 full-speed, LPM and BCD + - 2x SAIs (serial audio interface) + - 3x I2C FM+(1 Mbit/s), SMBus/PMBus + - 6x USARTs (ISO 7816, LIN, IrDA, modem) + - 3x SPIs (4x SPIs with the Quad SPI) + - CAN (2.0B Active) and SDMMC interface + - SWPMI single wire protocol master I/F +- 14-channel DMA controller +- True random number generator +- CRC calculation unit, 96-bit unique ID +- Development support: serial wire debug (SWD), JTAG, Embedded Trace Macrocell |trade| + + +Supported Features +================== + +The Zephyr stm32l475ve_pandora board configuration supports the following hardware features: + ++-----------+------------+----------------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+==============================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+----------------------------------------------+ +| UART | on-chip | serial port-polling; | +| | | serial port-interrupt | ++-----------+------------+----------------------------------------------+ +| PINMUX | on-chip | pinmux | ++-----------+------------+----------------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+----------------------------------------------+ +| I2C | on-chip | I2C-AHT10(Temperature and humidity sensor) | +| | | I2C-ICM2068(light environment sensor) | ++-----------+------------+----------------------------------------------+ +| I2S | on-chip | I2S-ES8388(Audio Decoder) | ++-----------+------------+----------------------------------------------+ +| USB | on-chip | I2S-OTG | ++-----------+------------+----------------------------------------------+ +| SDIO | on-chip | SDIO-AP6181(WIFI) | ++-----------+------------+----------------------------------------------+ +| SPI | on-chip | LCD-TFT | ++-----------+------------+----------------------------------------------+ +| QSPI NOR | on-chip | flash | ++-----------+------------+----------------------------------------------+ +| IR-RX/TX | on-board | Infrared Receiver(38Khz)/Transmitter | ++-----------+------------+----------------------------------------------+ +| STLINK-V2 | on-board | STLINK-V2 Debugger | ++-----------+------------+----------------------------------------------+ + +Other hardware features are not yet supported on this Zephyr port. + +The default configuration can be found in the defconfig file: + + ``boards/arm/pandora_stm32l475/pandora_stm32l475_defconfig`` + + +Connections and IOs +=================== + +STM32L475 Pandora Board has 8 GPIO controllers. These controllers are responsible for pin muxing, +input/output, pull-up, etc. + +For mode details please refer to `STM32L475 Pandora board User Manual`_. + +Default Zephyr Peripheral Mapping: +---------------------------------- + +- UART_1_TX : PA9 +- UART_1_RX : PA10 +- LED_R : PE7 +- LED_G : PE8 +- LED_B : PE9 + +System Clock +------------ + +STM32L475 Pandora System Clock could be driven by an internal or external oscillator, +as well as the main PLL clock. By default the System clock is driven by the PLL clock at 80MHz, +driven by 16MHz high speed internal oscillator. + +Serial Port +----------- + +STM32L475 Pandora board has 6 U(S)ARTs. The Zephyr console output is assigned to UART2. +Default settings are 115200 8N1. + + +Programming and Debugging +************************* + +Flashing +======== + +STM32L475 Pandora board includes an ST-LINK/V2-1 embedded debug tool interface. +This interface is supported by the openocd version included in Zephyr SDK. + +Flashing an application to STM32L475 Pandora +-------------------------------------------- + +Connect the STM32L475 Pandora to your host computer using the USB +port, then run a serial host program to connect with your Discovery +board. For example: + +.. code-block:: console + + $ minicom -D /dev/ttyACM0 + +Then, build and flash in the usual way. Here is an example for the +:ref:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: stm32l475ve_pandora + :goals: build flash + +You should see the following message on the console: + +.. code-block:: console + + Hello World! arm + +Debugging +========= + +You can debug an application in the usual way. Here is an example for the +:ref:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: stm32l475ve_pandora + :maybe-skip-config: + :goals: debug + +.. _STM32L475 Pandora website: + http://www.openedv.com/docs/boards/iot/zdyz_panduola.html + +.. _STM32L475 Pandora board User Manual: + http://www.openedv.com/thread-284556-1-1.html diff --git a/boards/arm/pandora_stm32l475/pandora_stm32l475.dts b/boards/arm/pandora_stm32l475/pandora_stm32l475.dts new file mode 100644 index 00000000000..d2cc14979d4 --- /dev/null +++ b/boards/arm/pandora_stm32l475/pandora_stm32l475.dts @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2017 TsMax + * + * Based on stm32l475_pandora: + * + * Copyright (c) 2017 Tisilicon Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include + +/ { + model = "STM32L475 Pandora Development Board"; + compatible = "st,pandora_stm32l475"; + + aliases { + led0 = &red_led; + sw0 = &joy_up; + }; + + chosen { + zephyr,console = &usart1; + zephyr,shell-uart = &usart1; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + + spi-flash0 = &w25q128jv; + }; + + leds { + compatible = "gpio-leds"; + red_led: led_0 { + gpios = <&gpioe 7 GPIO_ACTIVE_HIGH>; + label = "User LED_R"; + }; + green_led: led_1 { + gpios = <&gpioe 8 GPIO_ACTIVE_HIGH>; + label = "User LED_G"; + }; + blue_led: led_2 { + gpios = <&gpioe 9 GPIO_ACTIVE_HIGH>; + label = "User LED_B"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + joy_up: joystick_up { + label = "joystick up"; + gpios = <&gpioc 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>; + }; + joy_down: joystick_down { + label = "joystick down"; + gpios = <&gpiod 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + }; + joy_left: joystick_left { + label = "joystick left"; + gpios = <&gpiod 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + }; + joy_right: joystick_right { + label = "joystick right"; + gpios = <&gpiod 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + }; + }; +}; + +&quadspi { + pinctrl-0 = <&quadspi_clk_pe10 &quadspi_ncs_pe11 + &quadspi_bk1_io0_pe12 &quadspi_bk1_io1_pe13 + &quadspi_bk1_io2_pe14 &quadspi_bk1_io3_pe15>; + pinctrl-names = "default"; + + status = "okay"; + w25q128jv: qspi-nor-flash@0 { + compatible = "st,stm32-qspi-nor"; + reg = <0>; + qspi-max-frequency = <80000000>; + size = <0x8000000>; + jedec-id = [ef 40 18]; + spi-bus-width = <4>; + status = "okay"; + }; +}; + + +&clk_lsi { + status = "okay"; +}; + +&clk_hsi { + status = "okay"; +}; + +&pll { + div-m = <1>; + mul-n = <20>; + div-p = <7>; + div-q = <2>; + div-r = <4>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; + apb2-prescaler = <1>; +}; + +&usart1 { + pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&rtc { + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x10000000>, + <&rcc STM32_SRC_LSI RTC_SEL(2)>; + status = "okay"; + + backup_regs { + status = "okay"; + }; +}; diff --git a/boards/arm/pandora_stm32l475/pandora_stm32l475.yaml b/boards/arm/pandora_stm32l475/pandora_stm32l475.yaml new file mode 100644 index 00000000000..d0f6adfdbf8 --- /dev/null +++ b/boards/arm/pandora_stm32l475/pandora_stm32l475.yaml @@ -0,0 +1,13 @@ +identifier: pandora_stm32l475 +name: STM32L475 Pandora +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 128 +flash: 512 +supported: + - gpio + - counter diff --git a/boards/arm/pandora_stm32l475/pandora_stm32l475_defconfig b/boards/arm/pandora_stm32l475/pandora_stm32l475_defconfig new file mode 100644 index 00000000000..6b76862a311 --- /dev/null +++ b/boards/arm/pandora_stm32l475/pandora_stm32l475_defconfig @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_STM32L4X=y +CONFIG_SOC_STM32L475XX=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# enable uart driver +CONFIG_SERIAL=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable Clocks +CONFIG_CLOCK_CONTROL=y + +# console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# enable pin controller +CONFIG_PINCTRL=y diff --git a/boards/arm/pandora_stm32l475/support/openocd.cfg b/boards/arm/pandora_stm32l475/support/openocd.cfg new file mode 100644 index 00000000000..d9d989eb30e --- /dev/null +++ b/boards/arm/pandora_stm32l475/support/openocd.cfg @@ -0,0 +1,25 @@ +# Explicitly for the STM32L475 Pandora board: +# http://www.st.com/web/en/catalog/tools/PF261635 +# but perfectly functional for any other STM32L4 board connected via +# an stlink-v2-1 interface. +# This is for STM32L4 boards that are connected via stlink-v2-1. + +source [find interface/stlink.cfg] + +transport select hla_swd + +source [find target/stm32l4x.cfg] + +reset_config srst_only + + +$_TARGETNAME configure -event gdb-attach { + echo "Debugger attaching: halting execution" + reset halt + gdb_breakpoint_override hard +} + +$_TARGETNAME configure -event gdb-detach { + echo "Debugger detaching: resuming execution" + resume +} diff --git a/dts/arm/st/l4/stm32l475Xe.dtsi b/dts/arm/st/l4/stm32l475Xe.dtsi new file mode 100644 index 00000000000..86442f8b762 --- /dev/null +++ b/dts/arm/st/l4/stm32l475Xe.dtsi @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Tisilicon Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include + +/ { + sram0: memory@20000000 { + reg = <0x20000000 DT_SIZE_K(128)>; + }; + + soc { + flash-controller@40022000 { + flash0: flash@8000000 { + reg = <0x08000000 DT_SIZE_K(512)>; + }; + }; + }; +};