Zephyr 中的 Adafruit KB2040 板级支持:RP2040 开发板的硬件特性、引脚映射与 UF2 烧录实战
【免费下载链接】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 RTOS 仓库内 Adafruit KB2040 板卡文档(boards/adafruit/kb2040/doc/index.rst)为主体,系统介绍这块基于 Raspberry Pi RP2040 芯片的小尺寸低成本开发板的硬件规格、Zephyr 默认外设映射、支持的驱动特性,以及其独有的 UF2 拖拽烧录流程。读完本文,你将掌握如何在 Zephyr 中为 KB2040 构建应用、通过 BOOTSEL 进入烧录模式完成免调试器烧录,并能结合板级 DTS 与 pinctrl 源码理解引脚复用的底层实现。
▲ Adafruit KB2040 开发板(图片来自 boards/adafruit/kb2040/doc/img/kb2040.jpg),板载 RP2040 主控、USB Type-C 接口与 BOOT/RST 按键。
概述:一块为键盘而生的 RP2040 小板
Adafruit KB2040 是 Adafruit 推出的一款小巧、低成本、多用途的开发板,搭载 Raspberry Pi RP2040 SoC,板载 RGB NeoPixel 灯珠、USB 连接器与 STEMMA QT 连接器。其名称中的 “KB” 表明它面向键盘(Keyboard)类应用设计,特别适合机械键盘改装、宏键盘、HID 外设等场景。最突出的特点是:它没有引出 SWD 调试引脚,而是依赖板载 USB 引导程序(UF2 bootloader)实现免适配器的拖拽式(drag-and-drop)烧录——无需任何外部调试器即可完成固件更新。
在 Zephyr 中,该板卡的标识符(identifier)为adafruit_kb2040,完整板级支持代码位于 boards/adafruit/kb2040/,包含设备树源文件、引脚复用配置、默认 defconfig 与 CMake 烧录脚本,属于官方维护的 Raspberry Pi Pico 生态板卡之一。
硬件规格:RP2040 的全部家底
根据板卡文档的 Hardware 章节,KB2040 的核心硬件配置如下:
| 项目 | 规格 |
|---|---|
| 处理器 | 双核 Arm Cortex-M0+,最高运行频率 133 MHz |
| SRAM | 264 KB 片上 SRAM |
| Flash | 8 MB 板上 QSPI Flash,支持 XIP(片上执行) |
| GPIO | 18 个 GPIO 引脚 |
| 模拟输入 | 4 路 ADC 输入 |
| UART | 1 个 UART 外设 |
| SPI | 1 个 SPI 控制器 |
| I2C | 2 个 I2C 控制器(其一经 STEMMA QT 连接器引出) |
| PWM | 16 个 PWM 通道 |
| USB | USB 1.1 控制器(支持 host/device) |
| PIO | 8 个可编程 I/O(PIO)状态机,用于自定义外设 |
| 其他 | 板载 RGB LED、1 个看门狗定时器外设 |
其中 8 MB QSPI Flash 的实际分区布局可以从板级设备树 adafruit_kb2040.dts 中得到验证:flash0的reg被声明为0x10000000起始、大小DT_SIZE_M(8),并划分为两个分区——偏移0x0处大小为0x100(256 字节)的只读second_stage_bootloader分区(用于存放 Pico 第二阶段引导程序),以及紧随其后的code_partition(partition@100),即 8 MB 减去引导程序占用后的可烧录代码区。
支持的特性(Supported Features)
板卡文档通过.. zephyr:board-supported-hw::指令自动汇总本板支持的外设硬件。对应的机器可读清单定义在板级 YAML 文件 adafruit_kb2040.yaml 中,supported列表明确列出:
- uart、gpio、adc、i2c、spi、hwinfo、watchdog、pwm、flash、dma、counter、clock
即 Zephyr 官方确认 KB2040 板级配置中可直接使用的驱动类型覆盖了串口、GPIO、模拟采集、I2C/SPI 总线、硬件信息、看门狗、PWM、Flash、DMA、计数器与时钟控制,基本涵盖了 RP2040 在 Zephyr 中已实现的主要外设。板卡类型为mcu,架构为arm,flash 8192 KB、RAM 264 KB,支持的工链为 zephyr 与 gnuarmemb。
从板级 adafruit_kb2040_defconfig 可以看到默认启用的内核配置项,这也是这些特性“开箱即用”的底层保证:
CONFIG_SERIAL=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_RESET=y CONFIG_CLOCK_CONTROL=y CONFIG_USE_DT_CODE_PARTITION=y CONFIG_BUILD_OUTPUT_UF2=y其中CONFIG_USE_DT_CODE_PARTITION=y让链接脚本把代码链接到设备树中定义的code_partition,保证应用写入 8 MB Flash 中正确的偏移;而CONFIG_BUILD_OUTPUT_UF2=y则让构建产物默认生成.uf2格式固件,与板载 USB 引导程序配套。
引脚映射(Pin Mapping)
RP2040 的外设可通过引脚复用(pinmux)路由到板上不同引脚,这种路由关系在 Zephyr 中通过设备树(DTS)配置修改。板卡文档给出 KB2040 的默认 Zephyr 外设映射如下:
| 外设信号 | 引脚 |
|---|---|
| UART0_TX | P0 |
| UART0_RX | P1 |
| I2C1_SDA | P2 |
| I2C1_SCL | P3 |
| SPI0_RX | P20 |
| SPI0_SCK | P18 |
| SPI0_TX | P19 |
这一默认映射在 adafruit_kb2040-pinctrl.dtsi 中有逐条对应的实现:
uart0_default:UART0_TX_P0(输出)与UART0_RX_P1(带input-enable);i2c1_default:I2C1_SDA_P2、I2C1_SCL_P3,均启用输入使能;spi0_default:SPI0_TX_P19、SPI0_RX_P20(输入使能)、SPI0_SCK_P18;adc_default:ADC 通道 0~3 分别路由到 P26、P27、P28、P29;ws2812_pio0_default:通过 PIO0 状态机驱动 P17,用于板载 RGB NeoPixel。
对应地,adafruit_kb2040.dts 中这些外设均被置为status = "okay"并绑定上述 pinctrl 组,其中 UART0 默认波特率 115200,SPI0 时钟频率 8 MHz,I2C1 采用I2C_BITRATE_FAST(400 kHz)快模式。
需要特别说明的是,KB2040 的引脚排布兼容 SparkFun Pro Micro 引脚布局,sparkfun_pro_micro_connector.dtsi 通过compatible = "sparkfun,pro-micro"的 connector 节点建立了 D0~D21 逻辑引脚与 RP2040 物理 GPIO 之间的映射关系(如 D18/A0 → GPIO26、D19/A1 → GPIO27 等),同时把pro_micro_i2c、pro_micro_spi、pro_micro_serial分别别名到i2c1、spi0、uart0,便于沿用 Pro Micro 习惯的扩展板代码直接运行。
编程与调试(Programming and Debugging)
为什么只能走 UF2
KB2040没有引出 SWD 引脚,因此无法使用常规的 SWD 调试器烧录。唯一的烧录途径是 UF2 文件。Zephyr 为该板配置的烧录运行器正是uf2,见 board.cmake:
board_runner_args(uf2 "--board-id=RPI-RP2") include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake)--board-id=RPI-RP2对应 RP2040 引导程序在主机上呈现的卷标,这也是 Pico 系列板卡的标准标识。
使用 UF2 烧录(Flashing)
默认情况下,为该板构建应用会在build/zephyr/目录下生成zephyr.uf2文件(由CONFIG_BUILD_OUTPUT_UF2=y保证)。烧录步骤非常直观:
- 构建固件:使用 west 或 cmake 构建目标板应用,例如:
west build -b adafruit_kb2040 samples/hello_world构建完成后检查
build/zephyr/zephyr.uf2是否生成。 - 进入烧录模式:按住板上的BOOTSEL按键给 KB2040 上电(或按住 BOOTSEL 的同时按下复位),松开后板卡会在主机上以**大容量存储设备(mass storage device)**的形式出现,卷标为
RPI-RP2。 - 拖拽烧录:将
zephyr.uf2文件直接**拖拽(drag-and-drop)**到该设备上,板载引导程序会自动完成写入并重启,烧录即告完成。
这种方式完全不需要外接调试器或 USB 转串口烧录工具,也无需安装额外驱动,因而在快速迭代原型、现场更新固件时非常便捷。若在已进入引导模式的前提下使用 west 的烧录命令,也可以执行:
west flashwest 会调用 uf2 runner 将zephyr.uf2拷贝到目标卷标设备。
调试与串口控制台
由于无法使用 SWD 调试器,日常调试主要依赖串口输出。板卡默认把 UART0(P0 = TX,P1 = RX,115200 波特率)作为 Zephyr console 与 shell 输出通道,这一点在设备树的chosen节点中有明确声明:
chosen { zephyr,console = &uart0; zephyr,shell-uart = &uart0; ... };将 USB 转 TTL 模块接入 P0/P1 即可在终端中查看内核日志与 shell 交互;也可以结合板载 USB 控制器(zephyr_udc0: &usbd)启用 USB CDC ACM 控制台方案。需要留意的是该板默认USB_SELF_POWERED=n(见 Kconfig.defconfig),即按总线供电处理。
板级实现要点速览
结合板卡文档与仓库源码,可以把 KB2040 在 Zephyr 中的实现要点总结如下:
| 关注点 | 配置位置 | 关键内容 |
|---|---|---|
| 板卡标识 | Kconfig.adafruit_kb2040 | BOARD_ADAFRUIT_KB2040并select SOC_RP2040 |
| Flash 分区 | adafruit_kb2040.dts | 8 MB QSPI,256 B 引导分区 + code 分区 |
| 引脚复用 | adafruit_kb2040-pinctrl.dtsi | UART0/I2C1/SPI0/ADC/WS2812 默认引脚组 |
| 烧录方式 | board.cmake | uf2 runner,--board-id=RPI-RP2 |
| 默认 Kconfig | adafruit_kb2040_defconfig | 串口/控制台/复位/时钟/UF2 输出 |
| Pro Micro 兼容 | sparkfun_pro_micro_connector.dtsi | D0~D21 与 RP2040 GPIO 的 gpio-map |
板载 RGB LED 在设备树中定义为一个worldsemi,ws2812-rpi_pico-pio节点,由 PIO0 状态机在 P17 引脚驱动,chain-length = 1、数据速率 800 kHz、复位延时 280 周期,并通过aliases { led-strip = &ws2812; }暴露别名,应用层可直接使用 LED Strip API 控制灯珠颜色,实现状态指示或流光效果。
结语
Adafruit KB2040 在 Zephyr 中的支持是“免调试器开发”的典型范例:得益于 RP2040 的 USB 引导程序与 UF2 格式,开发者只需把构建出的zephyr.uf2拖拽进板卡的RPI-RP2卷即可完成烧录。本文所涉及的板卡文档、设备树、引脚复用、defconfig 与烧录脚本均可在 boards/adafruit/kb2040/ 目录下逐一查阅,结合 RP2040 数据手册即可自由修改引脚路由,适配你自己的键盘或外设项目。
【免费下载链接】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),仅供参考