news 2026/8/21 11:50:07

【树莓派pico/pico2】在pico-sdk中自定义板子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【树莓派pico/pico2】在pico-sdk中自定义板子

一、前言

树莓派pico/pico2是树莓派推出的基于自家MCU(RP2040、RP2350)的核心板。现已有很多基于RP2040和RP2350芯片的各类核心板和开发板,也有用户自己制作的板子。如果用户使用的板子,其引脚定义、Flash配置和树莓派pico/pico2相差比较大,该如何处理?

二、pico-sdk的板子定义

pico-sdk是树莓派MCU软件开发的基础,所有树莓派MCU软件都是在这个sdk基础上开发的。pico-sdk对于不同的板子处理方式是使用pico-sdk\src\boards\include\boards下的对应板子的头文件来进行软件配置,如根据板子头文件内stdio串口引脚号初始化串口、根据头文件定义的Flash容量配置link文件中MEMORY的FLASH字段。在pico-sdk\src\boards\include\boards目录下已包含很多核心板和开发板的定义。

哇,2.2.0版sdk已经有131个板子定义了。

如果,这里现有的板子定义还是与您的板子不同,您可以加个自己的头文件,自定义一个板子。

三、pico-sdk的板子定义怎么用

下面是使用vscode插件raspberry-pi-pico建立新的C工程截图。

好吧,非树莓派pico/pico2的板子板子类型都被归到了“Other”。建工程时,板子和树莓派pico/pico2不兼容时就选这个“Other”吧。

建立工程后,在vscode界面右下角有个Board设置。

在这个位置上点一下就可以设置pico-sdk\src\boards\include\boards目录下的各种板子。上图的pico_plus_rp2350是我自己定义的板子。

四、怎么写自定义板子头文件

Step1: 拷贝并重命名一个相近的板子头文件。我的pico_plus_rp2350板子是在pico2板子上增加了个PSRAM芯片,所以直接复制个pico2头文件。

Step2:修改

我的pico_plus_rp2350板子在pico2基础上修改很少,除了定义新的板名宏,就是增加了PSRAM片选引脚定义。

下面是我的pico_plus_rp2350.h文件。

/* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ----------------------------------------------------- // NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO // SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES // ----------------------------------------------------- // This header may be included by other board headers as // "boards/pico_plus_rp2350.h" #ifndef _BOARDS_PICO_PLUS_RP2350_H #define _BOARDS_PICO_PLUS_RP2350_H pico_board_cmake_set(PICO_PLATFORM, rp2350) // For board detection #define PICO_PLUS_RP2350 // --- RP2350 VARIANT --- #define PICO_RP2350A 1 // --- BOARD SPECIFIC --- #define PICO_PLUS_PSRAM_CS_PIN 19 // --- UART --- #ifndef PICO_DEFAULT_UART #define PICO_DEFAULT_UART 0 #endif #ifndef PICO_DEFAULT_UART_TX_PIN #define PICO_DEFAULT_UART_TX_PIN 0 #endif #ifndef PICO_DEFAULT_UART_RX_PIN #define PICO_DEFAULT_UART_RX_PIN 1 #endif // --- LED --- #ifndef PICO_DEFAULT_LED_PIN #define PICO_DEFAULT_LED_PIN 25 #endif // no PICO_DEFAULT_WS2812_PIN // --- I2C --- #ifndef PICO_DEFAULT_I2C #define PICO_DEFAULT_I2C 0 #endif #ifndef PICO_DEFAULT_I2C_SDA_PIN #define PICO_DEFAULT_I2C_SDA_PIN 4 #endif #ifndef PICO_DEFAULT_I2C_SCL_PIN #define PICO_DEFAULT_I2C_SCL_PIN 5 #endif // --- SPI --- #ifndef PICO_DEFAULT_SPI #define PICO_DEFAULT_SPI 0 #endif #ifndef PICO_DEFAULT_SPI_SCK_PIN #define PICO_DEFAULT_SPI_SCK_PIN 18 #endif #ifndef PICO_DEFAULT_SPI_TX_PIN #define PICO_DEFAULT_SPI_TX_PIN 19 #endif #ifndef PICO_DEFAULT_SPI_RX_PIN #define PICO_DEFAULT_SPI_RX_PIN 16 #endif #ifndef PICO_DEFAULT_SPI_CSN_PIN #define PICO_DEFAULT_SPI_CSN_PIN 17 #endif // --- FLASH --- #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1 #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 2 #endif pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (4 * 1024 * 1024)) #ifndef PICO_FLASH_SIZE_BYTES #define PICO_FLASH_SIZE_BYTES (4 * 1024 * 1024) #endif // Drive high to force power supply into PWM mode (lower ripple on 3V3 at light // loads) #define PICO_SMPS_MODE_PIN 23 // The GPIO Pin used to read VBUS to determine if the device is battery powered. #ifndef PICO_VBUS_PIN #define PICO_VBUS_PIN 24 #endif // The GPIO Pin used to monitor VSYS. Typically you would use this with ADC. // There is an example in adc/read_vsys in pico-examples. #ifndef PICO_VSYS_PIN #define PICO_VSYS_PIN 29 #endif pico_board_cmake_set_default(PICO_RP2350_A2_SUPPORTED, 1) #ifndef PICO_RP2350_A2_SUPPORTED #define PICO_RP2350_A2_SUPPORTED 1 #endif #endif

修改自定义板子头文件时,除了板名宏外还有下面的宏定义是要关注的(个人以为)。

功能常见值
PICO_RP2350ARP2350芯片版本1:RP2350A
0:RP2350B
PICO_DEFAULT_UARTstdio串口号0
PICO_DEFAULT_UART_TX_PINstdio串口tx引脚pin值0
PICO_DEFAULT_UART_RX_PINstdio串口rx引脚pin值1
PICO_BOOT_STAGE2_CHOOSE_W25Q080MCU的FLASH使用W25Q080兼容SPI Flash,如果是其它QSPI Flash如Atmel AT25SF128A得换个宏
PICO_FLASH_SPI_CLKDIVSPI Flash的SPI clock在系统时钟上的分频。SPI Flash的工作频率小于系统时钟,需按实际情况分频2
PICO_FLASH_SIZE_BYTESflash大小,安照Flash芯片修改4

另外,头文件中的3个pico_board_cmake_set_default的cmake宏值要与代码宏定义一致哦。

至此,在pico-sdk自定义的板子就完成了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 17:04:15

5、超越CardSpace的身份元系统:第三方与开源解决方案探索

超越CardSpace的身份元系统:第三方与开源解决方案探索 在当今数字化时代,用户身份管理是互联网安全与便捷性的关键。除了常见的身份管理方式,还有许多第三方和开源解决方案值得关注。本文将深入介绍这些非微软的身份管理方案,为你展现一个更加多元的身份管理世界。 主要组…

作者头像 李华
网站建设 2026/8/21 19:55:38

如何用SlopeCraft地图像素生成器打造专业级Minecraft艺术作品

如何用SlopeCraft地图像素生成器打造专业级Minecraft艺术作品 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 还在为Minecraft中制作像素画而烦恼吗?想要将喜欢的图片完美转化…

作者头像 李华
网站建设 2026/8/21 22:06:56

QQ截图提取版:Windows系统终极截图解决方案

QQ截图提取版:Windows系统终极截图解决方案 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenShot QQScreenShot是一款功…

作者头像 李华
网站建设 2026/8/21 19:09:39

n8n自动化测试实战指南:5大关键策略提升工作流稳定性

n8n自动化测试实战指南:5大关键策略提升工作流稳定性 【免费下载链接】n8n n8n 是一个工作流自动化平台,它结合了代码的灵活性和无代码的高效性。支持 400 集成、原生 AI 功能以及公平开源许可,n8n 能让你在完全掌控数据和部署的前提下&#…

作者头像 李华
网站建设 2026/8/21 19:40:02

探索Java游戏服务器新纪元:高性能分布式架构深度解析

探索Java游戏服务器新纪元:高性能分布式架构深度解析 【免费下载链接】ioGame 项目地址: https://gitcode.com/gh_mirrors/io/ioGame 在当今游戏开发领域,构建高性能、可扩展的游戏服务器已成为开发者的核心挑战。传统Java游戏服务器框架往往面临…

作者头像 李华
网站建设 2026/8/21 2:57:04

43、硬盘使用指南:文件搜索与管理

硬盘使用指南:文件搜索与管理 1. 硬盘存储概述 计算机中的所有数据,实际上都存储在硬盘上。这包括Windows XP操作系统、所有安装的程序、创建或下载的每个文档,以及Windows提供的用于存储文档的内置文件夹,如“我的文档”“共享文档”“我的音乐”等。即使是全新的计算机…

作者头像 李华