Windows 下用MSYS2 环境为RP2040 编译MicroPython 固件

就是想试试看MSYS2 能兼容到什么地步。自己做了个RP2040 板子,用了4MB 的Flash,默认的Micropython 固件是2MB 的,所以只能自己编译固件。

编译环境

MSYS2 的安装方法、基本配置什么的我就不管了,到处都有文章介绍这个。只提一点,现在有了Windows Terminal 以后就用不着整什么别的终端模拟器了,只需要打开powershell,运行:

msys2 -ucrt64 -shell fish

就可以直接启用MSYS2 的UCRT64 环境,并且将启动shell 设置为fish,当然需要先pacman 把fish 装上。我是用scoop 安装的MSYS2,不确定其他方式安装之后,启动方式有没有区别。

编译之前,需要pacman -S 安装gitmakecmaketoolchain(包括了gcc)、arm-none-eabi-gccpythonpython-pip-tools。注意安装的时候选择对应ucrt64 环境的版本。既然micropython 的指南里推荐了用virtualenv,那就用一下,拿pip 安装:

pip install virtualenv

然后随便创建个虚拟环境:

virtualenv upy

fish shell 下激活虚拟环境:

source ./upy/bin/activate.fish

其他shell 同理。然后找一个地方把micropython 下载下来:

git clone --recurse-submodules https://github.com/micropython/micropython.git

这样是直接把所有用到用不到的库代码也都下载了,还有库的库,所以整体下载了不少东西,大概5 个G。

编译windows 版MicroPython

可以先这么试一下,编译一份Windows 下直接能运行的MicroPython 解释器。先进入Windows 版本的文件夹

cd micropython/ports/windows

里面有一份README 可以看一下,然后就

make submodules
make

编译完成后,在build-standard 文件下会有一个micropython.exe,运行效果和python 解释器差不多。

在这里插入图片描述
顺便也能看到解释器的源代码版本和编译时间,看起来源码直接编译的话就是preview 版本。

开发板配置文件

要修改Flash 容量,只能先自定义一个开发板配置文件。先进入到rp2040 版本的文件夹:

cd micropython/ports/rp2

所有支持的开发板文件都放在boards 文件夹下,所以就复制粘贴一个别人开发板的文件,比如SPARKFUN_PROMICRO。我自定义的板子取名叫BITTER_BASIC_RP2040,文件夹名称最好保持这种格式。

每个板子的文件夹底下有三个配置文件,依次打开修改成想要的样子。json 文件就是些基本的描述,随便写;cmake 文件是空白的,不管;.h 文件里有Flash 容量有关的宏:

在这里插入图片描述

MICROPY_HW_FLASH_STORAGE_BYTES 表示安装完固件以后Flash 的剩余字节数,15 * 1024 * 1024 表示15MB,就是16MB 的FLASH 去掉1MB,所以4MB 的FLASH 芯片就把这里改成3 * 1024 * 1024。再把板子的名称改掉,我的就是"BITTER BASIC RP2040"。把下面的USB VID 和PID 删掉,这样就使用默认的PICO 开发板的信息。

除了这里,还有一份pico-sdk 的配置文件,也就是RP2040 官方库的配置。进入pico-sdk 的文件夹:

cd micropython/lib/pico-sdk

打开配置文件的位置:

cd src\boards\include\boards

这里每个板子的配置对应一个.h 头文件,一样是拿别人的文件改改。这里头文件名要和之前的文件夹名对应,改成bitter_basic_rp2040.h,我还是用SPARKFUN 的pro micro 文件修改:

在这里插入图片描述

第一个宏改成自己板子的名字BITTER_BASIC_RP2040,方便以后在条件编译里使用。下面定义了板载LED 和WS2812 RGB 的引脚,这个pro micro 板子只有RGB 连在GPIO25 上,没有普通的LED,所以他就把PICO_DEFAULT_LED_PIN 注释掉了,我的板子上LED 和RGB 都有,所以对应修改:

#ifndef PICO_DEFAULT_LED_PIN
#define PICO_DEFAULT_LED_PIN   25
#endif#ifndef PICO_DEFAULT_WS2812_PIN
#define PICO_DEFAULT_WS2812_PIN 24
#endif

其他的引脚定义没什么好说的,最后就是FLASH 相关的宏:

在这里插入图片描述

PICO_BOOT_STAGE2_CHOOSE_W25Q080 表示Flash 芯片是W25Qxx 这一系列,或者与之兼容的型号,而不是说Flash 芯片是W25Q80。自己做的板子基本都用这种Flash,不用改。

PICO_FLASH_SPI_CLKDIV 是驱动SPI 的时钟分频系数。如果RP2040 CPU 频率125MHz,那么驱动Flash 的SCLK 频率就是62.5MHz。W25Qxx 系列芯片的规格书上说它最高能到100MHz,但是为了稳定性,选个2 分频是比较合适的。

PICO_FLASH_SIZE_BYTES 就是Flash 的实际字节数,4MB 那就改成4 * 1024 * 1024。

编译固件

打开RP2040 的文件夹:

cd micropython/ports/rp2

参考文件夹里附带的README,make 的时候要指定板子的名称,编译过程中,对应的配置文件会自动被使用。开始编译:

make BOARD=BITTER_BASIC_RP2040 submodules
make BOARD=BITTER_BASIC_RP2040 clean
make BOARD=BITTER_BASIC_RP2040

第三步可能会出现报错,比如找不到头文件:

在这里插入图片描述
这可能是因为基于mingw-w64 的arm gcc 编译器不支持MSYS2 这种文件路径格式,尽管它是用pacman 安装的。这样就只能稍微走点弯路,当然,不用想法子把arm gcc 编译一遍找BUG,而是在MSYS2 之外,另外搭一套编译环境。

推荐用scoop 安装,需要的环境包括:cmakegcc-arm-none-eabipython3,如果还需要本机的gcc 编译器,可以安装mingw-winlibs,一站式解决。配置好以后,用powershell 打开刚才rp2040 文件夹,不启动MSYS2。运行make BOARD=BITTER_BASIC_RP2040,应该会输出报错信息:

在这里插入图片描述在命令运行完之前Ctrl-C 关闭掉,否则就手动删除cmake 生成的build-BITTER_BASIC_RP2040 文件夹。复制调用cmake 的命令,另外加上一个参数:

cmake -G "Unix Makefiles" -S . -B build-BITTER_BASIC_RP2040 -DPICO_BUILD_DOCS=0 -DMICROPY_BOARD=BITTER_BASIC_RP2040 -DMICROPY_BOARD_DIR="C:/Users/chris/source/MSYS2/upy-prj/micropython/ports/rp2/boards/BITTER_BASIC_RP2040"

-G "Unix Makefiles" 是让cmake 生成Makefile。这里完成之后,就可以回去MSYS2 继续剩下的步骤。手动调用make:

make -C build-BITTER_BASIC_RP2040/

这里不出意外的话就会跑完,在build-BITTER_BASIC_RP2040 文件下生成.uf2 固件,按标准程序扔进板子里就好了。打开micropython 编辑器mu-editor,没有出问题的话, 打开REPL 之后,这里提示的板子名称就变成了刚才自己设置的名字。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac视频压缩简单办法,mac如何把视频压缩到指定大小内存

在数字时代,视频已成为我们日常生活和工作的重要交流工具。然而,视频文件体积庞大,给存储和分享带来了不少困扰。本文将为你揭秘视频压缩的秘密,让你轻松减小视频文件体积,提升分享效率! 方法一下载文件压缩…

Vue3实现过渡动画

认识动画 在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验: React框架本身并没有提供任何动画相关的API,所以在React中使用过渡动画我们需要使用一个第三方库 react-transition-group&#xf…

【高中数学/极值问题】一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?

【问题】 一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少? 【示意图】 【解析式】 设垂直于墙的两边长为x,则墙对边长为L-2x,围成的矩形面积Sx(L-2x) 写成标准的解析式为yx(L-2…

本地Windows电脑 连接 Windows 服务器

Windows电脑 连接 Windows 服务器 方式1:直接搜索 在电脑的搜索栏,输入“远程桌面连接” 可以选择点击 “打开” 或者直接按 回车键 “Enter”,打开 远程桌面连接 方式2:运行框打开服务器连接 同时按:Windows徽标键…

java+springboot+Mysql“友书”综合书籍平台系统24489-计算机毕业设计项目选题推荐(附源码)

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,“友书”综合书籍平台当然也不能排除在外。“友书”综合书籍平台系统是以实际运用为开发背景,运用软件工程原…

搜维尔科技:详谈ART的工具追踪技术

您的生产流程中是否已经受益于刀具跟踪系统?您是否意识到它们的价值?因为它们可以优化您的装配顺序,从而节省您的时间和金钱。 目前我们提供两种工具跟踪解决方案: 1.ART与 VERPOSE的解决方案——易于使用的图像识别 安装在工…

UE5 05-利用 timeline 插值运动

理解成 unity Dotween DoMove 插值运动即可 AddTimeLine 节点 物体插值运动 物体插值缩放 一个timeline 可以K多个动画帧

基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用

基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用 一、功能描述: 上位机通过CAN总线实现对电机的运动控制,主要包含三种模式:位置模式、速度模式以及力矩模式。驱动器硬件核心为STM32F103C8T6,带相电压采集电路以及母线电压采集电路。其中供电电压12V。 PWM中心对…

DT浏览器很好用

DT浏览器是一款简单的浏览器,又是强大的浏览器,界面简洁大方,软件使用流畅。DT浏览器的网址收藏,人工智能写作,书法笔记等功能与众不同。DT浏览器的图文识别功能和笔记本搭配使用,可以对内容编辑修改和保存…

RestTemplate、MockMVC、Swagger

rest代码风格 硬编码的部分在实际开发中都是会替换成枚举对象 SpringMVC会自动把json格式的post请求转化为对应接收的 对象 响应请求时,也会自动把 对象转化为 json格式的 RestTemplate 浏览器的地址栏只能提供get请求访问后端,如果要使用post方式发送…

[A-03] ARMv8/ARMv9-多级Cache架构

ver 0.1 前言 前面文章我介绍了Cache的基本架构、Cache的详细的结构,有了一定的cache的基础,对cache机制也有了sense。实际上Cache作为CPU架构中存储机制的核心组件和CPU的微架构以及系统的总线架构还是密切相关的,不同的体系下&#xff0c…

传统数据处理系统存在的问题

传统应用的数据系统架构设计时,应用直接访问数据库系统。当用户访问量增加时,数据库无法支撑日益增长的用户请求的负载,从而导致数据库服务器无法及时响应用户请求,出现超时的错误。 出现这种情况以后,在系统架构上就采…

【Axure高保真原型】中继器表格——移入显示详情卡片案例

今天和大家分享中继器表格——移入显示详情卡片的原型模板,鼠标移入员工号或姓名会弹出员工卡片,可以查看更详细的信息。这个表格是用中继器制作的,所以使用也很方便,只需要维护中继器表格里的信息,即可自动生成交互效…

第一百四十二节 Java数据类型教程 - Java字符数据类型

Java数据类型教程 - Java字符数据类型 Character类的一个对象包装一个char值。 字符类包含isLetter()和isDigit()方法来检查字符是否为字母和数字。 toUpperCase()和toLowerCase()方法将字符转换为大写和小写。 该类提供了一个构造函数和一个工厂valueOf()方法来从char创建对…

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署)

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署) 简介 OpenEBS 是一种开源云原生存储解决方案。OpenEBS 可以将 Kubernetes 工作节点可用的任何存储转化为本地或复制的 Kubernetes 持久卷。OpenEBS 帮助应用和平台团队轻松地部署需要…

深度学习图像生成与分割模型详解:从StyleGAN到PSPNet

文章目录 Style GANDeeplab-v3FCNAdversarial AutoencodersHigh-Resolution Image Synthesis with Latent Diffusion ModelsNeRF: Representing Scenes as Neural Radiance Fields for View SynthesisPyramid Scene Parsing Network Style GAN 输入是一个潜在向量 (z)&#xff…

[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接

目录 一、什么是激光焊接 1.1 概述 1.2 激光焊接的优点 二、激光焊接的应用 2.1 哪些场合必须使用激光焊接 1. 汽车制造业 2. 航空航天领域 3. 电子行业:消费类电子3C 4. 医疗器械制造 5. 新能源锂电池行业 6. 其他领域 三、激光焊接的分类 3.1 按焊接…

【靶机实战】Apache Log4j2命令执行漏洞复现

# 在线靶场 可以通过访问极核官方靶场开启靶机实验:极核靶场 -> 漏洞复现靶场 -> Log4j2-RCE 原文:【靶机实战】Apache Log4j2命令执行漏洞复现 - 极核GetShell (get-shell.com) # 简介 Apache Log4j2 是一个广泛使用的 Java 日志记录库&#…

【ROS2】初级:CLI工具- 理解话题(或主题)

理解话题 目标:使用 rqt_graph 和命令行工具来内省 ROS 2 话题。 教程级别:初学者 时间:20 分钟 目录 背景 先决条件 任务 设置2 rqt_graph3 ros2 话题列表4 ros2 话题回声5 ros2 话题信息6 ros2 接口显示7 ros2 话题发布8 ros2 话题赫兹 清理…

技术革新引领钢材质量智能化检测新纪元,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建钢材工业生产场景下钢材缺陷智能检测识别系统

随着人工智能(AI)技术的迅猛发展,其应用领域不断拓宽,正深刻改变着传统产业的运作模式。在钢材生产这一基础工业领域,AI的引入正为钢材的质量检测带来革命性的变革。 在传统的钢材生产流程中,质量检测是确…