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,一经查实,立即删除!

相关文章

做一个自动校正英文拼写错误的程序 使用c++

概述一个自动校正英文拼写错误的程序的基本的方法,并提供一个简化的C实现。这个方法基于编辑距离(Levenshtein距离)和一个预定义的词典。 以下是实现这样一个程序的步骤: 创建一个词典(单词列表)计算编辑…

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

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

MySQL 8.4.1 LTS 容器镜像可以下载了

MySQL 8.4.1 LTS 版本和 9.0 是同一天上线的,都是7月1日,只是大家都聚焦在了 9.0 而没注意到 8.4.1,关于 9.0 的内容请戳这里: MySQL 9.0.0 新鲜出炉!支持向量类型 MySQL 9.0 的VECTOR文档更新 MySQL 8.4.1 变更 MySQL…

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徽标键…

数字图像处理、机器视觉(计算机视觉)、计算图形学概念

数字图像处理(Digital Image Processing)--又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程,以提高图像的实用性,达到人们所要求的预期结果。从输入到输出来看,数字图…

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

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

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

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

‘prettier‘ 不是内部或外部命令,也不是可运行的程序

报错信息:‘prettier’ 不是内部或外部命令、操作系统或可运行的程序 表明系统无法识别prettier这一命令。 解释: 这通常发生在尝试在命令行中运行prettier这个代码格式化工具时,但系统未安装prettier或者prettier没有正确添加到系统的环境…

UE5 05-利用 timeline 插值运动

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

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

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

【Web】Nginx:静态网站部署

Nginx 是一个HTTP和反向代理服务器,邮件代理服务器,以及一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在许多负载较重的俄罗斯网站上运行,包括Yandex、Mail.Ru、VK和Rambler。根据Netc…

DT浏览器很好用

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

RestTemplate、MockMVC、Swagger

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

Docker一键部署PostGIS

创建文件 docker-compose.yml version: ‘3.3’ services: db: image: postgis/postgis:14-3.4 container_name: postgres_postgis environment: POSTGRES_DB: ais_spatial_db POSTGRES_USER: root POSTGRES_PASSWORD: my_passwd ports: - “54321:5432” volumes: - pgdata:/v…

混淆矩阵全解析:深度理解目标检测算法性能评估

混淆矩阵全解析:深度理解目标检测算法性能评估 在机器学习和目标检测领域,评估模型的性能是一个至关重要的步骤。混淆矩阵(Confusion Matrix)是一种常用的工具,用于可视化模型的预测结果与实际标签之间的关系。本文将…

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

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

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

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