开发板使用指南:硬件特性、引脚映射与烧录调试实战)
Zephyr RTOS 下 SAM D21 Xplained Prosamd21_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导读本文以 Zephyr 主仓库中 SAM D21 Xplained Pro 板级文档 为主体结合该板卡的设备树、引脚复用与 OpenOCD 配置等源码资源系统讲解如何在 Zephyr RTOS 中启用并驱动 Atmel SAM D21 Xplained Pro 评估套件。读完本文你将掌握该板卡的硬件资源清单、默认外设与引脚映射关系、串口与 PWM/SPI 的配置要点以及基于 EDBG 完成编译、烧录与串口调试的完整工作流。板卡概览面向原型验证的 Cortex-M0 评估套件SAM D21 Xplained Pro 是 Atmel现属 Microchip推出的评估与原型验证套件围绕 SAM D21 系列 Cortex-M0 处理器设计。它的核心优势在于板载Atmel Embedded DebuggerEDBG仅需一根 USB 线即可获得完整的调试接口编程、调试、虚拟串口无需额外购买调试器硬件。在 Zephyr 仓库中该板卡对应的标识符为samd21_xpro其板级描述文件 samd21_xpro.yaml 声明了以下关键属性类型mcu架构arm可用工具链zephyrZephyr SDK与gnuarmembGNU Arm Embedded存储资源256 KiB flash、32 KiB RAM受支持外设counter、dma、gpio、i2c、pwm、rtc、spi、uart、usb_device、usbd、watchdog。在设备树层面samd21_xpro.dts 中声明了板卡兼容串samd21,xpro, atmel,samd21j18a, atmel,samd21模型名为 SAM D21 Xplained Pro。板级 Kconfig 文件 Kconfig.samd21_xpro 通过select SOC_SAMD21J18A选择了对应的 SoC。硬件资源SAM D21 Xplained Pro 的核心硬件规格如下处理器SAMD21J18 ARM Cortex-M0主频 48 MHz时钟板载 32.768 kHz 晶振供 RTC 与低速外设使用存储256 KiB 片上 Flash、32 KiB RAM用户外设1 颗黄色用户 LEDLED0、1 个机械用户按键SW0、1 个复位按键调试板载 USB 接口的 EDBG 单元同时提供虚拟串口serial console。设备树 samd21_xpro.dts 中可以看到这些外设的具体接线leds { compatible gpio-leds; led0: led_0 { gpios portb 30 GPIO_ACTIVE_LOW; /* 黄色 LED低电平点亮接 PB30 */ }; }; buttons { compatible gpio-keys; user_button: button_0 { gpios porta 15 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); /* SW0 按键PA15上拉低有效 */ zephyr,code INPUT_KEY_0; }; };同时板级aliases节点将led0、pwm-led0、sw0、i2c-0与设备树节点一一对应保证各类 sample 与驱动可以按标准别名直接访问这些设备aliases { led0 led0; pwm-led0 pwm_led0; sw0 user_button; i2c-0 sercom2; };受支持特性该板卡在 Zephyr 中支持的特性集合由 samd21_xpro.yaml 的supported字段列出涵盖counter、dma、gpio、i2c、pwm、rtc、spi、uart、usb_device、usbd、watchdog。这意味着对应子系统的驱动均已在该板卡上启用并验证开发者可以直接在prj.conf中打开相关CONFIG_*开关即可使用这些外设而无需修改板级文件。引脚映射与 GPIO 控制器SAM D21 Xplained Pro 具有 3 个 GPIO 控制器PORT A/B/C负责引脚复用pin muxing、输入输出方向与上下拉等控制。板卡的全部引脚复用关系定义在 samd21_xpro-pinctrl.dtsi 中并以pinmux ...宏形式指定每个外设信号所复用的引脚及功能。下方为官方文档提供的 SAM D21 Xplained Pro 引脚分布图默认 Zephyr 外设映射下表汇总了板级文档给出的默认外设与引脚映射关系与 pinctrl 文件中的 pinmux 定义一一对应功能引脚pinctrl 宏来自 samd21_xpro-pinctrl.dtsiSERCOM0 USART TXPA10PA10C_SERCOM0_PAD2SERCOM0 USART RXPA11PA11C_SERCOM0_PAD3SERCOM1 USART TXPA16PA16C_SERCOM1_PAD0SERCOM1 USART RXPA19PA19C_SERCOM1_PAD3SERCOM2 I2C SDAPA08PA8D_SERCOM2_PAD0SERCOM2 I2C SCLPA09PA9D_SERCOM2_PAD1SERCOM3 USART TXPA22PA22C_SERCOM3_PAD0SERCOM3 USART RXPA23PA23C_SERCOM3_PAD1SERCOM5 SPI MISOPB16PB2D_SERCOM5_PAD0DIPO 对应SERCOM5 SPI MOSIPB22PB22D_SERCOM5_PAD2SERCOM5 SPI SCKPB23PB23D_SERCOM5_PAD3USB DPPA25PA25G_USB_DPUSB DMPA24PA24G_USB_DMGPIO SPI CSPB17—GPIO/PWM LED0PB30PB30E_TCC0_WO0PWM 模式说明SERCOM5 的 MISO数据输入引脚为 PB16在 pinctrl 中由PB2D_SERCOM5_PAD0复用至 SERCOM5 PAD0SPI 的数据输入/输出方向由设备树中的dipo/dopo参数见下文 SPI 章节决定。设备树 samd21_xpro.dts 通过各外设节点的pinctrl-0引用上述默认组。例如 SERCOM2 I2C 与 SERCOM3 UARTsercom2 { status okay; compatible atmel,sam0-i2c; clock-frequency I2C_BITRATE_FAST; /* 400 kHz */ pinctrl-0 sercom2_i2c_default; }; sercom3 { status okay; compatible atmel,sam0-uart; current-speed 115200; pinctrl-0 sercom3_uart_default; };系统时钟配置SAM D21 的时钟方案为以 32.768 kHz 外部晶振XOSC32K作为基准通过片上 PLL 生成 48 MHz 系统时钟。这一配置体现在板级 defconfig samd21_xpro_defconfig 中CONFIG_SOC_ATMEL_SAMD_XOSC32Ky CONFIG_SOC_ATMEL_SAMD_XOSC32K_AS_MAINy其中CONFIG_SOC_ATMEL_SAMD_XOSC32K启用 32.768 kHz 外部晶振CONFIG_SOC_ATMEL_SAMD_XOSC32K_AS_MAIN将该晶振指定为主时钟源Main Clock。CPU 主频在设备树中显式声明为 48 MHzcpu0 { clock-frequency DT_FREQ_M(48); };板上的 32.768 kHz 晶振同时服务于 RTC 等低速外设设备树中 RTC 节点启用了时钟计数模式并设置了分频rtc { status okay; counter-mode clock; prescaler 1024; };串口Serial PortSAM D21 内部共有 6 个基于 SERCOM 的可配置串行外设。在本板卡的 BSP 中其中 3 个 SERCOM 被配置为 USART 使用SERCOM3 为 Zephyr 默认控制台console。默认串口参数如下串口波特率格式说明SERCOM096008N1通用 UARTSERCOM11152008N1通用 UARTSERCOM31152008N1连接板载 EDBG作为默认 Zephyr 控制台对应配置同样可以在设备树中确认sercom0的current-speed 9600sercom1与sercom3均为115200chosen节点将控制台指向 SERCOM3chosen { zephyr,console sercom3; zephyr,shell-uart sercom3; zephyr,sram sram0; zephyr,flash flash0; };同时在板级 defconfig 中启用了串口与控制台支持CONFIG_CONSOLEy CONFIG_SERIALy CONFIG_UART_CONSOLEy CONFIG_UART_INTERRUPT_DRIVENy因此用户程序中的printf输出将直接出现在连接 EDBG 的虚拟串口上Linux 下通常为/dev/ttyACM0。PWM 输出SAM D21 内部有 3 个基于 TCC 的 PWM 单元每个 TCC 最多可输出 4 路 PWM周期精度为 24 位或 16 位。在本板卡上如果启用CONFIG_PWM_SAM0_TCC则 LED0 将由 TCC0 驱动而非 GPIO 驱动从而实现 LED 的 PWM 亮度调节。设备树中 TCC0 节点的完整配置如下tcc0 { status okay; compatible atmel,sam0-tcc-pwm; /* Gives a maximum period of 1.4s */ prescaler 4; #pwm-cells 2; pinctrl-0 pwm_default; pinctrl-names default; };引脚复用部分将 PB30 配置为 TCC0 的通道 0 输出PB30E_TCC0_WO0。注意设备树注释指出在prescaler 4的设置下该 PWM 的最大周期约为 1.4 秒。板级别名pwm-led0也指向该 PWM 通道便于使用 Zephyr 的 PWM API 直接点亮/调暗 LED0。SPI 端口SAM D21 内部有 6 个基于 SERCOM 的 SPI 外设。在 SAM D21 Xplained Pro 上SERCOM5 连接板载 8 兆比特1 MiBSPI Flash可用于数据存储、文件系统等实验。设备树中 SERCOM5 的配置为sercom5 { status okay; compatible atmel,sam0-spi; dipo 0; dopo 2; #address-cells 1; #size-cells 0; pinctrl-0 sercom5_spi_default; };其中dipo/dopo为 SAM0 系列 SPI 特有的数据输入/输出引脚偏移配置对应到 SERCOM5 的 PAD 分配与 pinctrl 文件中的PB2D_SERCOM5_PAD0、PB22D_SERCOM5_PAD2、PB23D_SERCOM5_PAD3配合。片选CS引脚则由用户通过 GPIO 控制默认映射表中的 GPIO SPI CS 为 PB17。编程与调试调试方案EDBG OpenOCDSAM D21 Xplained Pro 板载的 Atmel Embedded DebuggerEDBG提供了对 SAMD21 芯片的完整调试接口并被OpenOCD官方支持。Zephyr 的板级构建文件 board.cmake 引入了通用 OpenOCD 支持include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)板卡自带的 OpenOCD 配置 support/openocd.cfg 定义了调试接口、目标芯片与调试事件处理source [find interface/cmsis-dap.cfg] transport select swd set CHIPNAME at91samd21j18a set ENDIAN little set CPUTAPID 0x0bc11477 source [find target/at91samdXX.cfg]配置中通过 CMSIS-DAP 接口以 SWD 传输协议连接芯片并在 GDB attach/detach 时自动执行 halt/resume方便直接使用 GDB 进行断点调试。编译 hello_world首先构建 Zephyr 内核与hello_world示例应用。在 Zephyr 环境下执行west build -b samd21_xpro samples/hello_world构建产物中会额外生成 hex 格式镜像defconfig 中启用了CONFIG_BUILD_OUTPUT_HEXy便于配合调试器烧录。连接与串口监听使用 USB 调试端口将 SAM D21 Xplained Pro 连接到主机EDBG 会枚举出调试接口与虚拟串口在 Linux 下虚拟串口通常为/dev/ttyACM0。用终端程序监听输出例如$ minicom -D /dev/ttyACM0 -o-o选项告诉 minicom 不要发送 modem 初始化字符串。串口参数应配置为波特率115200数据位8校验无停止位1烧录镜像构建完成后通过 west 调用 OpenOCD 将镜像烧录到板卡west flash烧录完成后在串口终端中应能看到hello_world示例的输出。该输出来自 samples/hello_world/src/main.c 中的printf调用#include stdio.h int main(void) { printf(Hello World! %s\n, CONFIG_BOARD_TARGET); return 0; }CONFIG_BOARD_TARGET由构建系统展开为板卡名因此终端会打印Hello World! samd21_xpro参考资源SAM D21 Family 数据手册含 SERCOM、TCC、时钟系统等外设寄存器级说明SAM D21 Xplained Pro 原理图设计文档用于确认扩展头与板载外设的电气连接板级引脚复用定义samd21_xpro-pinctrl.dtsi板级设备树samd21_xpro.dts板级默认配置samd21_xpro_defconfig板卡信息文件samd21_xpro.yaml 与 board.yml。小结SAM D21 Xplained Pro 在 Zephyr 中是一个开箱即用的 Cortex-M0 评估平台板载 EDBG 让烧录与调试成本降到最低SERCOM 可灵活配置为 UART/I2C/SPITCC 提供多通道 PWM片上 32.768 kHz 晶振配合 PLL 提供稳定的 48 MHz 主频。本文涉及的板级文件设备树、pinctrl、defconfig、OpenOCD 配置均位于仓库 boards/atmel/sam0/samd21_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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考