当前位置: 首页 > news >正文

【树莓派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自定义的板子就完成了。

http://www.cnnetsun.cn/news/134861.html

相关文章:

  • 【Java + Elasticsearch全量 增量同步实战】
  • 科研数据探索新维度:NSFC项目智能分析系统深度体验
  • 7、利用CardSpace和Windows Communication Foundation开发软件+服务
  • Scada-LTS开源项目完整使用指南:从零开始构建工业监控系统
  • 浏览器插件跨平台兼容性终极指南:5个核心技巧解决Chrome/Edge/Firefox差异
  • Godot-MCP革命:用AI对话创造你的梦想游戏世界
  • 大明开国勋臣的三重贡献:李善长、胡惟庸与蓝玉的历史功绩再审视
  • Python GUI终极指南:5步掌握DearPyGui的完整开发流程
  • Heroicons 2.1.5版本实战指南:23个新图标如何提升你的开发效率
  • python-flask-django学习课程辅助系统设计与实现_s01d6vz0
  • FLORIS风电场仿真实战:从入门到精通的终极指南
  • 机器学习图表设计专家:快速创建专业级科研可视化
  • 惠普游戏本终极性能控制指南:OmenSuperHub完全实战教程
  • 煤矿高压电缆绝缘监测技术深度解析:从局部放电到智能预警的科技防线
  • 收藏必备!LangGraph核心概念详解:从思维链到多智能体,一文掌握大模型应用架构
  • python-flask-django大学生健康管理系统_35l867i9
  • python-flask-django宠物商城 论坛领养系统_07ggc7q2
  • 46、《Linux使用技巧与技术综合指南》
  • SSLUnpinning_Xposed:Android安全测试终极指南
  • Kotaemon本地化部署方案:满足数据不出境要求
  • Blynk物联网开发完全指南:从零到一的智能硬件实战教程
  • 终极指南:如何彻底卸载Windows 10中的OneDrive
  • 这个”AI超级工程师“,已经帮2000多家企业省了27亿度电了!
  • ArtPlayer实战指南:打造高效Web视频播放解决方案的完整方法
  • 工业互联网数据采集网关是什么
  • 终极指南:使用urdf-viz快速实现URDF可视化
  • 如何在10分钟内快速搭建MosDNS:打造高性能DNS转发器的完整教程
  • AI时代的思考力:程序员构建个人知识体系的完整路径!
  • 2025年大模型学习路线图:从零基础到精通,AI智能体教程带你探索LLMs与智能体AI的新世界!
  • 基于大语言模型的产量预测方法