2025-7-21 23:55:33 [显示全部楼层]
58浏览
查看: 58|回复: 0

[教程] 跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南

[复制链接]

跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南

前言

原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正交流。

文章如有更新请访问 DFRobot 社区cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。

感谢必趣科技(Bigtreetech)和魔核科技(MagicMaker)的硬件赞助。后来才知道很多人的入门打印机小鲁班也是魔核出品的,接触下来魔核的老板做事很严谨,比如 OrcaSlicer 唯一的 PEEK 打印参数,点个赞。

最近必趣更新了 CB2/BTTPi2 的操作系统,提升很大。趁着准备给魔核科技的 黑爵士UM2 打印机升级,就写一下相关教程。我个人从第一台 Anet A8 开始,已经购买、玩过 20 余台不同型号的 3D 打印机,其中尤其喜欢 UM2 架构的打印机,之前调教的最好的一台就是珍妮(JennyPrinter)的 Z370,不过拆装一次之后,铝塑板变形,就很是头疼。不过这台黑爵士采用同步带 Z,全金属结构件,真是一机传三代,人走机还在。本着好马配好鞍的原则,心头好 UM2 就要配顶级的 Manta M8P v2(STM32F723)+ 顶级的 CB2 上位机模块,至于性能配置是否冗余,可以不用,但不能没有。不过 CB2 之前的操作系统不太好用,所以一直没做介绍。这次趁着更新契机,将一些内容整合分享如下。未来计划更新 《2025 版 Klipper 摄像头不完全使用指南》,拭目以待。

本文涉及的内容:

  1. Manta M8P v2 + CB2 使用基本步骤
  2. CB2 新的 UMS 模式介绍
  3. 编译使用 ffmpeg-rkmpp 调用 GPU 实现硬件加速视频渲染(修改 timelapse 组件)
  4. 使用 panfrost 显卡驱动来直接渲染 KlipperScreen 界面,降低 CPU 占用

硬件列表:

  1. BTT Manta M8P v2.0
  2. 必趣 TFT 35_SPI v2.1
  3. 微雪 HDMI TouchScreen
  4. DFRobot DSI 树莓派触摸屏

其他一些注意点:

  1. 【更新】M8P v2.0/CB2 相关文档未及时更新,请参考 BTTPi2 文档
  2. 【勘误】CB2 烧录系统到 eMMC 后,需要将 3/4 拨码都会到 OFF 才会启动,而不是仅 3 。
  3. 【建议】Manta M8P v2,overlays 选 HDMI-1,结果要插插 HDMI-0 接口,希望必趣能统一从 0 还是从 1 数数
  4. 【TODO】当前系统点亮 DFRobot DSI 树莓派屏之后,几秒后会关闭背光
  5. 【更新】新版 Klipper 目前已支持 STM32H723 运行在 520Mhz 主频模式下,既往 H723/H743/H750 虽然支持但最高只能运行在 400Mhz 模式下(后两者目前依然如此)。
    1. stm32: Enable VOS0 power mode on stm32h723 if frequency above 400Mhz
    2. stm32: Run stm32h723 at 520Mhz

一、使用新版系统

1.1 新版系统的亮点:

  1. 新增 UMS 模式,支持将 eMMC 挂载为移动存储模式
  2. 内核大更新:4.19 ——> 6.1
  3. 支持调用 RKMPP 加速视频图像处理
  4. 支持调用 RKNPU 神经网络处理单元
  5. 支持 GPU Panfrost 驱动
  6. 支持 imx219 和 ov5647 树莓派摄像头
  7. 支持树莓派 DSI 屏
  8. 支持从 M.2 NVME 固态硬盘启动

1.2 产品特点

  • CPU: 瑞芯微 RK3566,四核 Cortex-A55 @1.8GHz
  • GPU: Mali-G52 1-Core-2EE
  • NPU: 0.8 TOPS NPU
  • RAM: 2GB LPDDR4
  • 32GB 板载 EMMC 存储
  • 支持树莓派 DSI/CSI 摄像头、显示器,性能更好、价格便宜
  • PCIe 2.1 1x1 支持 M.2 固态硬盘启动
  • 千兆以太网
  • 博通 433Mbps WiFi + BT5.0 无线模块
  • 40-pin GPIO
  • 与树莓派 CM4 完全相同的 BTB 座子

市面上常见 3D 打印机上位机 CPU 对比:

处理器型号 CPU架构 核心数 主频 GPU 性能跑分 备注
RK3566 Cortex-A55 4 最高1.8GHz Mali-G52 2EE 61 026 内置NPU,支持硬件编解码
H616 Cortex-A53 4 最高1.5GHz Mali-G31 MP2 40 029
RK3328 Cortex-A53 4 最高1.5GHz Mali-450 MP2 34 413
H5 Cortex-A53 4 最高1.5GHz Mali-450 MP6 25 273
H3 Cortex-A7 4 最高1.2GHz Mali-400 MP2 16 424 32位处理器

image-20250719234838233

1.1 BTTPi2 烧录新版系统(简介)

Pi2 主要区别是进入 Recovery 模式的拨码,如下图所示:

按住 Recovery 键通过 TypeC 数据线连接电脑即可。

另一个区别是支持 M.2 接口,从而支持一系列外设和固态硬盘启动。同时其优秀的编解码能力,也可以做一台 Jellyfin 影音服务器,具体可以查看 UP 主 索拉里斯风 的视频:《激动啊!Arm设备真的可以jellyfin转码了,功耗低超级低。性能很惊喜。》

1.2 M8P v2.0 使用新版系统

此主板延续了必趣一贯的大而全的特点,是一款非常优秀的二合一主板,其基础操作参考 官方文档。本着一文搞定的原则,简述相关步骤如下。

1.2.1 软件系统准备

  1. 操作系统下载地址 https://github.com/bigtreetech/CB2 ,当前(2025年7月19日)最新版本是 V3.0.2 ,下载 CB2_Debian12_Klipper_kernel6.1_20250529_without_obico.img.xz解压缩到合适位置,得到 img 系统镜像文件。
  2. 烧录工具下载:从上述仓库下载专用版 RKDevTool.zip,解压到合适目录
  3. 从上述烧录工具包中使用 DriverAssitant_v5.12 先卸载再安装驱动

1.2.2 CB2 进入烧录模式并烧录系统到 eMMC

CB2 和 Pi2 进入 Recovery 模式拨码位置不同,可以如下理解:

具体步骤:

  1. 移除 microSD 卡
  2. 将 TypeC 接口旁边的 2P 排针使用跳帽短接,从而使能 USB 供电,此时无需连接 24V 供电。
  3. 将 4P 拨码开关的 3(RPIBOOT) 和 4(USBOTG) 调节到 ON 位置,1、2 保持 OFF
  4. 使用 TypeC 数据线连接 M8P 到电脑
  5. 电脑打开 RKDevTool,更改、选择刚下载的镜像
  6. 如图设置,并点击 RUN 开始烧录

1.2.3 UMS/MSC 模式

这个改动太重要了,可以直接修改配置文件

若 eMMC 中已经烧录过 V3.0.1及其之后版本的系统,电脑会将 eMMC 识别为 MSC 设备(类似U盘一样的设备)。UMS模式相对于Loader模式有以下好处:

  • 可以直接修改 /boot/ 分区中的配置信息【配网终于不再反人类了】
  • 可以直接像 Micro SD 卡那样,直接烧录系统到eMMC 【虽然速度变慢了】
  • 可以通过软件擦除 eMMC 中的所有内容

不过仍有几点需要注意:

  1. 后续想要重新烧录系统,调节拨码后无法再使用 RKDevTool,而是和 microSD 卡相同,使用 USBImager 烧录,速度较之前速度慢不少。
  2. 使用 USBImager 等工具烧录系统前,可能需要使用 sdformater 格式化两次,启用逻辑大小调整。
  3. 想要进入 loader 模式,需要在 Linux 下操作,手动关闭 MSC 磁盘模式,再使用命令进入 Loader 模式
  4. 烧录新版系统后会自动启动进入 MSC 模式,此时会在系统中显示 boot 磁盘分区,我们可以打开并修改 armbianEnv.txt 和 system.cfg 文件。
  5. 弹出磁盘,将 3/4 拨码拨回 OFF,重新插电即可正常启动。【这里 CB2 官方文档有误且未更新 UMS 模式内容,需要查阅 BTTPi2 文档】

二、使用触摸屏

2.1 TFT35 SPI V2.1 触摸屏

本次使用的是 SPI 显示触摸屏(BTTPi2 无此接口),毕竟一线连,比 HDMI 接线简单,但随着新版系统也支持树莓派 DSI 屏,由此除了价格便无更多优势。不过未来可能会升级 DSI 屏。注意此 FPC 排线的规格是:9P 1.0 间距 反向,长度选择 15cm 及以上。

2.1.1 启用 TFT35_SPI 屏

修改 /boot 内的配置文件,可以在上文烧录好 eMMC 系统后使用 UMS 模式直接修改

  • system.cfg,使能 TFT35_SPI,并设置网络
    • hostname
    • TimeZone
    • ks_src=‘FBTFT’
    • WIFI_SSID
    • WIFI_PASSWD
  • armbianEnv.txt,启用 spi 屏,设置屏幕旋转
    • overlays=tft35_spi
    • rotation

注意:

  1. ks_rotation 无法影响 tft35_spi,需要在 armbianEnv.txt 修改

2.1.2 SPI 屏翻转+触摸校准

由于我要翻转显示使用,但是不想重新布线,物理调整方向,则需要修改上文提到的 armbianEnv.txt 中的 spi rotation 参数,改为旋转 180 度。

除此之外我们发现触摸不正确,需要进行校准,步骤如下:

# https://bttwiki.com/libinput_calibration.html#install-xinput_calibrator
sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
sudo sed -i 's|security.debian.org|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
sudo sed -i 's|apt.armbian.com|mirrors.ustc.edu.cn/armbian|g' /etc/apt/sources.list.d/armbian.sources
sudo sed -i 's|github|cors.isteed.cc/https://github|g' /etc/apt/sources.list.d/armbian-config.sources

sudo rm /etc/pip.conf > /dev/null 2>&1
mkdir -p $HOME/.config/pip
cat << _EOF_ > $HOME/.config/pip/pip.conf
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
# index-url=https://mirrors.aliyun.com/pypi/simple/
# extra-index-url=https://www.piwheels.org/simple
timeout = 600
_EOF_

gh_proxy=cors.isteed.cc
cat << _EOF_ > $HOME/.gitconfig
[url "https://${gh_proxy}/https://github.com/"]
#[url "https://hub.0z.gs/"]
        insteadOf = https://github.com/
_EOF_

sudo apt update
sudo apt install xinput-calibrator fonts-wqy-zenhei
DISPLAY=:0 xinput_calibrator --list
DISPLAY=:0 xinput_calibrator -v --device <id>

# 创建 libinput 坐标转换脚本

cat << _EOF_ > $HOME/libinput_calibrator.sh
#!/bin/bash

#according to https://wiki.archlinux.org/title/Talk:Calibrating_Touchscreen#Libinput%5Fbreaks%5Fxinput%5Fcalibrator

screen_width=$1
screen_height=$2
click_0_X=$3
click_0_Y=$4
click_3_X=$5
click_3_Y=$6

re='^[0-9]+$'
if ! [[ $screen_width =~ $re ]] ; then
  echo "error: screen_width=\"$screen_width\" Not a number" >&2; exit 1
fi
if ! [[ $screen_height =~ $re ]] ; then
  echo "error: screen_height=\"$screen_height\" Not a number" >&2; exit 1
fi
if ! [[ $click_0_X =~ $re ]] ; then
  echo "error: click_0_X=\"$click_0_X\" Not a number" >&2; exit 1
fi
if ! [[ $click_0_Y =~ $re ]] ; then
  echo "error: click_0_Y=\"$click_0_Y\" Not a number" >&2; exit 1
fi
if ! [[ $click_3_X =~ $re ]] ; then
  echo "error: click_3_X=\"$click_3_X\" Not a number" >&2; exit 1
fi
if ! [[ $click_3_Y =~ $re ]] ; then
  echo "error: click_3_Y=\"$click_3_Y\" Not a number" >&2; exit 1
fi

#a = (screen_width * 6 / 8) / (click_3_X - click_0_X)
#c = ((screen_width / 8) - (a * click_0_X)) / screen_width
#e = (screen_height * 6 / 8) / (click_3_Y - click_0_Y)
#f = ((screen_height / 8) - (e * click_0_Y)) / screen_height

a=$(awk "BEGIN { printf(\"%.6f\", ($screen_width * 6 / 8) / ($click_3_X - $click_0_X))}")
c=$(awk "BEGIN { printf(\"%.6f\", (($screen_width / 8) - ($a * $click_0_X)) / $screen_width)}")
e=$(awk "BEGIN { printf(\"%.6f\", ($screen_height * 6 / 8) / ($click_3_Y - $click_0_Y))}")
f=$(awk "BEGIN { printf(\"%.6f\", (($screen_height / 8) - ($e * $click_0_Y)) / $screen_height)}")

CONFIG_OPTION="Option \"CalibrationMatrix\" "
CONFIG_LINE="\"$a 0.000000 $c 0.000000 $e $f 0.000000 0.000000 1.000000\""

echo "${CONFIG_OPTION}${CONFIG_LINE}"
echo ""

CONFIG_OPTION="Option \"CalibrationMatrix\" "
CONFIG="/usr/share/X11/xorg.conf.d/40-libinput.conf"
INPUT_CLASS="Identifier \"libinput touchscreen catchall\""
if [ -e "${CONFIG}" ]; then
    ks_restart=0
    grep -e "^\        ${CONFIG_OPTION}${CONFIG_LINE}" ${CONFIG} > /dev/null
    STATUS=$?
    if [ $STATUS -eq 1 ]; then
        sudo sed -i "/${CONFIG_OPTION}/d" ${CONFIG}
        sudo sed -i "/${INPUT_CLASS}/a\        ${CONFIG_OPTION}${CONFIG_LINE}" ${CONFIG}
        echo "Written to file:"
        echo "    ${CONFIG}"
        echo ""
        ks_restart=1
    fi

    # restart KlipperScreen
    if [ ${ks_restart} -eq 1 ];then
        sudo service KlipperScreen restart
    fi

    echo "run:"
    echo "    DISPLAY=:0 xinput list-props <device>"
    echo "to check if the calibration parameters are effective"
    echo ""
fi
_EOF_
chmod +x libinput_calibrator.sh
# 执行坐标转换并自动生效
sudo ./libinput_calibrator.sh 480 320 <click_0 X> <click_0 Y> <click_3 X> <click_3 Y>

# 重启 KlipperScreen 验证
sudo systemctl restart KlipperScreen

2.2 HDMI 屏幕启用 GPU 直接渲染

SPI 屏幕使用 CPU 进行软件渲染,无 GPU 加速,所以界面渲染会增加 CPU 负载。但是 HDMI 和 DSI 屏幕是可以使用 GPU 直接渲染 KlipperScreen 图形界面,但是系统默认没有启用,需要进行如下设置:

# 1. 查看显卡
cat /sys/class/drm/card*/device/modalias
of:NnpuT(null)Crockchip,rk3568-rknpuCrockchip,rknpu
of:NgpuT(null)Carm,mali-bifrost

# 2. 安装驱动
sudo apt install mesa-utils libgl1-mesa-dri

# 3. 检查内核模块
lsmod | grep panfrost

# 4. 验证是否启用 GPU 直接渲染图形界面
DISPLAY=:0 glxinfo | grep -i "renderer\|vendor"
## 或者
DISPLAY=:0 screenfetch
## 显示 GPU: llvmpipe (LLVM 15.0.6, 128 bits) 则代表占用 CPU 进行软件渲染
## 显示 OpenGL renderer string: Mali-G52 r1 (Panfrost) 则代表使用硬件渲染

# 5. 日志查看
less /var/log/Xorg.0.log

# 6. 启用 GPU 硬件渲染并重启 KlipperScreen 生效。【SPI 屏不要使用,会导致 KScreen 无法启动】
sudo tee /etc/X11/xorg.conf.d/20-panfrost.conf > /dev/null <<EOF
Section "Device"
    Identifier "Panfrost"
    Driver "modesetting"
EndSection
EOF
sudo systemctl restart KlipperScreen.service
  • 注意 Manta M8P v2,overlays 选 HDMI-1,插 HDMI-0 接口

2.3 使用树莓派 DSI 屏

新版系统支持树莓派 DSI 屏,正好手头有一块,插电开机后,屏幕显示几秒后会背光熄灭(evtest 可以看到触摸正常),dmesg 及 sudo less /sys/kernel/debug/regulator/regulator_summary 可以看到 tcs4525/tc358762-power 负责背光的电源关闭了,应该和 /boot/dtb/rockchip/rk3566-bigtreetech-cb2-2.dtb 有关,具体已反馈工程师。

三、使用 ffmpeg-rkmpp 实现硬件编解码

大家使用 timelapse 组件时,大多数情况是使用 CPU 来渲染生成视频,速度慢且占用大量 CPU 资源。目前常用的支持硬件编解码的手段为 x86 的 vaapi、树莓派的 h264_v4l2m2m、Rockchip 的 rkmpp。

参考相关文档:https://github.com/nyanmisaka/ffmpeg-rockchip/wiki/Compilation,需要先后编译组件

# 编译 rkmpp/rkrga/ffmpeg-rkmpp(略,看上面文档链接)
# 渲染视频测试
time ffmpeg -r 25 -i /home/biqu/pics/printer/frame%6d.jpg -c:v h264_rkmpp -pix_fmt yuv420p -b:v 2M hardware_h264.mp4
time ffmpeg -r 25 -i /home/biqu/pics/printer/frame%6d.jpg -c:v hevc_rkmpp -pix_fmt yuv420p -b:v 2M hardware_hevc.mp4
time ffmpeg -r 25 -i /home/biqu/pics/printer/frame%6d.jpg  -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p soft.mp4

默认未编译 libx264,因此无法使用 CPU 来渲染视频,当前场景下也不需要,如果想要支持此功能,可以编译 ffmpeg 时添加 --enable-libx264 来启用。

【推荐】直接下载预编译好的 ffmepg-rkmpp

由于想要启用 rkmpp 需要使用 rockchip 官方的内核,最新的是 6.1,所以我们也可以下载预编译的 ffmpeg-rkmpp deb 包,地址如下:

https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases
由于 ffmpeg 编译需要很长时间,这种预编译的包无疑非常棒。

四、使能 timelapse 组件支持硬件加速

组件地址:https://github.com/mainsail-crew/moonraker-timelapse,此组件不再更新,但是很多 PR 很有意思,可以关注。

也可以关注 https://useful-forks.github.io/?repo=mainsail-crew/moonraker-timelapse,如

  1. 支持树莓派硬件加速
  2. 支持手机 BeamKlipper
  3. 支持 gphoto2 控制协议
  4. 支持多种相机控制协议 (DSLR, Sony HDR, ...)

这里我参考第一个链接,支持自定义参数配置,默认使用 libx264。同时修改配置文件。

$ diff timelapse.py timelapse_ori.py
90d89
<             'vcodec': "libx264",
691c690
<                 + " -vcodec " + self.config['vcodec'] \
---
>                 + " -vcodec libx264" \

# 修改 moonraker.cfg, 指定编码器
[timelapse]
## x86
# vcodec: h264_vaapi
# extraoutputparams: -vaapi_device /dev/dri/renderD128 -vf 'format=nv12,hwupload'

## Rockchip rkmpp, 支持 h264 或 h265(hevc)
vcodec: hevc_rkmpp
extraoutputparams: -r 30 -pix_fmt yuv420p -b:v 2M
# 720p 2M, 1080p 4~8M
# -vf format=yuv420p 取代

注意:

  • 如果视频主要用于社交媒体分享,YUV420P通常是一个不错的选择,因为它在压缩和质量之间取得了良好的平衡。
  • 如果视频用于专业展示或分析,可能需要选择YUV422P或RGB24,以确保更高的色彩精度和细节。
  • 更多 Rockchip 硬件加速和视频格式支持情况的信息,可以关注 Jellyfin 官方文档

总结

本来想写 go2rtc 调用 ffmpeg-rkmpp 的内容,留在摄像头文章里吧,还要再学习学习。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail