Zephyr RTOS 中的 ASPEED AST1030-EVB 板卡支持:硬件资源、构建配置与调试实战
【免费下载链接】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
ASPEED(信骅科技)的 AST10x0 系列 SoC 主要面向服务器 BMC(基板管理控制器)场景,而 Zephyr 在 boards/aspeed/index.rst 下为其提供了完整的板卡支持目录,其中唯一官方评估板为AST1030-EVB。本文以该板卡的官方文档 ast1030_evb/doc/index.rst 为核心,结合仓库中的设备树、默认配置与 SoC 底层实现,完整讲解如何基于ast1030_evb目标构建、烧写并调试 Zephyr 应用,读完你将掌握该板卡的硬件资源布局、系统时钟与串口配置,以及 JTAG 调试和 SPI Flash 烧写的完整流程。
板卡概述:AST1030-EVB 是什么
AST1030-EVB 是用于评估 AspeedAST10x0 系列 SoC的开发平台,需要配合零件号 AST1030 使用。在仓库中它的板级定义位于 boards/aspeed/ast1030_evb/ast1030_evb.yaml,关键声明如下:
identifier: ast1030_evb name: Aspeed AST1030-EVB type: mcu arch: arm toolchain: - zephyr ram: 768 flash: 1024 supported: - serial vendor: aspeed从这份板卡元数据可以确认:它是一块ARM 架构的 MCU 类板卡,片上 RAM 为 768 KB、片上 Flash 为 1024 KB(1 MB),由 Zephyr 官方工具链支持,板级标识符(BOARD名)为ast1030_evb。板级 Kconfig 入口 Kconfig.ast1030_evb 将其关联到SOC_AST1030:
config BOARD_AST1030_EVB select SOC_AST1030而 SoC 家族关系在 soc/aspeed/soc.yml 中定义为aspeed家族 →ast10x0系列 →ast1030SoC。
硬件资源一览
AST1030 SoC 集成了一颗ARM Cortex-M4F 处理器,并围绕 BMC 控制场景提供了丰富的内外设接口。官方文档列出的核心硬件特性包括:
- ARM Cortex-M4F 处理器(带浮点单元)
- 768 KB 片上 SRAM,用于指令与数据存储
- 1 MB 片上 Flash,用于 Boot ROM 与数据存储
- SPI 接口
- UART 接口
- I2C / I3C 接口
- FAN PWM 接口(风扇调速)
- ADC 接口
- JTAG 接口
- USB 接口
- LPC 接口
- eSPI 接口
这些接口在 SoC 设备树 dts/arm/aspeed/ast10x0.dtsi 中也有对应体现:CPU 节点声明为compatible = "arm,cortex-m4f",sram0位于memory@0,SoC 外设挂载在syscon@7e6e2000(含aspeed,ast10x0-clock时钟控制器与aspeed,ast10x0-reset复位控制器)之下,UART5 则位于serial@7e784000。eSPI、LPC、PWM、ADC 等 BMC 关键外设接口正是 AST10x0 系列区别于普通 MCU 的差异化能力。
说明:关于板卡的具体引脚连接,官方文档指出原理图由 Aspeed 提供,仓库中未附带,连接定义请以板卡原理图为准。
支持的 Zephyr 功能与默认配置
从板级默认配置文件 ast1030_evb_defconfig 可以完整还原该板在 Zephyr 中默认启用的功能集合:
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=200000000 CONFIG_MAIN_STACK_SIZE=4096 CONFIG_FLASH_SIZE=0 CONFIG_FLASH_BASE_ADDRESS=0x0 CONFIG_XIP=n CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_HEAP_MEM_POOL_SIZE=50000 CONFIG_CLOCK_CONTROL=y CONFIG_RESET=y逐项解读这些配置的实际作用:
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=200000000:声明系统硬件时钟频率为 200 MHz,与官方文档中"外部 25 MHz 晶振经片内 PLL 倍频生成 200 MHz 系统时钟"的描述完全一致;CONFIG_MAIN_STACK_SIZE=4096:主线程栈大小 4 KB;CONFIG_FLASH_SIZE=0/CONFIG_FLASH_BASE_ADDRESS=0x0/CONFIG_XIP=n:该板默认不启用 XIP(片上执行),程序从 SRAM 运行,Flash 配置置零;CONFIG_CONSOLE=y/CONFIG_UART_CONSOLE=y/CONFIG_SERIAL=y:启用串口控制台与串口驱动,对应 UART5 作为日志输出;CONFIG_HEAP_MEM_POOL_SIZE=50000:内核堆内存池 50 KB;CONFIG_CLOCK_CONTROL=y/CONFIG_RESET=y:启用时钟控制与复位控制器驱动。
配合 SoC 系列 Kconfig soc/aspeed/ast10x0/Kconfig,AST10x0 系列还会自动选择CPU_CORTEX_M4、CPU_HAS_FPU、CPU_HAS_ARM_MPU、CACHE/CACHE_ASPEED(含指令与数据缓存)以及SYSCON等能力,这些均为 Zephyr 针对该 SoC 的默认能力开关。
系统时钟:25 MHz 晶振 → 200 MHz 系统时钟
AST1030 SoC 使用外部25 MHz 时钟输入,通过片内 PLL 生成200 MHz 系统时钟。这一数值在多个层面得到印证:
- 板级 defconfig 中
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=200000000; - 设备树 ast1030_evb.dts 中 UART5 节点显式覆盖
clock-frequency = <1846153>; - SoC 设备树 dts/arm/aspeed/ast10x0.dtsi 中 UART5 挂接
clocks = <&sysclk ASPEED_CLK_UART5>,时钟源由aspeed,ast10x0-clock驱动提供。
板级设备树 ast1030_evb.dts 完整内容如下:
/dts-v1/; #include <aspeed/ast10x0.dtsi> / { model = "Aspeed AST1030 Evaluation board"; compatible = "aspeed,ast1030-evb"; chosen { zephyr,console = &uart5; zephyr,shell-uart = &uart5; zephyr,sram = &sram0; }; }; &sram0 { reg = <0 DT_SIZE_K(448)>, <0x70000 DT_SIZE_K(320)>; }; &uart5 { clock-frequency = <1846153>; current-speed = <115200>; status = "okay"; };值得注意的一个实现细节:sram0的reg定义了两段地址——第一段0x0起始的 448 KB 作为缓存型 SRAM,第二段0x70000起始的 320 KB 作为非缓存 SRAM。非缓存区域的尺寸与基址会被 SoC 层自动提取为SRAM_NC_SIZE与SRAM_NC_BASE_ADDRESS(见 soc/aspeed/ast10x0/Kconfig.defconfig.ast1030),并在soc_reset_hook()中清零对应的.bss_nc段,其用途是提供给 DMA 等需要一致性内存的外设使用。
串口:UART5 作为默认日志与控制台
官方文档明确:UART5 被配置为串口日志输出,默认串口参数为 115200 8N1(115200 波特率、8 数据位、无校验、1 停止位)。
在板级设备树中可以看到完整的接线:
chosen节点的zephyr,console与zephyr,shell-uart均指向uart5,即内核控制台与 Shell 复用同一串口;- UART5 节点启用
status = "okay",并设置current-speed = <115200>; - UART5 的 SoC 层驱动为通用 NS16550 兼容串口(
compatible = "ns16550",见 dts/arm/aspeed/ast10x0.dtsi),reg-shift = <2>表示寄存器按 32 位宽度寻址; clock-frequency = <1846153>覆盖了 UART 参考时钟频率,用于波特率计算。
因此,将开发板 UART5 连接到宿主机串口(如 USB 转 TTL 适配器),以115200-8-N-1打开终端,即可看到 Zephyr 的启动日志并进入 Shell。
构建、烧写与调试
构建应用
与所有 Zephyr 板卡一致,构建时通过-b指定板卡名ast1030_evb即可:
west build -b ast1030_evb samples/hello_world构建产物默认输出到build/目录。由于板级配置默认CONFIG_XIP=n,应用映像面向 SRAM 运行布局链接(相关链接脚本位于 soc/aspeed/ast10x0 目录,包括linker.ld、nocache.ld、sboot.ld)。
烧写(Flashing)
构建完成后,官方推荐使用SF100 SPI Flash 编程器将映像烧写到板载 SPI Flash,具体烧写步骤请参考 Aspeed 提供的 Zephyr SDK 用户指南(Aspeed Zephyr SDK User Guide,随 Aspeed 官方 Zephyr SDK 发布提供)。
需要特别说明的一点:AST1030 的启动流程依赖Boot ROM 读取安全启动(Secure Boot)头来获取映像大小。SoC 初始化代码 soc/aspeed/ast10x0/soc.c 中定义了sb_header结构体(含key_location、enc_img_addr、img_size、sign_location、patch_location、checksum等字段),并将其实例放置在.sboot段,通过img_size = (uint32_t)&__bss_start在链接期写入映像大小。配合 tools/gen_uart_booting_image.py 等工具,可以理解 AST1030 从 Boot ROM 引导 Zephyr 映像的完整链路。
调试(Debugging)
官方文档给出的调试方式为:通过 JTAG(或 SWD)接口连接 J-Link 调试器,使用单条物理连接即可完成调试。板卡出厂自带 JTAG 端口,这是板上最直接的调试入口。
从源码层面看,soc_reset_hook()(soc/aspeed/ast10x0/soc.c)在复位后还会显式操作 SCU 的JTAG_PINMUX_REG寄存器来使能 JTAG 引脚复用(jtag_pinmux |= (0x1f << 25)),确保复位后 JTAG 调试通路可用。同一函数还会启用指令缓存并清除非缓存 BSS 段,是理解该板启动调试行为的底层依据。
此外,soc.c中的aspeed_print_sysrst_info()会在启动时解析复位日志寄存器,打印"RST: Power On"或具体的 WDT 复位来源(SOC/FULL/ARM/SW),这对排查板卡异常复位非常有价值。
小结
AST1030-EVB 是 Zephyr 支持 ASPEED AST10x0 系列 SoC 的官方评估平台,其核心技术要点可总结为:
| 维度 | 关键事实 |
|---|---|
| 处理器 | ARM Cortex-M4F |
| 存储 | 768 KB SRAM(448 KB 缓存型 + 320 KB 非缓存型)、1 MB 片上 Flash |
| 系统时钟 | 外部 25 MHz 晶振 → PLL 倍频至 200 MHz |
| 串口 | UART5,115200 8N1,兼作控制台与 Shell |
| 运行模式 | 默认非 XIP,从 SRAM 运行 |
| 烧写 | SF100 SPI Flash 编程器 + Secure Boot 头 |
| 调试 | JTAG/SWD + J-Link |
基于本文内容,你可以直接在仓库中继续深入:板级设备树 ast1030_evb.dts、默认配置 ast1030_evb_defconfig、SoC 初始化 soc.c 以及 SoC 设备树 ast10x0.dtsi,即可完整掌握 AST1030 在 Zephyr 中的移植与使用细节。
【免费下载链接】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),仅供参考