boards/risc-v/eic7700x: Add the ESWIN EIC7700 EVB board.

ESWIN's own evaluation board for this SoC.  Where the StarPro64 is a
single board computer built around the chip, the EVB brings out most of
the SoC's interfaces.

Everything shared with the StarPro64 is already in the common directory,
so this carries the board's own facts: which UART reaches which connector,
which pads carry the boot straps, where its memory sits, and a
configuration starting from the same place the StarPro64's does.

The summary tables on sheet 3 of both boards' schematics are inherited
from ESWIN's reference design and describe that design rather than either
board.  On this board the console is UART0 through the FT4232 bridge,
UART1 goes to the M.2 socket and a header, and UART2 reaches the RS232
port.

The documentation page follows the board template: a photograph, the
board's features, the console and its port on the FT4232 bridge, power,
the build and TFTP boot procedure, and what NuttX drives so far.

Boots to an NSH prompt over UART0 with all four harts running.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Justin Hammond <justin@dynam.ac>
This commit is contained in:
Justin Hammond 2026-08-16 18:03:00 +08:00 committed by Xiang Xiao
parent 78dfefa4cc
commit aa8ce27d35
11 changed files with 575 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

View file

@ -0,0 +1,154 @@
=================
ESWIN EIC7700 EVB
=================
.. tags:: chip:eic7700x, arch:risc-v, vendor:eswin, experimental
.. figure:: eic7700-evb.jpg
:align: center
:alt: The ESWIN EIC7700 EVB, a development board carrying the EIC7700X SoC
ESWIN EIC7700 EVB
The `EIC7700 EVB <https://www.eswincomputing.com/en/products/index/36.html>`_
is ESWIN's own evaluation board for the
:doc:`EIC7700X <../../index>` SoC. Where the
:doc:`PINE64 StarPro64 <../starpro64/index>` is a single board computer built
around the chip, the EVB brings out most of the SoC's interfaces, so it is the
board to develop drivers on.
Features
========
* ESWIN EIC7700X, 4 x RV64GC 1.4 GHz RISC-V cores
* 16 GB LPDDR5
* eMMC, microSD and SPI NOR flash, the last holding the boot firmware
* 2 x Ethernet (GMAC, RGMII)
* 2 x USB 3.0, host and device capable
* HDMI output, with CEC
* PCIe 3.0 slot, and two M.2 slots, for SATA and for a WiFi and Bluetooth
module
* USB serial console, RS232 on a DB9, and further UARTs on the headers
* Expansion headers carrying GPIO, I2C, SPI and PWM
* PWM fan header
.. warning::
This port is under development and drives a subset of the board.
`Peripheral Support`_ below records what it drives.
Serial Console
==============
The console is UART0 at **115200 8N1**. It is wired to the on-board FT4232
USB bridge, so a single USB cable carries it and no separate USB serial
adapter is needed. The bridge presents four ports, of which UART0 is the
third; on Linux that is usually ``/dev/ttyUSB2``, the first of the four
being the JTAG interface:
.. code:: console
$ screen /dev/ttyUSB2 115200
Buttons and LEDs
================
The board has four LEDs on GPIO lines 107 to 110 and one push button, ``OK``,
on GPIO line 6. NuttX does not drive any of them yet.
Power Supply
============
The board is powered through its barrel jack. The core rails, including the
NPU rail, are set by regulators on I2C bus 1, which NuttX leaves alone: the
firmware has already configured them by the time NuttX starts, and writing to
them changes a core voltage.
RISC-V Toolchain
================
Install `xPack GNU RISC-V Embedded GCC (riscv-none-elf)
<https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases>`_ and
add its ``bin`` directory to ``PATH``, as described for the
:doc:`PINE64 StarPro64 <../starpro64/index>`.
Building NuttX
==============
Configure and build:
.. code:: console
$ cd nuttx
$ tools/configure.sh eic7700-evb:nsh
$ make
Then build the applications filesystem and package it with the kernel:
.. code:: console
$ make export
$ pushd ../apps
$ tools/mkimport.sh -z -x ../nuttx/nuttx-export-*.tar.gz
$ make import
$ popd
$ boards/risc-v/eic7700x/common/tools/mkimage.sh
The image is the kernel, then padding, then a RAM disk holding the
applications. Use the script rather than padding by hand: the RAM disk is
found at run time by searching memory for its header, and that search runs
after BSS has been cleared, so the disk has to start above ``_ebss`` or it is
zeroed before anything looks for it. The script reads ``_ebss`` from the
kernel and pads to suit.
The result is ``Image-eic7700-evb``.
Booting NuttX
=============
The board boots over TFTP from U-Boot, as the
:doc:`PINE64 StarPro64 <../starpro64/index>` does. Copy
``Image-eic7700-evb`` and the device tree to the TFTP server:
.. code:: console
$ wget https://github.com/lupyuen/nuttx-starpro64/raw/refs/heads/main/eic7700-evb.dtb
$ scp Image-eic7700-evb eic7700-evb.dtb tftpserver:/tftpfolder/
Interrupt U-Boot with Ctrl-C at power on and boot the image:
.. code:: console
# Change to your TFTP Server
$ setenv tftp_server 192.168.x.x
$ saveenv
$ dhcp ${kernel_addr_r} ${tftp_server}:Image-eic7700-evb
$ tftpboot ${fdt_addr_r} ${tftp_server}:eic7700-evb.dtb
$ fdt addr ${fdt_addr_r}
$ booti ${kernel_addr_r} - ${fdt_addr_r}
NuttShell appears on the console.
Configurations
==============
.. code:: console
$ tools/configure.sh eic7700-evb:<config-name>
nsh
---
NuttShell on UART0 at 115200 8N1, with the RAM disk mounted and ``/proc``
available. Built-in applications are supported; none are enabled.
Peripheral Support
==================
NuttX for the EIC7700 EVB supports these peripherals:
======================== ======= =====
Peripheral Support NOTES
======================== ======= =====
UART Yes
======================== ======= =====

View file

@ -2428,6 +2428,23 @@ config ARCH_BOARD_EIC7700X_STARPRO64
pad, drives the system state LED, GPIO63 is unconnected, the
UART3 pads carry I2C8, and the UART4 pads go nowhere.
config ARCH_BOARD_EIC7700X_EVB
bool "ESWIN EIC7700 EVB"
depends on ARCH_CHIP_EIC7700X
---help---
ESWIN's own evaluation board for the EIC7700X, which U-Boot
identifies as "ESWIN EIC7700 EVB" and whose schematic calls it
ESWIN-EIC7700FG-LP4X-A1.
UART0 is the console, on the FT4232 USB-C serial bridge. UART1
goes to the Bluetooth M.2 Key-E connector, CTS and RTS included,
and is also broken out on the six pin header J97. UART2 goes to
the RS232 transceiver and its DB9 connector. UART3 and UART4
are unused.
The four boot select pads, GPIO107 to GPIO110, each drive a
system LED once the straps have been sampled.
config ARCH_BOARD_S32K118EVB
bool "NXP S32K118EVB"
depends on ARCH_CHIP_S32K118
@ -4040,6 +4057,7 @@ config ARCH_BOARD
default "ox64" if ARCH_BOARD_BL808_OX64
default "milkv_duos" if ARCH_BOARD_SG2000_MILKV_DUOS
default "starpro64" if ARCH_BOARD_EIC7700X_STARPRO64
default "eic7700-evb" if ARCH_BOARD_EIC7700X_EVB
default "sabre-6quad" if ARCH_BOARD_SABRE_6QUAD
default "a2g-tc397-5v-tft" if ARCH_BOARD_A2G_TC397_5V_TFT
default "triboard_tc4x9_com" if ARCH_BOARD_TRIBOARD_TC4X9_COM
@ -5139,6 +5157,9 @@ endif
if ARCH_BOARD_EIC7700X_STARPRO64
source "boards/risc-v/eic7700x/starpro64/Kconfig"
endif
if ARCH_BOARD_EIC7700X_EVB
source "boards/risc-v/eic7700x/eic7700-evb/Kconfig"
endif
if ARCH_BOARD_ESP32C3_LEGACY_DEVKIT
source "boards/risc-v/esp32c3-legacy/esp32c3-legacy-devkit/Kconfig"
endif

View file

@ -0,0 +1,119 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_DISABLE_OS_API is not set
# CONFIG_NSH_DISABLE_LOSMART is not set
CONFIG_16550_ADDRWIDTH=0
CONFIG_16550_DLF_SIZE=4
CONFIG_16550_REGINCR=4
CONFIG_16550_UART0=y
CONFIG_16550_UART0_BASE=0x50900000
CONFIG_16550_UART0_CLOCK=200000000
CONFIG_16550_UART0_IRQ=125
CONFIG_16550_UART0_SERIAL_CONSOLE=y
CONFIG_16550_UART1=y
CONFIG_16550_UART1_BASE=0x50910000
CONFIG_16550_UART1_CLOCK=200000000
CONFIG_16550_UART1_IRQ=126
CONFIG_16550_UART2=y
CONFIG_16550_UART2_BASE=0x50920000
CONFIG_16550_UART2_CLOCK=200000000
CONFIG_16550_UART2_IRQ=127
CONFIG_16550_UART=y
CONFIG_16550_WAIT_LCR=y
CONFIG_ARCH="risc-v"
CONFIG_ARCH_ADDRENV=y
CONFIG_ARCH_BOARD="eic7700-evb"
CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_EIC7700X_EVB=y
CONFIG_ARCH_CHIP="eic7700x"
CONFIG_ARCH_CHIP_EIC7700X=y
CONFIG_ARCH_DATA_NPAGES=128
CONFIG_ARCH_DATA_VBASE=0xC0100000
CONFIG_ARCH_HEAP_NPAGES=128
CONFIG_ARCH_HEAP_VBASE=0xC0200000
CONFIG_ARCH_INTERRUPTSTACK=2048
CONFIG_ARCH_KERNEL_STACKSIZE=3072
CONFIG_ARCH_PGPOOL_MAPPING=y
CONFIG_ARCH_PGPOOL_PBASE=0xA8400000
CONFIG_ARCH_PGPOOL_SIZE=266338304
CONFIG_ARCH_PGPOOL_VBASE=0xA8400000
CONFIG_ARCH_RISCV=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_TEXT_NPAGES=128
CONFIG_ARCH_TEXT_VBASE=0xC0000000
CONFIG_ARCH_USE_MMU=y
CONFIG_ARCH_USE_MPU=y
CONFIG_ARCH_USE_S_MODE=y
CONFIG_BINFMT_ELF_EXECUTABLE=y
CONFIG_BOARDCTL_ROMDISK=y
CONFIG_BOARD_LOOPSPERMSEC=1120
CONFIG_BUILD_KERNEL=y
CONFIG_DEBUG_ASSERTIONS=y
CONFIG_DEBUG_ASSERTIONS_EXPRESSION=y
CONFIG_DEBUG_FEATURES=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS_ERROR=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_MM=y
CONFIG_DEBUG_MM_ERROR=y
CONFIG_DEBUG_SCHED=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEFAULT_TASK_STACKSIZE=8192
CONFIG_ELF=y
CONFIG_ELF_STACKSIZE=2048
CONFIG_EXAMPLES_HELLO=m
CONFIG_FS_PROCFS=y
CONFIG_FS_ROMFS=y
CONFIG_IDLETHREAD_STACKSIZE=3072
CONFIG_INIT_FILEPATH="/system/bin/init"
CONFIG_INIT_MOUNT=y
CONFIG_INIT_MOUNT_FLAGS=0x1
CONFIG_INIT_MOUNT_TARGET="/system/bin"
CONFIG_INTELHEX_BINARY=y
CONFIG_IRQ_WORK_STACKSIZE=2048
CONFIG_LIBC_ENVPATH=y
CONFIG_LIBC_EXECFUNCS=y
CONFIG_LIBC_MEMSET_64BIT=y
CONFIG_LIBC_MEMSET_OPTSPEED=y
CONFIG_LIBC_PERROR_STDOUT=y
CONFIG_LIBC_STRERROR=y
CONFIG_MM_PGALLOC=y
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_FILE_APPS=y
CONFIG_NSH_READLINE=y
CONFIG_PATH_INITIAL="/system/bin"
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_RAMLOG=y
CONFIG_RAMLOG_BUFSIZE=32768
CONFIG_RAMLOG_SYSLOG=y
CONFIG_RAM_SIZE=1006632960
CONFIG_RAM_START=0x80200000
CONFIG_RAW_BINARY=y
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_BACKTRACE=y
CONFIG_SCHED_CPULOAD_SYSCLK=y
CONFIG_SCHED_HAVE_PARENT=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SERIAL_UART_ARCH_MMIO=y
CONFIG_SMP=y
CONFIG_STACKCHECK_MARGIN=128
CONFIG_STACK_COLORATION=y
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2021
CONFIG_SYMTAB_ORDEREDBYNAME=y
CONFIG_SYSLOG_DEFAULT=y
CONFIG_SYSLOG_MAX_CHANNELS=2
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_NSH_PROGNAME="init"
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
CONFIG_TESTING_SMP=y
CONFIG_USEC_PER_TICK=1000

View file

@ -0,0 +1,70 @@
/****************************************************************************
* boards/risc-v/eic7700x/eic7700-evb/include/board.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __BOARDS_RISCV_EIC7700X_EIC7700_EVB_INCLUDE_BOARD_H
#define __BOARDS_RISCV_EIC7700X_EIC7700_EVB_INCLUDE_BOARD_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
/****************************************************************************
* Public Data
****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: eic7700x_boardinitialize
****************************************************************************/
void eic7700x_boardinitialize(void);
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_RISCV_EIC7700X_EIC7700_EVB_INCLUDE_BOARD_H */

View file

@ -0,0 +1,85 @@
/****************************************************************************
* boards/risc-v/eic7700x/eic7700-evb/include/board_memorymap.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __BOARDS_RISCV_EIC7700X_EIC7700_EVB_INCLUDE_BOARD_MEMORYMAP_H
#define __BOARDS_RISCV_EIC7700X_EIC7700_EVB_INCLUDE_BOARD_MEMORYMAP_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Kernel code memory (RX) */
#define KFLASH_START (uintptr_t)__kflash_start
#define KFLASH_SIZE (uintptr_t)__kflash_size
#define KSRAM_START (uintptr_t)__ksram_start
#define KSRAM_SIZE (uintptr_t)__ksram_size
#define KSRAM_END (uintptr_t)__ksram_end
/* Kernel RAM (RW) */
#define PGPOOL_START (uintptr_t)__pgheap_start
#define PGPOOL_SIZE (uintptr_t)__pgheap_size
/* Page pool (RWX) */
#define PGPOOL_START (uintptr_t)__pgheap_start
#define PGPOOL_SIZE (uintptr_t)__pgheap_size
#define PGPOOL_END (PGPOOL_START + PGPOOL_SIZE)
/* Ramdisk (RW) */
#define RAMDISK_START (uintptr_t)__ramdisk_start
#define RAMDISK_SIZE (uintptr_t)__ramdisk_size
/****************************************************************************
* Public Data
****************************************************************************/
/* Kernel code memory (RX) */
extern uint8_t __kflash_start[];
extern uint8_t __kflash_size[];
/* Kernel RAM (RW) */
extern uint8_t __ksram_start[];
extern uint8_t __ksram_size[];
extern uint8_t __ksram_end[];
/* Page pool (RWX) */
extern uint8_t __pgheap_start[];
extern uint8_t __pgheap_size[];
/* Ramdisk (RW) */
extern uint8_t __ramdisk_start[];
extern uint8_t __ramdisk_size[];
#endif /* __BOARDS_RISCV_EIC7700X_EIC7700_EVB_INCLUDE_BOARD_MEMORYMAP_H */

View file

@ -0,0 +1,2 @@
etctmp
etctmp.c

View file

@ -0,0 +1,27 @@
############################################################################
# boards/risc-v/eic7700x/eic7700-evb/src/Make.defs
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
CSRCS = eic7700x_bringup.c
DEPPATH += --dep-path board
VPATH += :board
CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board

View file

@ -0,0 +1,47 @@
/****************************************************************************
* boards/risc-v/eic7700x/eic7700-evb/src/board_config.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __BOARDS_RISCV_EIC7700X_EIC7700_EVB_SRC_BOARD_CONFIG_H
#define __BOARDS_RISCV_EIC7700X_EIC7700_EVB_SRC_BOARD_CONFIG_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: eic7700x_bringup
*
* Description:
* Bring up this board's devices, in this board's order. Called from the
* common layer's board_late_initialize().
*
****************************************************************************/
int eic7700x_bringup(void);
#endif /* __BOARDS_RISCV_EIC7700X_EIC7700_EVB_SRC_BOARD_CONFIG_H */

View file

@ -0,0 +1,50 @@
/****************************************************************************
* boards/risc-v/eic7700x/eic7700-evb/src/eic7700x_bringup.c
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include "board_config.h"
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: eic7700x_bringup
*
* Description:
* Bring up this board's devices, in this board's order. Device drivers
* register here as the port grows; the common layer owns everything that
* is true of the SoC rather than of this board.
*
****************************************************************************/
int eic7700x_bringup(void)
{
return OK;
}