Zephyr 中 Serpente 开发板移植与实战:基于 ATSAMD21E18A 的极简原型板使用指南
2026/9/20 14:14:46 网站建设 项目流程

Zephyr 中 Serpente 开发板移植与实战:基于 ATSAMD21E18A 的极简原型板使用指南

【免费下载链接】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

Serpente 是 Arturo182 推出的一款极小型、低成本开发与原型验证板,搭载 ATSAMD21E18A(ARM Cortex-M0+)处理器,配备 4MiB 额外 SPI Flash、PWM 可调 RGB LED 和 6 个 I/O 引脚,并以原生 USB 接口作为主要通信与烧录通道。本文以 Zephyr 仓库中该板卡的官方文档为骨架,结合 board 源码 的 devicetree、Kconfig 与构建脚本,完整讲解 Serpente 的硬件规格、时钟树、USB 设备模式、BOSSA/UF2 烧录流程及 Zephyr 支持的功能清单,帮助读者在 Zephyr 上快速完成 blinky 等样例的构建与烧录,并理解板卡级移植背后的实现细节。

Arturo182 Serpente 开发板:极小型 ATSAMD21 原型板,带 USB 接口与 RGB LED

板卡概述与硬件规格

Serpente 是一块面向嵌入式原型开发的小尺寸开发板,其核心定位是"小而全":板载主控、存储、LED 与 USB 一应俱全,无需外接调试器即可通过 USB 直接烧录与通信。

根据 boards/others/serpente/doc/index.rst 的官方说明,板卡核心特性包括:

  • 4MiB 板载 Flash 存储:除主控内部 Flash 外,额外提供 4MiB SPI Flash,可用于数据存储或文件系统;
  • PWM 可调 RGB LED:红、绿、蓝三色 LED 均支持 PWM 控制,可实现任意颜色与亮度调节;
  • 6 个 I/O 引脚:面向小型化原型设计,引脚数量精简但覆盖常用外设;
  • 三种 USB 连接器选项:同一块板提供 USB Type-C 公头(plug)、USB Type-C 母座(socket)与 USB Type-A 公头(plug)三种变体,可直插电脑或 USB 供电设备。

硬件配置一览

项目规格
处理器ATSAMD21E18A,ARM Cortex-M0+,主频 48 MHz
内部 Flash256 KiB
RAM32 KiB
外部存储额外 4MiB SPI Flash
用户 LEDRGB 三色 PWM LED
按键Reset 复位键
USB原生 USB 设备端口

上述硬件参数在 serpente.yaml 中也有对应声明:flash: 256ram: 32,架构为arch: arm,工具链支持zephyrgnuarmemb

支持的板级功能

Zephyr 通过 serpente.yaml 中的supported字段声明该板卡在当前版本中可用的驱动/子系统,覆盖了 SAMD21 上常用的大部分外设:

  • adc:模数转换
  • counter:计数器
  • gpio:通用输入输出
  • hwinfo:硬件信息读取
  • i2c:I2C 总线
  • pwm:PWM(驱动 RGB LED 的核心)
  • spi:SPI 总线(用于外部 4MiB Flash 等)
  • uart:串口(默认控制台)
  • usb_device:USB 设备
  • watchdog:看门狗

这些能力在 devicetree 中均有对应的节点启用(详见下文),意味着上述外设驱动已随板卡移植被 Zephyr 原生支持,可直接用于应用开发。

引脚连接与 I/O 布局

Serpente 的完整引脚定义与原理图可参考板卡厂商的官方文档(详见原文档 References 中的Serpente documentationpinoutsschematic链接)。在 Zephyr 侧,引脚复用关系由 serpente-pinctrl.dtsi 明确定义,这里给出关键复用组:

功能引脚(PINMUX)对应外设
PWM 输出(红/绿/蓝)PA22F_TCC0_WO4 / PA19F_TCC0_WO3 / PA23F_TCC0_WO5TCC0
I2CPA4D_SERCOM0_PAD0 / PA5D_SERCOM0_PAD1SERCOM0
SPI(外部 Flash 等)PA18D_SERCOM3_PAD2 / PA16D_SERCOM3_PAD0 / PA17D_SERCOM3_PAD1SERCOM3
UART 控制台PA9D_SERCOM2_PAD1 / PA8D_SERCOM2_PAD0SERCOM2
USB D+/D-PA25G_USB_DP / PA24G_USB_DMUSB

从 serpente.dts 可以看到,默认控制台与 shell 串口被绑定到sercom2zephyr,console = &sercom2; zephyr,shell-uart = &sercom2;),串口波特率为 115200。同时sercom0sercom2(UART)、sercom3(SPI)、tcc0(PWM)与usb0(USB 设备)均在 devicetree 中被置为status = "okay"

RGB LED 的 GPIO 与 PWM 双重驱动

Serpente 的 RGB LED 在 serpente.dts 中被定义了两套节点:

  • gpio-leds节点:红、绿、蓝分别位于 PA22、PA19、PA23,且均为GPIO_ACTIVE_LOW(低电平点亮),并通过aliases暴露为led0/led1/led2red-led/green-led/blue-led
  • pwm-leds节点:三色 LED 分别由tcc0的通道 0、3、1 驱动,周期为PWM_MSEC(20)(20ms,即 50Hz 刷新率),通过aliases暴露为pwm-led0/1/2red-pwm-led/green-pwm-led/blue-pwm-led

因此应用层既可以使用 GPIO 接口做简单开关/闪烁,也可以使用 PWM 接口实现颜色渐变,这正是原文档所称 "PWM enabled RGB led" 的源码级体现。

系统时钟配置

SAMD21 默认的时钟方案为:使用8 MHz 内部振荡器(OSC8M)作为主时钟源,再经由片内 PLL 倍频生成48 MHz 系统时钟

这一配置在 serpente_defconfig 中直接可见:

CONFIG_SOC_ATMEL_SAMD_OSC8M=y CONFIG_SOC_ATMEL_SAMD_OSC8M_AS_MAIN=y

同时在 serpente.dts 中显式声明了 CPU 工作频率:

&cpu0 { clock-frequency = <48000000>; };

从源码结构看,SOC_ATMEL_SAMD_OSC8M_AS_MAIN将 8MHz 内部振荡器设定为主时钟源,再通过 SAMD21 的 DPLL 倍频到 48MHz,以满足 USB 与 UART 等工作所需的稳定时钟。

USB 设备端口

SAMD21 自带原生 USB 设备控制器,Serpente 通过 USB 口即可与主机 PC 通信,无需额外硬件。Zephyr 侧 USB 外设节点在 serpente.dts 中启用:

zephyr_udc0: &usb0 { status = "okay"; pinctrl-0 = <&usb_dc_default>; pinctrl-names = "default"; };

其中usb_dc_default引脚组将 PA25/PA24 复用为 USB D+/D-。开发者可以参考 Zephyr 的usb样例类别,例如usb-cdc-acm样例——它会在主机 PC 上枚举出一个虚拟串口,并向主机打印 "Hello World!",是验证 Serpente USB 通路是否正常的最快途径。

编程与调试:BOSSA 兼容的 UF2 Bootloader

Serpente 出厂预装BOSSA 兼容的 UF2 bootloader。BOSSA(Basic Open Source SAM-BA)是 Atmel/Microchip SAM 系列 MCU 常用的烧录工具链,UF2 则是 Adafruit 推动的"拖拽式"固件格式;Serpente 将两者结合,使烧录体验非常友好:

  • 将板卡插入电脑后,它会枚举为一个可移动磁盘(UF2 模式);
  • 双击 Reset 按键(快速连按两次)即可随时进入 bootloader 模式;
  • 把编译好的.uf2固件直接复制到磁盘即可完成烧录。

Zephyr 侧对 bootloader 的支持体现在 serpente_defconfig:

CONFIG_BOOTLOADER_BOSSA=y CONFIG_BOOTLOADER_BOSSA_ADAFRUIT_UF2=y

以及 serpente.dts 中的 Flash 分区布局:

boot_partition: partition@0 { label = "uf2"; reg = <0x00000000 DT_SIZE_K(8)>; read-only; }; code_partition: partition@2000 { label = "code"; reg = <0x2000 DT_SIZE_K(256-8)>; read-only; };

即:Flash 起始的 8KiB 被保留给 UF2 bootloader(只读),其余约 248KiB 用作应用代码分区(zephyr,code-partition)。这样的分区设计保证应用固件不会覆盖 bootloader,从而始终保持双击复位即可重新烧录的能力。

支持的烧录工具链

board.cmake 引入了 Zephyr 通用烧录脚本:

include(${ZEPHYR_BASE}/boards/common/bossac.board.cmake)

即 Serpente 默认使用bossac(BOSSA 命令行工具)作为 runner,west flash会自动调用 bossac 完成固件写入。

烧录示例:从构建 blinky 到 LED 闪烁

以下步骤完全遵循官方文档的烧录流程,可在 Zephyr 环境下直接复现。

第一步:构建 blinky 样例

构建 Zephyr 内核与blinky样例应用(目标板为serpente):

west build -b serpente samples/basic/blinky

blinky是 Zephyr 中最基础的点灯样例,它通过led0别名驱动板载 LED 周期性闪烁。由于 Serpente 的 LED 均为GPIO_ACTIVE_LOW,devicetree 已正确声明极性,样例无需任何修改即可工作。

第二步:连接板卡

使用 USB 线将 Serpente 连接到主机电脑。注意板卡有 USB Type-C 公头、Type-C 母座、Type-A 公头三种变体,请根据手头板卡选择合适的连接方式。

第三步:进入 bootloader 模式

快速双击 Reset 按键(两次轻触),板卡将进入 UF2 bootloader 模式,并在主机上呈现为一个可移动磁盘。

第四步:烧录固件

west flash

west flash会通过 bossac runner 生成并烧录固件。烧录完成后复位运行,即可看到板载 User LED 开始闪烁。

若使用手工方式,也可以将 west 构建产物中的.uf2文件直接拖入 bootloader 暴露的可移动磁盘完成烧录。

总结

Serpente 以极小的尺寸提供了完整的开发闭环:ATSAMD21E18A 提供 48MHz Cortex-M0+ 算力,256KiB 内部 Flash + 32KiB RAM + 4MiB 外部 SPI Flash 满足原型存储需求,PWM RGB LED 便于状态指示,原生 USB 既是通信口也是烧录口。在 Zephyr 中,该板卡的移植已相当成熟:devicetree 完整定义了引脚复用、分区与外围设备,Kconfig 预设了 OSC8M 主时钟与 BOSSA/UF2 bootloader 支持,west build -b serpente+ 双击复位 +west flash三步即可完成从源码到点灯的全流程。对于需要快速验证 Zephyr 应用或做小型 USB 外设原型开发的场景,Serpente 是一个非常轻量且顺手的起点。

【免费下载链接】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),仅供参考

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

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

立即咨询