Zephyr RTOS 板级支持实战:Atmel SAM4E Xplained Pro(sam4e_xpro)开发板指南
【免费下载链接】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
SAM4E Xplained Pro 是 Atmel(现 Microchip)推出的基于 ATSAM4E16E 微控制器的评估套件,在 Zephyr RTOS 中对应板级目标sam4e_xpro。本文以 boards/atmel/sam/sam4e_xpro/doc/index.rst 为骨架,结合仓库内的设备树、Kconfig、烧写脚本与配置文件,系统讲解该板的硬件资源、Zephyr 支持情况、系统时钟配置、串口映射、GPNVM 启动位原理,以及基于 OpenOCD 与 SAM-BA 两种烧写/调试路径的完整实战流程。读完本文,你将能够独立完成该板上的应用构建、烧写、串口验证与 GDB 调试。
一、开发板概述
SAM4E Xplained Pro 是用于评估 Atmel SAM4E 系列微控制器的开发平台。板载核心为ATSAM4E16E,一款基于 ARM Cortex-M4F 内核、带浮点单元(FPU)的微控制器,具备 1 MB 片内 Flash 与 128 KB 片内 RAM(该容量同样体现在 sam4e_xpro.yaml 中flash: 1024/ram: 128的定义上)。
在 Zephyr 中,该板由 Kconfig.sam4e_xpro 声明config BOARD_SAM4E_XPRO,并通过select SOC_SAM4E16E与 SoC 层关联;board.yml 则登记了板名、厂商(atmel)与 SoC 型号(sam4e16e)。
二、板载硬件资源
| 类别 | 规格 |
|---|---|
| 处理器 | ATSAM4E16E,ARM Cortex-M4F |
| 系统晶振 | 12 MHz 晶体振荡器 |
| 低速晶振 | 内部 32.768 kHz 振荡器 |
| SRAM | 2 × IS61WV5128BLL,4 Mb(片外) |
| NAND Flash | MT29F2G08ABAEAWP,2 Gb(片外) |
| 存储扩展 | SD 卡连接器 |
| 通信 | CAN 总线(TLE7250GVIOXUMA1 CAN 收发器) |
| 网络 | 以太网口(KSZ8081MNXIA PHY) |
| USB | Micro-AB USB 设备口;Micro-AB USB 调试口(支持 CMSIS-DAP、虚拟串口 VCP 与 DGI 数据网关接口) |
| 按键 | 1 个复位键、1 个用户按键 |
| LED | 1 个黄色用户 LED |
三、Zephyr 支持的驱动与子系统
根据 sam4e_xpro.yaml 的supported列表,Zephyr 已为sam4e_xpro提供如下能力:adc、counter、gpio、hwinfo、i2c、netif:eth、ptp_clock、pwm、sdhc、spi、uart、usbd、watchdog,以及 Xplained Pro 扩展排针专属的xpro_gpio、xpro_i2c、xpro_serial、xpro_spi。
这些能力在设备树源文件 sam4e_xpro.dts 中有完整映射:
- aliases:
i2c-0→ TWI0、pwm-0→ PWM0、led0→ 黄色 LED、sw0→ 用户按键、wdog/watchdog0→ WDT、sdhc0→ HSMCI; - chosen:
zephyr,console与zephyr,shell-uart均指向uart0,zephyr,sram指向sram0,zephyr,flash指向flash0; - LED:黄色 LED 挂在 PIO 端口 D 的 22 号引脚(
&piod 22),低电平有效(GPIO_ACTIVE_LOW); - 按键:用户按键挂在 PIO 端口 A 的 2 号引脚(
&pioa 2),配置为上拉且低电平有效,并绑定INPUT_KEY_0输入事件码,可配合 Zephyr Input 子系统使用。
此外,Kconfig.defconfig 通过configdefault ETH_DRIVER default y默认启用以太网驱动,对应设备树中启用的 GMAC(&gmac)与 MDIO 总线、ethernet-phy@0节点;PHY 地址为reg = <0>。GMAC 节点还配置了 Atmel OUI 前缀zephyr,mac-address-prefix = [00 04 25]与随机 MAC 地址选项。
四、引脚布局与 Xplained Pro 扩展接口
SAM4E Xplained Pro 提供三组标准扩展排针(EXT1/EXT2/EXT3),其引脚映射通过 sam4e_xpro.dts 中compatible = "atmel-xplained-pro-header"的gpio-map描述,gpio-map-mask与gpio-map-pass-thru用于地址/标志位的透传过滤。三组接口的共享信号与复用功能如下:
- EXT1:AFE 模拟前端 AD0/AD1、GPIO、TIOA1/TIOB1(定时器)、WKUP7、TWD0/TWCK0(TWI0)、RXD1/TXD1(USART1)、SPI(MOSI/MISO/SCK + NPCS1 片选);
- EXT2:GPIO(其中 3 个与 EDBG/ETH 共享)、PWMHI1(PWM 高侧)、TWD0/TWCK0、URXD1/UTXD1(UART1)、SPI;
- EXT3:AFE AD0/AD6、GPIO、PWMH0/PWML0(PWM 通道 0)、TWD0/TWCK0、URXD1/UTXD1、SPI。
设备树末尾还通过别名方式明确了扩展接口与片内外设的对应关系,方便在应用 overlay 中直接复用:
ext1_spi: &spi0 {}; ext1_i2c: &twi0 {}; ext1_serial: &usart1 {}; ext2_spi: &spi0 {}; ext2_i2c: &twi0 {}; ext2_serial: &uart1 {}; ext3_spi: &spi0 {}; ext3_i2c: &twi0 {}; ext3_serial: &usart1 {};即 SPI 统一走 SPI0,I2C 统一走 TWI0,而串口在 EXT1/EXT3 上为 USART1、在 EXT2 上为 UART1。SPI0 同时配置了三路片选cs-gpios(PIOD 23、PIOD 30、PIOB 14),分别对应板载与扩展用途。
五、系统时钟配置
SAM4E MCU 使用板载12 MHz 内部振荡器作为参考时钟,经片内 PLL 倍频后生成120 MHz 系统时钟。这一配置在设备树中通过&cpu0节点体现:
&cpu0 { clock-frequency = <120000000>; };同时,板载还有内部 32.768 kHz 低速振荡器,用于低功耗模式下的实时时钟与看门狗等低速外设。
六、串口映射与控制台
ATSAM4E16E 具有2 个 UART 和 2 个 USART。其中 UART0 被配置为 Zephyr 控制台(console),并通过板载 EDBG USB 芯片以虚拟串口(Virtual COM Port)形式出现在主机上:
&uart0 { status = "okay"; current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-names = "default"; };此外,sam4e_xpro.dts 还启用了 USART1(同样 115200 波特率)与 UART1,两者分别通过 pinctrl 绑定到扩展排针。板级默认配置 sam4e_xpro_defconfig 中通过CONFIG_CONSOLE=y、CONFIG_SERIAL=y、CONFIG_UART_CONSOLE=y组合启用串口控制台输出,并开启了CONFIG_ARM_MPU=y与CONFIG_HW_STACK_PROTECTION=y强化内存保护,以及CONFIG_WDT_DISABLE_AT_BOOT=y在启动阶段临时禁用看门狗以免干扰初始化。
七、编程与调试:GPNVM 启动位原理
SAM4E 的烧写依赖OpenOCD 工具。这里有一个关键背景:出厂的全新 SAM4E 芯片默认从 ROM 中的 SAM-BA 引导程序启动,而不是从用户烧写的 Flash 镜像启动。这一行为由GPNVM1(General-Purpose NVM bit 1)决定。
烧写流程会自动将 GPNVM1 置 1,把默认启动行为切换为从 Flash 启动。这一动作直接体现在 board.cmake 中:
board_runner_args(openocd --cmd-post-verify "at91sam4 gpnvm set 1") include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) include(${ZEPHYR_BASE}/boards/common/bossac.board.cmake)即 OpenOCD 在镜像校验通过后执行at91sam4 gpnvm set 1,确保下次复位从 Flash 引导。
安全位 GPNVM0 的恢复流程
如果芯片的安全位 GPNVM0已被置位,你将无法向 Flash 编程,也无法通过调试接口连接。清除 GPNVM0 的唯一方法是执行芯片擦除(chip erase),该操作会擦除所有 GPNVM 位以及 SAM4E Flash 的全部内容。官方文档给出的步骤:
- 断电状态下,在 J304 排针上设置跳线(短接 ERASE);
- 上电后即可取下跳线——只要擦除线(erase line)被持续拉低至少 230 ms,擦除流程即会启动。
八、烧写应用
Zephyr 为sam4e_xpro提供两条烧写路径:默认的OpenOCD路径,以及SAM-BA 引导程序路径(对应 board.cmake 中同时 include 的bossac.board.cmake)。
8.1 方式一:使用 OpenOCD(默认)
- 使用USB 调试口将开发板连接到主机;
- 构建并烧写 hello_world 示例:
$ west build -b sam4e_xpro samples/hello_world $ west flashOpenOCD 的连接细节见 support/openocd.cfg:默认通过调试 USB 口的 EDBG 芯片以cmsis-dap接口连接(可通过环境变量OPENOCD_INTERFACE覆盖),使用 SWD 传输协议,目标为atsam4e16e,并定义了gdb-attach(复位暂停、强制硬件断点)与gdb-detach(恢复运行)事件。
8.2 方式二:使用 SAM-BA 引导程序
- 闭合板上的ERASE 跳线,上电保持10 秒(此时芯片执行擦除并进入 SAM-BA 模式);
- 打开 ERASE 跳线;
- 使用SoC USB 口将开发板连接到主机,仅构建(不 flash):
$ west build -b sam4e_xpro samples/hello_world $ west flash -r bossac-r bossac指定使用 bossac runner,通过 USB 直接调用 SAM-BA 引导程序完成烧写。
九、串口查看运行结果
- 启动终端程序监听虚拟串口。Linux 下设备节点通常为
/dev/ttyACM0,例如:
$ minicom -D /dev/ttyACM0 -o其中-o选项告诉 minicom 不发送 modem 初始化字符串。连接参数配置如下:
| 参数 | 值 |
|---|---|
| 速率(Speed) | 115200 |
| 数据位(Data) | 8 bits |
| 校验(Parity) | None |
| 停止位(Stop bits) | 1 |
- 按下复位键(reset button);
- 终端中应出现输出:
Hello World! sam4e_xpro。
十、调试应用
可以按常规方式对应用进行调试,以 hello_world 为例:
$ west build -b sam4e_xpro samples/hello_world $ west build -t debugwest build -t debug将启动 GDB 并通过 OpenOCD 连接到目标。由于 support/openocd.cfg 中配置了gdb-attach事件(reset halt并采用硬件断点),GDB 连接后目标会暂停在复位向量处,便于设置断点与单步调试;断开连接时目标自动恢复运行。
十一、总结
sam4e_xpro是 Zephyr 中覆盖较为完整的 Atmel SAM4E 板级目标:从 sam4e_xpro.yaml 登记的外设支持,到 sam4e_xpro.dts 中完整的 TWI/SPI/UART/USART/以太网/SDHC/USB/看门狗节点与三组 Xplained Pro 扩展排针映射,再到 board.cmake 中 OpenOCD(含 GPNVM1 自动置位)与 bossac(SAM-BA)双烧写路径,形成了开箱即用的开发闭环。理解 GPNVM0/GPNVM1 的启动位语义,是绕过"烧写后不引导""无法连接调试器"两大经典问题、顺畅上手该板的关键。
【免费下载链接】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),仅供参考