ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zephyr RTOS 上的 Cytron Maker Pi RP2040 开发板指南:硬件资源、引脚映射与刷写实操

Zephyr RTOS 上的 Cytron Maker Pi RP2040 开发板指南:硬件资源、引脚映射与刷写实操 Zephyr RTOS 上的 Cytron Maker Pi 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本篇基于 Zephyr 仓库中boards/cytron/maker_pi_rp2040的官方板级文档与配套设备树、CMake 配置编写覆盖 Maker Pi RP2040 的硬件资源、默认外设引脚复用PWM、UART、I2C、ADC、Grove 接口以及 UF2 刷写与 OpenOCD 调试方法。读完后你可以直接在该板上构建 Zephyr 应用用 shell 命令驱动舵机、电机、蜂鸣器读取 Grove 上的 I2C 传感器并测量供电电压。一、板卡硬件概述Maker Pi RP2040 是一块面向机器人教学的 RP2040 主板板载电机驱动、舵机接口和 Grove 扩展座在 Zephyr 中以maker_pi_rp2040作为板级标识见 board.yml。其完整硬件清单如下主控Raspberry Pi RP2040最高主频 133 MHz双核 ARM Cortex-M0264 kByte SRAM2 MByte QSPI flash17 个 GPIO 引脚、3 个 ADC 引脚支持供电电压测量I2C、UART 接口Micro USB 接口LiPo 充电器Reset、BOOT 键与 2 个用户按键2 颗 RGB LEDNeopixel 灯珠带静音开关的压电蜂鸣器4 路舵机接口2 路电机驱动器配 4 个手动测试按键7 个 Grove 连接器其中 1 个可用作 Maker/Qwiic/Stemma QT/zephyr_i2c 连接器13 个数字引脚状态指示灯从板级清单文件 maker_pi_rp2040.yaml 可以确认Zephyr 为该板声明的受支持特性为adc、clock、counter、dma、flash、gpio、hwinfo、i2c、pwm、uart、watchdog闪存 2048 KB、RAM 264 KB工具链为zephyr与gnuarmemb。Kconfig 侧则通过 Kconfig.maker_pi_rp2040 选择SOC_RP2040并在 Kconfig 中选择RP2_FLASH_W25Q080这颗 QSPI flash 芯片与硬件说明中的 2 Mbyte QSPI flash 相互印证。二、默认 Zephyr 外设映射板上每个引脚的默认复用关系都固化在设备树 maker_pi_rp2040.dts 与 maker_pi_rp2040-pinctrl.dtsi 中。默认 pinctrl 组pwm_default一次性把 PWM4A/B、PWM5A/B、PWM6A/B、PWM7A/B 和 PWM3A 全部使能这正是下表中 8 个 Zephyr PWM 通道加 1 个蜂鸣器通道全部可用的原因。板载控制资源描述引脚默认复用Zephyr PWM 通道RGB LEDNeopixelGPIO18PIO0—蜂鸣器GPIO22PWM3A6按键 1GPIO20别名 sw0—按键 2GPIO21别名 sw1—电压检测GPIO29ADC3分压电路—设备树中的对应实现两个用户按键在gpio_keys节点中定义为GPIO_ACTIVE_LOW | GPIO_PULL_UP并分别绑定输入事件码INPUT_KEY_0、INPUT_KEY_1maker_pi_rp2040.dts#L51-L65因此input子系统可以直接上报按键事件两颗 Neopixel 由 RP2040 的 PIO 状态机驱动ws2812节点配置了chain-length 2、GRB 颜色映射、280 us 复位延时和 800 kHz 刷新频率maker_pi_rp2040.dts#L184-L205并挂到led-strip别名上led_strip_set_pixel()等 API 可直接寻址供电电压测量通过vbatt节点实现这是一个voltage-divider传感器挂在 ADC 通道 3GPIO29output-ohms 10000、full-ohms 20000即板上用 10 kΩ/10 kΩ 电阻把 Vin 分压后送入 ADCmaker_pi_rp2040.dts#L44-L49因此 sensor API 读出的电压就是分压恢复后的真实供电电压。舵机接口GP12–GP15标识引脚默认复用Zephyr PWM 通道GP12GPIO12PWM6A12GP13GPIO13PWM6B13GP14GPIO14PWM7A14GP15GPIO15PWM7B15RP2040 上 GPIO16 及以后的引脚可映射到编号与引脚同号的 PWM 通道PWM6A 在 GP12 上对应通道 12所以 shell 里控制舵机时用的通道号与表中的Zephyr PWM name完全一致。电机驱动M1A–M2B标识引脚默认复用Zephyr PWM 通道M1AGPIO8PWM4A8M1BGPIO9PWM4B9M2AGPIO10PWM5A10M2BGPIO11PWM5B11每路电机由 A、B 两相 PWM 控制A 相决定正转占空比B 相决定反转占空比两相同时输出占空比为 0 即停转。这与后文 shell 示例中正转用通道 8、反转向通道 9 输出的用法完全对应。Grove 连接器7 个Grove 1UART0标识引脚默认复用GP0GPIO0UART0 TXGP1GPIO1UART0 RX设备树中uart0节点设为 115200 波特率并绑定uart0_defaultpinctrl 组同时zephyr,console与zephyr,shell-uart都指向uart0maker_pi_rp2040.dts#L116-L121——也就是说这个 Grove 口既是板级控制台也能当作普通 UART 扩展口使用。Grove 2I2C1即 zephyr_i2c 节点使用转接线可接入 Qwiic/Stemma QT 等 I2C 传感器该连接器映射到设备树标签zephyr_i2c。标识引脚默认复用GP2GPIO2I2C1 SDAGP3GPIO3I2C1 SCL对应节点将 I2C 总线速率设为I2C_BITRATE_FAST快速模式通常 400 kbit/s。Grove 3LEDGP4 为led0别名GPIO4高电平点亮GP5 为led1别名GPIO5定义见 maker_pi_rp2040.dts#L67-L79。Grove 4GP16、GP17 两路普通 GPIO。Grove 5GP6普通 GPIO、GP26ADC0与 Grove 6 共用。Grove 6GP26ADC0与 Grove 5 共用、GP27ADC1。Grove 7GP7普通 GPIO、GP28ADC2。这些 Grove 座在设备树中统一用grove-header兼容串描述gpio-map把每个座的信号线映射到具体 GPIO例如 Grove 1 的 RX/TX 分别映射到 GPIO1/GPIO0Grove 2 的 SCL/SDA 映射到 GPIO3/GPIO2Grove 5/6 均把 ADC0 映射到 GPIO26见 grove_connectors.dtsi。ADC 三个通道ADC0/1/2 对应 GP26/27/28在设备树中都配置为ADC_GAIN_1、内部参考、12 位分辨率maker_pi_rp2040.dts#L138-L176加上电压检测用的 ADC3共 4 个通道被暴露给zephyr,user的io-channels。三、编程与调试UF2 大容量存储模式默认方式默认通过 USB 接口烧录先按住 BOOT 键再按下 RST 键设备即进入 USB 大容量存储模式。构建应用会产出build/zephyr/zephyr.uf2文件直接拖拽到 U 盘盘符即可重新编程。UF2 输出由 maker_pi_rp2040_defconfig 中的CONFIG_BUILD_OUTPUT_UF2y默认开启。SWD 调试OpenOCD也可以经 DEBUG 座上的 SWDIO/SWCLK 引脚烧录和调试需要先给板子焊接 3 针排针并准备独立调试器如 DAP 类探针。构建时通常要设置OPENOCD与OPENOCD_DEFAULT_PATH烧录时加--runner openocd。板级 CMake 文件 board.cmake 为该板注册了 openocd、jlink、uf2、blackmagicprobe、pyocd 五类 runner并允许用-DRPI_PICO_DEBUG_ADAPTERname选择 OpenOCD 的 interface 配置文件默认cmsis-dap。OpenOCD 的 runner 参数为--cmd-pre-init source [find interface/${RPI_PICO_DEBUG_ADAPTER}.cfg] --cmd-pre-init transport select swd --cmd-pre-init source [find target/rp2040.cfg] --cmd-pre-init set_adapter_speed_if_not_set 2000其中set_adapter_speed_if_not_set过程定义在板内自带的 support/openocd.cfg若 interface 配置未设置探针速度则默认取 2000 kHz。UF2 runner 也指定了--board-idRPI-RP2说明该板复用 RP2040 的标准 UF2 板级标识。更完整的 RP2040 系烧录与调试说明可参考仓库中 rpi_pico 板级文档boards/raspberrypi/rpi_pico。四、刷写示例与 shell 实操以下示例均针对maker_pi_rp2040板命令格式遵循 Zephyr 的 west 工作流west build -b maker_pi_rp2040 appwest flash。4.1 blinky 与常用基础样例先跑blinky样例验证环境west build -b maker_pi_rp2040 samples/basic/blinky west flash官方文档同时推荐尝试led-strip、hello_world、button、input-dump和adc_dt样例分别对应板上的 Neopixel、UART 控制台、双按键输入上报与 ADC 通道。4.2 用 shell 控制 GPIO以 sensor_shell 样例配合 GPIO shell 为例west build -b maker_pi_rp2040 samples/sensor/sensor_shell -- -DCONFIG_GPIOy -DCONFIG_GPIO_SHELLy west flash在 shell 中把某个 GPIO 配置为输出并拉高可观察板上对应的状态指示灯gpio conf gpio0 16 o gpio set gpio0 16 14.3 舵机控制PWM 设备节点名为pwm40050000RP2040 PWM 外设的基地址。两种方式使用 servo-motor 样例它通过 overlay 文件为 GP12 输出口预置舵机位置时序在 pwm shell 中直接设占空比west build -b maker_pi_rp2040 samples/sensor/sensor_shell -- -DCONFIG_PWMy -DCONFIG_PWM_SHELLy west flashpwm usec pwm40050000 12 20000 800 pwm usec pwm40050000 12 20000 2000含义通道 12GP12周期 20000 us脉宽 800 us 与 2000 us。多数舵机支持 800–2000 us 的脉宽范围分别对应行程两端。4.4 蜂鸣器先把板子短边侧的蜂鸣器开关拨到 ON再使用与 sensor_shell 相同的构建命令然后pwm usec pwm40050000 6 1000 500 pwm usec pwm40050000 6 1000 0通道 6 即 GPIO22 上的 PWM3A1000 us 周期 500 us 脉宽500 Hz鸣响脉宽 0 关闭。4.5 电机控制控制 1 号电机的四个速度档位pwm usec pwm40050000 8 1000 1000 # 100% pwm usec pwm40050000 8 1000 500 # 50% pwm usec pwm40050000 8 1000 200 # 20% pwm usec pwm40050000 8 1000 0 # 停反方向 80% 转速pwm usec pwm40050000 9 1000 800即 M1BGPIO9输出反转 PWM占空比 80%。4.6 Grove 2 上的 I2C 传感器光敏 shield使用 light_polling 样例搭配仓库内置的 adafruit_veml7700 屏蔽板Veml7700 光照传感器演示 Grove 2 的 I2C 用法构建时同时指定--shield adafruit_veml7700。4.7 测量供电电压sensor_shell 样例同样可用于读取vbatt即第二节的voltage-divider节点。在 Vin 略低于 6 V 供电时输出类似sensor get vbatt channel type33(voltage) index0 shift3 num_samples1 value32688380776ns (5.977999)其中type33表示电压类型通道括号内的 5.977999 单位为伏特验证了设备树中 10 kΩ/10 kΩ 分压参数配置正确。五、Flash 分区与其他默认配置从 maker_pi_rp2040.dts#L82-L110 看该板把 2 MB QSPI flash 映射到0x10000000并划分两个只读映射分区second_stage_bootloader0x00000000起 0x100 字节为 RP2040 二阶段 bootloader 保留code_partition0x100起大小为 2 MB 减去 0x100 字节应用代码写入此分区对应zephyr,code-partition别名。默认配置maker_pi_rp2040_defconfig还开启了CONFIG_BUILD_OUTPUT_HEX、CONFIG_CONSOLE、CONFIG_UART_CONSOLE、CONFIG_UART_INTERRUPT_DRIVEN、CONFIG_GPIO、CONFIG_PIO_RPI_PICONeopixel 依赖 PIO、CONFIG_CLOCK_CONTROL、CONFIG_RESET与CONFIG_USE_DT_CODE_PARTITION与本文各节演示的能力一一对应UART 控制台、GPIO/PIO/PWM 外设以及按设备树分区定位代码加载地址。六、小结与要点核对板级标识maker_pi_rp2040SOC 为rp20402 MB flash / 264 KB RAM烧录首选 BOOTRST 进入 UF2 拖拽模式调试需焊接 SWD 排针并使用 OpenOCD可经-DRPI_PICO_DEBUG_ADAPTER指定 interfacePWM 统一挂在pwm40050000通道号与表格中的Zephyr PWM name一致舵机 GP12–15 对应通道 12–15电机 M1/M2 对应通道 8–11蜂鸣器对应通道 6Grove 1 是板级 UART0 控制台Grove 2 是zephyr_i2cI2C1 快速模式Grove 3 是 led0/led1Grove 5/6/7 提供 ADC0/1/2供电电压经vbattvoltage-divider 节点ADC310 kΩ/10 kΩ 分压通过sensor get vbatt读取。主要参考文件board documentation、maker_pi_rp2040.dts、grove_connectors.dtsi、pinctrl、board.cmake、defconfig。【免费下载链接】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),仅供参考
返回列表