boards: add support for eval-adin1110ebz

Add support for ADI EVAL-ADIN1110EBZ.

Tested samples:
      * hello_world
      * blinky
      * dhcpv4_client
      * adt7420

Tested proper SPI detection of the ADIN1110 chip.

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 11:21:32 +01:00 committed by Carles Cufí
parent b77df76e98
commit 6d387b3fd5
11 changed files with 647 additions and 0 deletions

View file

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

View file

@ -0,0 +1,33 @@
# ADI EVAL-ADIN1110EBZ board configuration
# Copyright (c) 2024 BayLibre
# SPDX-License-Identifier: Apache-2.0
if BOARD_ADI_EVAL_ADIN1110EBZ
config BOARD
default "adi_eval_adin1110ebz"
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
config MEMC
default y
if NETWORKING
config NET_L2_ETHERNET
default y
endif # NETWORKING
endif # BOARD_ADI_EVAL_ADIN1110EBZ

View file

@ -0,0 +1,321 @@
/*
* Copyright (c) 2024 BayLibre
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/l4/stm32l4s5Xi.dtsi>
#include <st/l4/stm32l4s5qiix-pinctrl.dtsi>
#include "arduino_r3_connector.dtsi"
#include <zephyr/dt-bindings/memory-controller/stm32-fmc-nor-psram.h>
/ {
model = "Analog Devices Inc. EVAL-ADIN1110EBZ board";
compatible = "adi,eval-adin1110ebz";
chosen {
zephyr,console = &usart1;
zephyr,shell-uart = &usart1;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
zephyr,flash-controller = &mx25r6435f;
};
ram0: psram@60000000 {
compatible = "zephyr,memory-region", "mmio-sram";
device_type = "memory";
reg = <0x60000000 DT_SIZE_M(8)>;
zephyr,memory-region = "RAM0";
};
leds { /* Respecting pcb silkscreen naming */
compatible = "gpio-leds";
green_led: led_uC0 {
gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>;
label = "Status uC0";
};
red_led: led_uC1 {
gpios = <&gpioe 2 GPIO_ACTIVE_HIGH>;
label = "Status uC1 ";
};
yellow_led: led_uC2 {
gpios = <&gpioe 6 GPIO_ACTIVE_HIGH>;
label = "Status uC2";
};
blue_led: led_uC3 {
gpios = <&gpiog 15 GPIO_ACTIVE_HIGH>;
label = "Status uC3";
};
};
aliases {
led0 = &green_led;
watchdog0 = &iwdg;
spi-flash0 = &mx25r6435f;
};
soc {
fmc: memory-controller@a0000000 {
compatible = "st,stm32-fmc";
reg = <0xa0000000 0x400>;
clocks = <&rcc STM32_CLOCK_BUS_AHB3 0x00000001>;
sram {
compatible = "st,stm32-fmc-nor-psram";
#address-cells = <1>;
#size-cells = <0>;
};
};
};
};
&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";
};
&uart4 { /* ARDUINO P405 1 & 2 */
pinctrl-0 = <&uart4_tx_pa0 &uart4_rx_pa1>;
pinctrl-names = "default";
current-speed = <115200>;
};
&i2c1 {
pinctrl-0 = <&i2c1_scl_pg14 &i2c1_sda_pg13>;
pinctrl-names = "default";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
};
&i2c3 {
pinctrl-0 = <&i2c3_scl_pg7 &i2c3_sda_pg8>;
pinctrl-names = "default";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
adt7420@48 {
compatible = "adi,adt7420";
reg = <0x48>;
};
};
&spi1 {
pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
pinctrl-names = "default";
cs-gpios = <&gpioa 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
&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";
adin1110: adin1110@0 {
compatible = "adi,adin1110";
reg = <0x0>;
spi-max-frequency = <25000000>;
int-gpios = <&gpiob 11 GPIO_ACTIVE_LOW>;
reset-gpios = <&gpioc 7 GPIO_ACTIVE_LOW>;
port1 {
local-mac-address = [ 00 E0 22 FE DA C8 ];
};
mdio {
compatible = "adi,adin2111-mdio";
#address-cells = <1>;
#size-cells = <0>;
ethernet-phy@1 {
reg = <0x1>;
compatible = "adi,adin2111-phy";
};
};
};
};
&spi3 {
pinctrl-0 = <&spi3_sck_pc10 &spi3_miso_pc11 &spi3_mosi_pc12>;
pinctrl-names = "default";
status = "okay";
};
&timers2 {
status = "okay";
pwm2: pwm {
status = "okay";
pinctrl-0 = <&tim2_ch1_pa15>;
pinctrl-names = "default";
};
};
&rtc {
clocks = <&rcc STM32_CLOCK_BUS_APB1 0x10000000>,
<&rcc STM32_SRC_LSI RTC_SEL(2)>;
status = "okay";
};
zephyr_udc0: &usbotg_fs {
pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12
&usb_otg_fs_id_pa10>;
pinctrl-names = "default";
status = "okay";
};
&octospi1 {
pinctrl-0 = <&octospim_p1_clk_pa3 &octospim_p1_ncs_pa4
&octospim_p1_io0_pb1 &octospim_p1_io1_pb0
&octospim_p1_io2_pa7 &octospim_p1_io3_pa6>;
pinctrl-names = "default";
dmas = <&dma1 0 40 0x480>; /* request 40 for OCTOSPI1 */
dma-names = "tx_rx";
status = "okay";
mx25r6435f: ospi-nor-flash@0 {
compatible = "st,stm32-ospi-nor";
reg = <0>;
ospi-max-frequency = <DT_FREQ_M(26)>; /* for Voltage Range 2 */
size = <DT_SIZE_M(64)>; /* 64 Megabits */
spi-bus-width = <OSPI_QUAD_MODE>;
data-rate = <OSPI_STR_TRANSFER>;
writeoc="PP_1_4_4";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
store_partition: partition@0 {
label = "store";
reg = <0x00000000 DT_SIZE_M(8)>;
};
};
};
};
&fmc {
pinctrl-0 = <&fmc_nbl0_pe0 &fmc_nbl1_pe1
&fmc_nce_pd7 &fmc_nwe_pd5 &fmc_noe_pd4
&fmc_a0_pf0 &fmc_a1_pf1 &fmc_a2_pf2 &fmc_a3_pf3
&fmc_a4_pf4 &fmc_a5_pf5 &fmc_a6_pf12 &fmc_a7_pf13
&fmc_a8_pf14 &fmc_a9_pf15 &fmc_a10_pg0 &fmc_a11_pg1
&fmc_a12_pg2 &fmc_a13_pg3 &fmc_a14_pg4 &fmc_a15_pg5
&fmc_a16_pd11 &fmc_a17_pd12 &fmc_a18_pd13 &fmc_a19_pe3
&fmc_a20_pe4 &fmc_a21_pe5
&fmc_d0_pd14 &fmc_d1_pd15 &fmc_d2_pd0 &fmc_d3_pd1
&fmc_d4_pe7 &fmc_d5_pe8 &fmc_d6_pe9 &fmc_d7_pe10
&fmc_d8_pe11 &fmc_d9_pe12 &fmc_d10_pe13 &fmc_d11_pe14
&fmc_d12_pe15 &fmc_d13_pd8 &fmc_d14_pd9 &fmc_d15_pd10>;
pinctrl-names = "default";
sram {
bank@0 {
reg = <0x0>;
st,control = <STM32_FMC_DATA_ADDRESS_MUX_DISABLE
STM32_FMC_MEMORY_TYPE_SRAM
STM32_FMC_NORSRAM_MEM_BUS_WIDTH_16
STM32_FMC_BURST_ACCESS_MODE_DISABLE
STM32_FMC_WAIT_SIGNAL_POLARITY_LOW
STM32_FMC_WAIT_TIMING_BEFORE_WS
STM32_FMC_WRITE_OPERATION_ENABLE
STM32_FMC_WAIT_SIGNAL_DISABLE
STM32_FMC_EXTENDED_MODE_DISABLE
STM32_FMC_ASYNCHRONOUS_WAIT_DISABLE
STM32_FMC_WRITE_BURST_DISABLE
STM32_FMC_CONTINUOUS_CLOCK_SYNC_ONLY
STM32_FMC_WRITE_FIFO_DISABLE
STM32_FMC_PAGE_SIZE_NONE>;
st,timing = <4 2 3 0 16 17 STM32_FMC_ACCESS_MODE_A>;
};
};
};

View file

@ -0,0 +1,21 @@
identifier: adi_eval_adin1110ebz
name: ADI EVAL-ADIN1110EBZ evaulation board
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 640
flash: 2048
supported:
- arduino_gpio
- arduino_i2c
- arduino_spi
- gpio
- i2c
- spi
- watchdog
- memc
- octospi
vendor: adi

View file

@ -0,0 +1,21 @@
# SPDX-License-Identifier: Apache-2.0
CONFIG_BOARD_ADI_EVAL_ADIN1110EBZ=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,40 @@
/*
* Copyright (c) 2024 BayLibre
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
arduino_header: connector {
compatible = "arduino-header-r3";
#gpio-cells = <2>;
gpio-map-mask = <0xffffffff 0xffffffc0>;
gpio-map-pass-thru = <0 0x3f>;
gpio-map = <0 0 &gpioc 0 0>, /* A0/D14 */
<1 0 &gpioc 1 0>, /* A1/D15 */
<2 0 &gpioc 2 0>, /* A2/D16 */
<3 0 &gpioc 3 0>, /* A3/D17 */
<4 0 &gpioc 4 0>, /* A4/D18 */
<5 0 &gpioc 5 0>, /* A5/D19 */
<6 0 &gpioa 0 0>, /* D0 */
<7 0 &gpioa 1 0>, /* D1 */
<8 0 &gpioa 2 0>, /* D2 */
<9 0 &gpiod 2 0>, /* D3 */
<10 0 &gpiod 6 0>, /* D4 */
<11 0 &gpiob 7 0>, /* D5 */
<12 0 &gpiob 8 0>, /* D6 */
<13 0 &gpiob 9 0>, /* D7 */
<14 0 &gpiob 6 0>, /* D8 */
<15 0 &gpiob 5 0>, /* D9 */
<16 0 &gpiog 12 0>, /* D10 */
<17 0 &gpioc 12 0>, /* D11 */
<18 0 &gpioc 11 0>, /* D12 */
<19 0 &gpioc 10 0>, /* D13 */
<20 0 &gpioc 0 0>, /* D14 */
<21 0 &gpioc 1 0>; /* D15 */
};
};
arduino_i2c: &i2c1 {};
arduino_spi: &spi3 {};
arduino_serial: &uart4 {};

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: 69 KiB

View file

@ -0,0 +1,183 @@
.. _adi_eval_adin1110ebz:
ADI EVAL-ADIN1110EVB Evaluation board
#####################################
Overview
********
The EVAL-ADIN1110EBZ is a flexible platform enabling quick evaluation of the ADIN1110, robust,
low power 10BASE-T1L MAC-PHY. It provides 10Mbit per second Single Pair Ethernet (SPE) connections
with devices across 1.7km of cable.
The evaluation board offers two modes of operation for maximum flexibility. Connected to a PC
via USB port, the full set of ADIN1110 register settings and features such as link quality
monitoring and diagnostics can be accessed over the USB using serial command interface.
The board also provides an Arduino interface.
Alternatively, the board can operate in stand-alone mode where it is configured by setting hardware
configuration links and switches. On-board LEDs provide status indication.
The SPI interface provides configuration and data access to the ADIN1110.
A small prototyping area and test points are provided for experimentation with alternative cable
connection topologies including isolation transformers and/or power coupling inductors.
.. figure:: img/adi_eval_adin1110ebz.webp
:align: center
:alt: ADI EVAL-ADIN1110EBZ
ADI EVAL-ADIN1110EBZ (Credit: Analog Devices, Inc.)
.. important::
S201 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 S201 DIP switches must be set as ``SPI_CFG0 OFF`` and ``SPI_CFG1 ON``.
An inconsistent S201 DIP switches configuration will halt the boot.
Hardware
********
The ADI EVAL-ADIN1110EBZ hardware features list is available here:
https://wiki.analog.com/resources/eval/user-guides/eval-adin1110ebz-user-guide
Supported Features
==================
The ADI adi_eval_adin1110ebz 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 |
+--------------+------------+-------------------------------------+
| ADIN1110 | spi | adin1110 10BASE-T1L mac/phy |
+--------------+------------+-------------------------------------+
| FT232 | uart | usb-uart |
+--------------+------------+-------------------------------------+
| ADT7422 | i2c | temperature sensor |
+--------------+------------+-------------------------------------+
| ISS66WVE4M16 | fmc | 8MB PSRAM |
+--------------+------------+-------------------------------------+
The default configuration can be found in the defconfig file:
``boards/arm/adi_eval_adin1110ebz/adi_eval_adin1110ebz_defconfig``
Connections and IOs
===================
ADI ADIN1110EBZ 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-ADIN1110EBZ User Guide <https://wiki.analog.com/resources/eval/user-guides/eval-adin1110ebz-user-guide>`_.
Default Zephyr Peripheral Mapping:
----------------------------------
- UART_1 TX/RX : PA9/PA10 (UART to FT232)
- UART_4 TX/RX : PA0/PA1 (Arduino Serial)
- I2C1 SCL/SDA : PG14/PG13 (Arduino I2C)
- I2C3 SCL/SDA : PG7/PG8 (Sensor I2C bus)
- SPI1 SCK/MISO/MOSI : PA5/PA6/PA7 (Simple SPI to nor Flash)
- SPI2 SCK/MISO/MOSI : PB13/PB14/PB15 (ADIN1110)
- SPI3 SCK/MISO/MOSI : PC10/PC11/PC12 (Arduino SPI)
- LD1 : PC13 (Green LED)
- LD2 : PE2 (Red LED)
- LD3 : PE6 (Yellow LED)
- LD4 : PG15 (Blue LED)
- PSRAM : PE0/PE1/PF0-PF15/PG0-PG5/PD11-PD13/PE3/PE4
PD14/PD15/PD9/PD1/PE7-PE15/PD8-PD10
System Clock
------------
EVAL-ADIN1110EBZ 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-ADIN1110EBZ has 2 U(S)ARTs. The Zephyr console output is assigned to UART1 that is connected
to a FT232, so available through Micro USB connector. Default settings are 115200 8N1.
Programming and Debugging
*************************
Flashing
========
EVAL-ADIN1110EBZ 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-ADIN1110EBZ 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-ADIN1110EBZ_AVAS_XXXXXX-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_adin1110ebz
:goals: build flash
You should see the following message on the console:
.. code-block:: console
Hello World! adi_eval_adin1110ebz
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_adin1110ebz
:maybe-skip-config:
:goals: debug
.. _EVAL-ADIN1110EBZ evaluation board website:
https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/eval-adin1110.html
.. _EVAL-ADIN1110EBZ board User Guide:
https://wiki.analog.com/resources/eval/user-guides/eval-adin1110ebz-user-guide
.. _ADIN1110 Datasheet:
https://www.analog.com/media/en/technical-documentation/data-sheets/adin1110.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,2 @@
list(APPEND EXTRA_DTC_FLAGS "-Wno-spi_bus_bridge")
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
}