boards: add support for eval-adin2111ebz

Add support for ADI EVAL-ADIN2111EBZ.

Tested samples:
      * hello_world
      * blinky
      * dhcpv4_client

Co-developed-by: Philip Molloy <pmolloy@baylibre.com>
Signed-off-by: Philip Molloy <pmolloy@baylibre.com>
Signed-off-by: Angelo Dureghello <adureghello@baylibre.com>
This commit is contained in:
Angelo Dureghello 2024-01-24 14:50:34 +01:00 committed by Carles Cufí
parent 6d387b3fd5
commit 4fe3a8827f
10 changed files with 481 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# ADI EVAL-ADIN2111EBZ board configuration
# Copyright (c) 2024 BayLibre
# SPDX-License-Identifier: Apache-2.0
config BOARD_ADI_EVAL_ADIN2111EBZ
bool "ADI EVAL-ADIN2111EBZ evaulation board"
depends on SOC_STM32L4S5XX

View file

@ -0,0 +1,37 @@
# ADI EVAL-ADIN2111EBZ board configuration
# Copyright (c) 2024 BayLibre
# SPDX-License-Identifier: Apache-2.0
if BOARD_ADI_EVAL_ADIN2111EBZ
config BOARD
default "adi_eval_adin2111ebz"
config SPI_STM32_INTERRUPT
default y
depends on SPI
config MDIO_INIT_PRIORITY
default 81
depends on MDIO
config PHY_INIT_PRIORITY
default 82
depends on NET_L2_ETHERNET && ETH_DRIVER
if NETWORKING
config NET_L2_ETHERNET
default y
if ETH_ADIN2111
config NET_IF_MAX_IPV4_COUNT
default 2
endif # ETH_ADIN2111
endif # NETWORKING
endif # BOARD_ADI_EVAL_ADIN2111EBZ

View file

@ -0,0 +1,197 @@
/*
* Copyright (c) 2024 BayLibre
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/l4/stm32l4s5Xi.dtsi>
#include <st/l4/stm32l4s5qiix-pinctrl.dtsi>
/ {
model = "Analog Devices Inc. EVAL-ADIN2111EBZ board";
compatible = "adi,eval-adin2111ebz";
chosen {
zephyr,console = &usart1;
zephyr,shell-uart = &usart1;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
};
leds {
compatible = "gpio-leds";
blue_led: uC_led1 {
gpios = <&gpiob 6 GPIO_ACTIVE_HIGH>;
label = "Debug led uC1";
};
net_red_led: led_NET1 {
gpios = <&gpiob 10 GPIO_ACTIVE_HIGH>;
label = "NET led 1";
};
net_green_led: led_NET2 {
gpios = <&gpiob 11 GPIO_ACTIVE_HIGH>;
label = "NET led 2";
};
mod_red_led: led_MOD1 {
gpios = <&gpioe 2 GPIO_ACTIVE_HIGH>;
label = "Mod led 1";
};
mod_green_led: led_MOD2 {
gpios = <&gpioe 6 GPIO_ACTIVE_HIGH>;
label = "Mod led 2";
};
};
aliases {
led0 = &blue_led;
watchdog0 = &iwdg;
spi-flash0 = &flash_ext;
};
};
&clk_lsi {
status = "okay";
};
&clk_hsi48 {
status = "okay";
};
&clk_hsi {
status = "okay";
};
&pll {
div-m = <4>;
mul-n = <40>;
div-q = <2>;
div-r = <2>;
clocks = <&clk_hsi>;
status = "okay";
};
&rcc {
clocks = <&pll>;
clock-frequency = <DT_FREQ_M(80)>;
ahb-prescaler = <1>;
apb1-prescaler = <1>;
apb2-prescaler = <1>;
};
&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x00000000 DT_SIZE_K(64)>;
read-only;
};
/*
* The flash starting at offset 0x10000 and ending at
* offset 0x1ffff is reserved for use by the application.
*/
slot0_partition: partition@20000 {
label = "image-0";
reg = <0x00020000 DT_SIZE_K(432)>;
};
slot1_partition: partition@8c000 {
label = "image-1";
reg = <0x0008C000 DT_SIZE_K(432)>;
};
scratch_partition: partition@f8000 {
label = "image-scratch";
reg = <0x000F8000 DT_SIZE_K(16)>;
};
storage_partition: partition@fc000 {
label = "storage";
reg = <0x000fc000 DT_SIZE_K(16)>;
};
};
};
&iwdg {
status = "okay";
};
&rng {
status = "okay";
};
&dma1 {
status = "okay";
};
&dmamux1 {
status = "okay";
};
&usart1 { /* USB FT232 */
pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
pinctrl-names = "default";
current-speed = <115200>;
status = "okay";
};
&spi1 {
pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
pinctrl-names = "default";
cs-gpios = <&gpioa 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
status = "okay";
flash_ext: flash@0 {
compatible = "issi,is25lp128", "jedec,spi-nor";
size = <134217728>;
jedec-id = [96 60 18];
reg = <0>;
spi-max-frequency = <133000000>;
status = "okay";
};
};
&spi2 {
pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>;
pinctrl-names = "default";
cs-gpios = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
status = "okay";
adin2111: adin2111@0 {
compatible = "adi,adin2111";
reg = <0x0>;
spi-max-frequency = <25000000>;
int-gpios = <&gpioa 12 GPIO_ACTIVE_LOW>;
status = "okay";
port1 {
local-mac-address = [ 00 E0 22 FE DA C9 ];
};
port2 {
local-mac-address = [ 00 E0 22 FE DA D9 ];
};
mdio {
compatible = "adi,adin2111-mdio";
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ethernet-phy@1 {
reg = <0x1>;
compatible = "adi,adin2111-phy";
status = "okay";
};
ethernet-phy@2 {
reg = <0x2>;
compatible = "adi,adin2111-phy";
status = "okay";
};
};
};
};

View file

@ -0,0 +1,15 @@
identifier: adi_eval_adin2111ebz
name: ADI EVAL-ADIN2111EBZ evaulation board
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 640
flash: 2048
supported:
- gpio
- spi
- watchdog
vendor: adi

View file

@ -0,0 +1,21 @@
# SPDX-License-Identifier: Apache-2.0
CONFIG_BOARD_ADI_EVAL_ADIN2111EBZ=y
CONFIG_SOC_SERIES_STM32L4X=y
CONFIG_SOC_STM32L4S5XX=y
# enable uart driver
CONFIG_SERIAL=y
# console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
# enable GPIO
CONFIG_GPIO=y
# Enable Clocks
CONFIG_CLOCK_CONTROL=y
# enable pin controller
CONFIG_PINCTRL=y

View file

@ -0,0 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(jlink "--device=STM32L4S5QI" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View file

@ -0,0 +1,184 @@
.. _adi_eval_adin2111ebz:
ADI EVAL-ADIN2111EVB Evaluation board
#####################################
Overview
********
The EVAL-ADIN2111EBZ is a flexible platform enabling quick evaluation of the ADIN2111, robust,
low power 10BASE-T1L 2-Port Ethernet switch. The evaluation board provides 2 10BASE-T1L channels
with 10Mbit per second Single Pair Ethernet (SPE) connections reaching up to 1.7km of link distance.
The ADIN2111 internal switch can be configured in store and forward mode between the two 10BASE-T1L
channels and the SPI host. Cut through mode is also available between Port 1 and Port 2 and can
be used without the need of the SPI host (unmanaged configuration).
The evaluation board offers two modes of operation for maximum flexibility: Connected to a PC
via USB port, the full set of ADIN2111 register settings and features such as link quality
monitoring and diagnostics can be accessed over the USB using the serial command interface
implemented in the evaluation firmware.
Alternatively, the board can operate in cut-through mode between Port 1 and Port 2 (unmanaged
configuration without firmware) where the EVAL-ADIN2111EBZ acts as a network switch forwarding
packets between the 2x 10BASE-T1L ports. The 2x links are configured by setting the ADIN2111
hardware configuration pins jumper and switches. The 2x On-board Activity LEDs provide Link
activity status indication for each port.
Custom firmware can also be developed and the ADIN2111 driver support package includes simple
project examples to start a custom implementation.
The SPI interface provides access to the management registers required for the switch configuration,
the 2 PHYs configuration and data exchange between SPI host and ports.
.. important::
S1 DIP switches are shipped in Open Alliance SPI mode. The current Zephyr
default board configuration is set to work as "Generic SPI, CRC enabled",
so the S1 DIP switches must be set as ``SPI_CFG0 OFF and SPI_CFG1 OFF``.
An inconsistent S1 DIP switches configuration will halt the boot.
.. figure:: img/adi_eval_adin2111ebz.webp
:align: center
:alt: ADI EVAL-ADIN2111EBZ
ADI EVAL-ADIN2111EBZ (Credit: Analog Devices, Inc.)
Hardware
********
The ADI EVAL-ADIN2111EBZ hardware features list is available here:
https://wiki.analog.com/resources/eval/user-guides/eval-adin2111ebz-user-guide
Supported Features
==================
The ADI adi_eval_adin2111ebz 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 |
+--------------+------------+-------------------------------------+
| SPI | on-chip | spi |
+--------------+------------+-------------------------------------+
| PWM | on-chip | pwm |
+--------------+------------+-------------------------------------+
| WATCHDOG | on-chip | independent watchdog |
+--------------+------------+-------------------------------------+
| ADIN2111 | spi | adin2111 10BASE-T1L mac/phy |
+--------------+------------+-------------------------------------+
| FT232 | uart | usb-uart |
+--------------+------------+-------------------------------------+
The default configuration can be found in the defconfig file:
``boards/arm/adi_eval_adin2111ebz/adi_eval_adin2111ebz_defconfig``
Connections and IOs
===================
ADI ADIN2111EBZ evaluation board has 7 GPIO controllers (from A to G).
These controllers are responsible for pin muxing, input/output, pull-up, etc.
For mode details please refer to `EVAL-ADIN2111EBZ User Guide <https://wiki.analog.com/resources/eval/user-guides/eval-adin2111ebz-user-guide>`_.
Default Zephyr Peripheral Mapping:
----------------------------------
- UART_1 TX/RX : PA9/PA10 (UART to FT232, console)
- SPI1 SCK/MISO/MOSI : PA5/PA6/PA7 (SPI to external nor flash IS25LP128)
- SPI2 SCK/MISO/MOSI : PB13/PB14/PB15 (SPI to external ADIN2111)
- LED1 : POWER (Green LED)
- UC_LED1 : PB6 (Blue LED)
- MOD LED1 : PE2 (SR LED)
- MOD LED2 : PE6 (BG LED)
- NET LED1 : PB10 (SR LED)
- NET LED2 : PB11 (BG LED)
System Clock
------------
EVAL-ADIN2111EBZ 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 the
16MHz high speed internal oscillator.
Serial Port
-----------
EVAL-ADIN2111EBZ has 1 U(S)ART. The Zephyr console output is assigned to UART1 that is connected
to a FT232, available through Micro USB connector. Default settings are 115200 8N1.
Same UART1 TX and RX cmos signals are available before the FT232, at P9 connector.
Programming and Debugging
*************************
Flashing
========
EVAL-ADIN2111EBZ includes an ST-LINK/V2-1 JTAG/SWD 10 or 20 pin connector. This interface is
supported by the openocd version included in Zephyr SDK.
Flashing an application to Discovery kit
-----------------------------------------
Connect the EVAL-ADIN2111EBZ to your host computer using the USB port, then run a serial host
program to connect with your ADI board. For example:
.. code-block:: console
$ minicom -D /dev/serial/by-id/usb-ADI_EVAL-ADIN2111EBZ_XXXXXX-12-if00-port0
where XXXXXX is the serial number of the connected device.
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: adi_eval_adin2111ebz
:goals: build flash
You should see the following message on the console:
.. code-block:: console
Hello World! adi_eval_adin2111ebz
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: adi_eval_adin2111ebz
:maybe-skip-config:
:goals: debug
.. _EVAL-ADIN2111EBZ evaluation board website:
https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/eval-adin2111.html
.. _EVAL-ADIN2111EBZ board User Guide:
https://wiki.analog.com/resources/eval/user-guides/eval-adin2111ebz-user-guide
.. _ADIN2111 Datasheet:
https://www.analog.com/media/en/technical-documentation/data-sheets/adin2111.pdf
.. _STM32L4S5QII3P reference manual:
https://www.st.com/resource/en/reference_manual/rm0432-stm32l4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

View file

@ -0,0 +1 @@
list(APPEND EXTRA_DTC_FLAGS "-Wno-simple_bus_reg")

View file

@ -0,0 +1,12 @@
source [find board/stm32l4discovery.cfg]
$_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
}