Zephyr 在 Andes ADP-XC7K AE350 FPGA 开发板上的移植与烧录调试全指南
2026/9/15 13:36:31 网站建设 项目流程

Zephyr 在 Andes ADP-XC7K AE350 FPGA 开发板上的移植与烧录调试全指南

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

导读

ADP-XC7K AE350 是 Andes(晶心科技)面向 AndesCore 处理器与 AndeShape SoC 平台 IP 验证推出的 FPGA 开发与原型验证板卡,运行 Zephyr 的 AE350 平台以 60MHz 的 32/64 位 RISC-V 内核为计算核心。本文以 boards/andestech/adp_xc7k_ae350/doc/index.rst 为骨架,结合仓库中的设备树、Kconfig 与 defconfig 源码,完整讲解该板卡的硬件资源、引脚映射、系统时钟与串口配置,并给出从构建、AICE 连接、ICEman 启动到 RAM 加载与 XIP 烧写的全流程命令,帮助你在 ADP-XC7K 系列板上快速跑通 Zephyr 应用。

平台与板卡概览

ADP-XC7K AE350 板卡是 AndeShape AE350 平台在 ADP-XC7K 系列 FPGA 开发板上的落地形态。AE350 是一个 RISC-V 平台,可集成 AndesCore CPU 以及一组基础外设 IP。ADP-XC7K 系列本身就是用于评估多种 AndesCore 处理器与 AndeShape SoC 平台 IP 的 FPGA 开发与原型验证板。

仓库中该板卡的核心文件包括:

  • 设备树源文件:adp_xc7k_ae350.dts(默认 PLIC 中断版本)与 adp_xc7k_ae350_clic.dts(CLIC 中断版本),二者共用 adp_xc7k_ae350_common.dtsi;
  • 板级标识文件:adp_xc7k_ae350.yaml;
  • 默认配置:adp_xc7k_ae350_defconfig 与 adp_xc7k_ae350_clic_defconfig;
  • 板级 Kconfig:Kconfig.adp_xc7k 与 Kconfig.defconfig;
  • 板级清单:board.yml。

其中board.yml明确了板卡标识adp_xc7k、SoC 为ae350,并存在一个clic变体;对应到构建时的板名即为adp_xc7k/ae350adp_xc7k/ae350/clic。两块物理板卡分别是绿色 PCB 的 ADP-XC7K160 与红色 PCB 的 ADP-XC7K410,其板载照片见 adp_xc7k160.jpg 与 adp_xc7k410.jpg。

硬件资源一览

ADP-XC7K AE350 平台集成了 1~4 个 32/64 位 60MHz RISC-V CPU(AndeStar v5 架构)、DSP、1GB RAM、Cache、SPI Flash、以太网控制器等外设,主要硬件组件如下:

组件规格
CPU1~4 核 32/64 位 60MHz AndeStar v5 RISC-V
内存1GB 板载 SDRAM
存储2MB SPI Flash(其中 1MB 可用于 XIP)
通信接口UART、I2C、SPI、GPIO、PWM、DMA、10/100 Ethernet RJ45
显示与外设LCD 模块连接器、MIC-in / Line-in / Line-out(AC97 音频编解码器)
其他16KB I2C EEPROM、SD 存储卡插槽

从设备树 adp_xc7k_ae350_common.dtsi 可以看到,板载 SPI Flash(mx25u16,MACRONIX 型号,jedec-id = [c2 25 35],16MB 容量,10MHz 最大时钟)挂接在spi0上,同时定义了 1MB 的storage分区用于存储;板载 EEPROM 为 Atmel AT24(16KB,64 字节页,挂接在i2c0地址0x50);spi1gpio0的 7 号引脚作为片选信号。

板级 yaml(adp_xc7k_ae350.yaml)声明支持的驱动子系统包括:gpiocounteri2cspieepromwatchdogmboxflashdmaledsysconhwinfotesting.ignore_tags中排除了bluetooth(该平台无蓝牙硬件)。

中断控制器:PLIC 与 CLIC 两个变体

从 soc/andestech/ae350/Kconfig 可知,AE350 SoC 系列通过SOC_AE350_INTERRUPT_TYPE选择基础中断类型:

  • SOC_AE350_INTERRUPT_TYPE_PLIC(默认):选择RISCV_HAS_PLIC
  • SOC_AE350_INTERRUPT_TYPE_CLIC:选择RISCV_HAS_CLIC,并在向量模式下选择CLIC_SMCLICSHV_EXT,同时启用CLIC_SMCLICCONFIG_EXTLEGACY_CLIC_MEMORYMAP_ACCESS

板级 Kconfig.defconfig 在BOARD_ADP_XC7K_AE350_CLIC时默认选择 CLIC 中断类型。因此同一块硬件存在两套设备树与构建目标:PLIC 版本使用andes_v5_ae350.dtsi,CLIC 版本使用andes_v5_ae350_clic.dtsi

此外,AE350 SoC 系列还提供SOC_ANDES_V5_IOCP(I/O Coherence Port,依赖 DCACHE)选项,用于处理 Cache 与 DMA 等外部非缓存主机之间的缓存一致性,详见 soc/andestech/ae350/Kconfig。

支持的 Zephyr 功能

板卡的默认配置(adp_xc7k_ae350_defconfig)如下:

CONFIG_XIP=n CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_GPIO=y CONFIG_PMP_GRANULARITY=8

几点说明:

  • CONFIG_XIP=n:默认从 RAM 执行,后续烧录章节将分别演示 RAM 加载(CONFIG_XIP=n)与 Flash 烧写(CONFIG_XIP=y)两种运行方式;
  • CONFIG_PMP_GRANULARITY=8:RISC-V 物理内存保护(PMP)粒度配置为 8 字节,这与 AE350 SoC 选择RISCV_PMP的 soc/andestech/ae350/Kconfig 配置相呼应;
  • SoC 级默认参数(soc/andestech/ae350/Kconfig.defconfig.ae350):SYS_CLOCK_TICKS_PER_SEC默认为 100(在无 ICACHE 或 XIP 场景下)、MAIN_STACK_SIZE为 2048、IDLE_STACK_SIZE为 1536、64 位模式下PRIVILEGED_STACK_SIZETEST_EXTRA_STACK_SIZE为 2048,MP_MAX_NUM_CPUS默认 1(支持范围 1~8)。

GPIO 与引脚映射

ADP-XC7K AE350 平台有 1 个 GPIO 控制器,提供 32 位 IO,负责引脚输入/输出、上拉等功能。设备树中通过aliasesgpio-0led0led1sw0等别名指向具体节点,并把 7 段数码管段选注册为gpio-leds、把 7 个按键注册为gpio-keys(均使用GPIO_ACTIVE_LOW有效电平)。

GPIO 控制器到板级引脚的完整映射如下:

按键(Push Buttons)

GPIO板级引脚
GPIO.0SW1
GPIO.1SW2
GPIO.2SW3
GPIO.3SW4
GPIO.4SW5
GPIO.5SW6
GPIO.6SW7

7 段数码管 LED1(7-Segment LED1)

GPIO板级引脚
GPIO.167SEG1.A
GPIO.177SEG1.B
GPIO.187SEG1.C
GPIO.197SEG1.D
GPIO.207SEG1.E
GPIO.217SEG1.F
GPIO.227SEG1.G
GPIO.237SEG1.DP

7 段数码管 LED2(7-Segment LED2)

GPIO板级引脚
GPIO.247SEG2.A
GPIO.257SEG2.B
GPIO.267SEG2.C
GPIO.277SEG2.D
GPIO.287SEG2.E
GPIO.297SEG2.F
GPIO.307SEG2.G
GPIO.317SEG2.DP

通用 GPIO 引脚(IDE_CON1 扩展连接器)

GPIO板级引脚
GPIO.7IDE_CON1.4
GPIO.8IDE_CON1.6
GPIO.9IDE_CON1.8
GPIO.10IDE_CON1.10
GPIO.11IDE_CON1.11
GPIO.12IDE_CON1.12
GPIO.13IDE_CON1.13
GPIO.14IDE_CON1.14
GPIO.15IDE_CON1.15

注意:GPIO.7 同时被设备树用作spi1的片选信号(cs-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>),实际使用通用 GPIO 时需要避免与该功能冲突。

其他外设映射

外设板级引脚
SPI_1内部连接到 SPI Flash
SPI_2_CSIDE_CON1.37
SPI_2_MOSIIDE_CON1.36
SPI_2_MISOIDE_CON1.38
SPI_2_SCLKIDE_CON1.35
I2C_SDAJ27.1
I2C_SCLJ27.2

系统时钟与串口

  • 系统时钟:60MHz 内核时钟。
  • 串口:平台提供 2 个 UART。Zephyr 控制台默认分配到 UART2,默认设置为115200 8N1

在设备树 adp_xc7k_ae350_common.dtsi 中,chosen节点将zephyr,consolezephyr,shell-uart都指向uart1(对应文档所述的 UART2 控制台),并配置clock-frequency = <20000000>current-speed = <115200>;同时zephyr,sram指向dramzephyr,flashzephyr,flash-controller指向mx25u16

构建 Zephyr 应用

使用标准的 Zephyr 构建方式即可。以 hello_world 示例为例:

west build -b adp_xc7k/ae350 samples/hello_world

若使用 CLIC 中断变体,则指定:

west build -b adp_xc7k/ae350/clic samples/hello_world

构建产物位于build/zephyr/下,其中zephyr.elf用于 RAM 加载/调试,zephyr.bin用于 Flash 烧写。

编程与调试环境准备

要将 Zephyr 应用烧写进 Flash 或进行调试,需要:

  1. 用 Andes ICE(AICE)将主机与 ADP-XC7K 板卡相连;
  2. 在主机上运行 Andes ICE 管理软件ICEman

AICE 与板卡、主机的连接方式参考下图(连接 AICE 至 ADP-XC7K 板卡与主机):

烧录前还需从 Andes Development Kit 下载 ICEman(ice.zip);如果要用 XIP 模式(CONFIG_XIP=y),还需要下载 Flash burner(flash.zip)。

启动 ICEman 服务

调试与烧录程序前,先启动 ICEman:

# 为 ICEman 添加可执行权限 chmod a+x ./ICEman # 运行 ICEman 服务端 sudo ./ICEman -Z v5

提示:若希望以普通用户身份运行 ICEman 命令,需要安装70-ndsusb-v1.rulesudev 规则文件(通常放入/etc/udev/rules.d,然后重新插拔 AICE USB 适配器使其生效)。

烧录程序

方式一:RAM 加载(CONFIG_XIP=n)

CONFIG_XIP=n时,可将zephyr.elf直接加载到 RAM 并执行:

# 确认 ICEman 服务端已运行 # 将程序加载到 RAM 并执行 riscv64-zephyr-elf-gdb build/zephyr/zephyr.elf (gdb) target remote :1111 (gdb) monitor reset halt (gdb) load (gdb) quit

方式二:Flash 烧写(CONFIG_XIP=y)

CONFIG_XIP=y时,需要将zephyr.bin烧入 Flash 并执行:

# 确认 ICEman 服务端已运行 # 将程序烧入 Flash 并执行 <FLASH>/bin/target_burn_frontend \ -P 4444 --unlock --verify --image=build/zephyr/zephyr.bin \ --algorithm-bin=<FLASH>/target_bin/target_SPI_v5_[32|64].bin

注意:

  1. 假定 Flash burner 已下载到<FLASH>目录;
  2. algorithm-bin文件的选择:RV32 平台使用target_SPI_v5_32.bin,RV64 平台使用target_SPI_v5_64.bin

串口输出验证

打开串口终端,设置如下参数:

  • 速率:115200
  • 数据位:8
  • 校验位:None
  • 停止位:1

烧录或加载成功后,终端应看到类似输出(示例为 hello_world 应用):

***** Booting Zephyr OS v2.4.0 ***** Hello World! adp_xc7k

使用 GDB 调试

调试步骤如下(同样依赖 ICEman 服务端处于运行状态):

# 确认 ICEman 服务端已运行 # 加载并调试程序 ./riscv64-zephyr-elf-gdb build/zephyr/zephyr.elf (gdb) target remote :1111 (gdb) monitor reset halt (gdb) load

CONFIG_XIP=y,请先按“烧录程序”一节的 Flash 烧写流程把程序写入 Flash,然后使用上述 GDB 命令调试,但不要执行load命令——因为程序已经存放在 Flash 中。

总结

ADP-XC7K AE350 为 AndesCore RISC-V 处理器与 AndeShape SoC 平台 IP 的验证提供了完整的 FPGA 硬件环境,Zephyr 仓库为其提供了 PLIC/CLIC 两套设备树变体以及完善的外设驱动支持。通过本文所述的构建、ICEman 服务、RAM 加载与 XIP 烧写、GDB 调试流程,你可以在这块 60MHz 的 32/64 位 RISC-V 平台上快速完成 Zephyr 应用的开发、烧录与调试闭环。

进一步可参考仓库中的 Andes AE350 SoC 配置 与 板级设备树,了解更底层的中断、Cache、PMP 与外设细节。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询