首页 > 其他分享 >玩转创想三维 K1 系列主板之二:编译 MCU 固件,恢复裁剪组件

玩转创想三维 K1 系列主板之二:编译 MCU 固件,恢复裁剪组件

时间:2024-05-14 13:19:45浏览次数:37  
标签:创想 编译 Klipper defconfig klipper K1 MCU mcu0

前言

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

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

本文是摸索创想三维 K1 系列软硬件系统的一些内容分享。最近创想三维的工作人员联系了我,希望接下来能加快网卡直连方案的进度。

我的外挂上位机方案之一是直接让外挂上位机通过 RS232 通讯接口连接 Nozzle_MCU (以下简称 Nmcu) 和 Levelling MCU (以下简称 Lmcu)。一般使用 USB 转 RS232 模块,当然最简便的方案是使用板载支持 RS232 通讯的 Arm 开发板,还真让我找到了(当然还有调整设备树启用此功能的问题,此处按下不表),然而这块开发板的稳定通讯波特率不超过 2M,而 K1 默认使用 230400,所以我们需要重新烧录 Nmcu 和 Lmcu 的固件,通讯波特率调整为标准的 115200,同时由于这两者通讯数据量不大,115200 理论上满足我们的需求。

我们约定,直接控制打印机硬件的部分称为主板,运行 Linux 系统的部分称为上位机。

image-20240514111454676

软硬件测试环境:

  1. K1Max Mainboard with CrealityOS
  2. RK3399 Develoboard with Ubuntu 22.04

本文涉及的内容:

  1. 如何为打印机主板编译固件
  2. 如何解决编译过程中遇到的问题
  3. 如何补齐裁剪掉的 Klipper 功能

1、Klipper for K1 相关资料

创想三维系列的修改版 Klipper(以下简称 CK)做了大量改动,但是由于并不是 fork 原版 Klipper,而是直接新建仓库,导致我们无法直观看到改动记录。好在第三方 commit 可以看到:

2、编译自定义 MCU 固件

我们先看一下三块微控制器参数:

  1. mcu0:主控制器,控制 XYZ 步进电机、风扇等,GD32F303RET6
  2. Nozzle_mcu:热端工具板,GD32F303CBT6
  3. Leveling_mcu:热床下的调平工具板,GD32E230F8P6

在此之前我们看下 CK 相关固件编译说明:

  • 预编译固件:fw/K1
  • 编译选项及烧录选项:src/gd32/Makefile
    • 其中提到的通过调用 flash_usb 烧录不成功,应该是没有注释掉此内容
    • 其中有 # at32f40x build rules 字样,推测 GD32 的编译选项部分参考了 at32f40x,参考:maphex/klipper
  • 主板编译预配置编译选项:src/configs/
    • K1_mcu0_110_G32_defconfig
    • K1_mcu0_110_S40_defconfig | STM32F40x
    • K1_mcu0_120_G32_defconfig
    • K1_noz0_110_S06_defconfig
    • K1_noz0_110_G30_defconfig
    • K1_noz0_120_G30_defconfig
    • K1_bed0_100_G21_defconfig
    • K1_bed0_110_G21_defconfig
    • Kconfig

2.1 示例:编译 mcu0 主板固件

由于 CrealityOS 和 K1 系列主板为 MIPS 架构的 CPU,不支持 Arm Cortex 处理器的编译工具链,我们只能选择在 外挂上位机(x86_64或arm)上安装 gcc-arm-none-eabi 工具包。所以 CrealityOS 中没有 src 目录,不能安装编译工具链也无法编译 Klipper 固件。

通过之前的 mcu_util 得知 mcu0 软硬件版本号为:mcu0_120_G32-mcu0_004_000

image-20240514122254968

由于社区版默认没有 GD32 的预设(虽然理论上 STM32 也能用)。这里我们选择 CK 代码进行编译。使用预配置文件:K1_mcu0_120_G32_defconfig。

image-20240514122131755

## 克隆 CK 项目仓库
cd && git clone https://github.com/CrealityOfficial~/K1_Series_Klipper && cd ~/K1_Series_Klipper

## 复制预配置编译选项文件
cp src/configs/K1_mcu0_120_G32_defconfig .config

## 降级 gcc-arm-none-eabi 软件源到版本 10 以下以正确编译 prtouch_v2.o (压力调平),本文使用 Ubuntu 22.04
sudo tee /etc/apt/sources.list.d/gcc-arm-none-eabi-focal.list << _EOF_
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main universe #multiverse restricted
_EOF_

sudo tee /etc/apt/preferences.d/gcc-arm-none-eabi-focal << _EOF_
Package: gcc-arm-none-eabi binutils-arm-none-eabi libc6 libgcc-s1 libgmp10 libisl22 libmpc3 libmpfr6 libstdc++6 zlib1g
Pin: release n=focal
Pin-Priority: 1001
_EOF_

## 降级 gcc-arm-none-eabi 和 binutils-arm-none-eabi,并确认 arm-none-eabi-gcc 版本
sudo apt update
# apt-cache policy gcc-arm-none-eabi
# apt-cache show gcc-arm-none-eabi
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi # 降级工具链 9+2.34
arm-none-eabi-gcc --version

# 添加额外的软件包支持固件 crc 检校
sudo apt install srecord

# 调整波特率为 115200,编译 mcu0 固件
make menuconfig
make

# 使用 mcu_util 更新固件
# 修改 printer.cfg 内的 [mcu] buad 为 115200 并保存
# 测试新版固件正确启动并生效
/usr/share/klippy-env/bin/python /usr/share/klipper/klippy/klippy.py /usr/data/printer_data/config/printer.cfg

image-20240514122634286

2.2 报错信息及解决:

报错 1:lto1: fatal error: bytecode stream in file 'out/src/prtouch_v2.o' generated with GCC compiler older than 10.0

原因:需要使用旧版 GCC 编译 prtouch_v2

解决方法(和修复 Klipper AVR 编译工具链方法相同):

  1. https://pkgs.org/ 搜索 gcc-arm-none-eabi
  2. 找到 https://ubuntu.pkgs.org/20.04/ubuntu-universe-amd64/gcc-arm-none-eabi_9-2019-q4-0ubuntu1_amd64.deb.html
  3. 找到 Requires 全部添加到下述 APT Preferences 中

报错 2:make: srec_cat: No such file or directory

原因及解决方法:相比原版 Klipper 增加了 CRC 检校功能,需要安装额外的软件包:srecord

3、使用社区版 K1-Klipper 连接 K1

我们测试,没有版本检校,klipper官方会提醒升级固件。社区版自带示例并不会编译进 prtouch_v2.o ,因为此功能仅 Lmcu 需要,所以不会报错。

#####################################################################
# 外挂上位机 
#####################################################################
# 使用社区版 K1-Klipper
# 不要用 install-ubuntu22.04 脚本,service 路径不对
# 也可以使用 kiauh 自定义 repo 方式安装,方法如下:
# cp ~/kiauh/klipper_repos.txt.example ~/kiauh/klipper_repos.txt
# echo "K1-Klipper/klipper,master" >> ~/kiauh/klipper_repos.txt

# 删除或重命名原版 Klipper
mv ~/klipper ~/klipper.old
# rm -rf ~/klipper
git clone https://github.com/K1-Klipper/klipper ~/klipper

# 重新编译 c_helper.so,默认的为 MIPS 架构会报错
rm ~/klipper/klippy/chelper/c_helper.so
cd ~/klipper/klippy/chelper/ && make

# 拷贝 K1 原厂 printer.cfg 并修改为本地串口设备号

注意:修改通讯波特率,也要修改串口转发设置中的波特率,如 socat 或者 ser2net。

4、Bonus:Creality Klipper 添加裁剪掉的功能组件

此处适用使用 CK 而非社区版 K1-Klipper 的场景,因为后者没有进行裁剪。

前面说过,CK 基于 exclude_object: Don't use gcmd.respond_error() (#6407) 这次提交进行修改开发(网址中可以看到长哈希为 ea2f6bc0f544132738c7f052ffcc586fa884a19a,短哈希为 ea2f6bc,后面会用到),为了保证兼容性,可以直接从此次 commit 或者临近的 commit 扒文件拷贝到 CK 中,以舵机支持为例:

# 克隆官方 Klipper 并切换到指定 commit
git clone https://github.com/Klipper3d/klipper /usr/data/klipper-basement && cd /usr/data/klipper-basement
git checkout ea2f6bc
# 确认当前所在版本
git log
# 如果是在外挂上位机,也可以使用之前备份的 klipper.old,必要时切换回最新 commit

# 拷贝 klippy/extras/servo.py 到 CK 对应目录即可
cp /usr/data/klipper-basement/klippy/extras/servo.py /usr/share/klipper/klippy/extras/servo.py

注意:如果想要添加新版功能,可以先尝试直接拷贝对应组件,如果报错可能需要结合 commit history 以及源码进行修改才能使用。

标签:创想,编译,Klipper,defconfig,klipper,K1,MCU,mcu0
From: https://www.cnblogs.com/sjqlwy/p/18191111/k1_compile_fw

相关文章

  • 【坑】严重性 代码 说明 项目 文件 行 禁止显示状态 错误 NETSDK1141 无法解析位于 E:
    错误严重性代码说明项目文件行禁止显示状态错误NETSDK1141无法解析位于E:\firefox\WPF-Samples-main\WPF-Samples-main\global.json的global.json中指定的.NETSDK版本。DragDropObjectsC:\ProgramFiles\dotnet\sdk\8.0.202\Sdks\Microsoft.NET.Sdk\targets\M......
  • AIX7100-安装JDK1.8
    上传java8_64.zip解压java8_64.zip链接:https://pan.baidu.com/s/1ALnhiXLkDWbbhyfCf8djVQ?pwd=hz28提取码:hz28#cd/usr/local/#unzipjava8_64.zip#vi/etc/profile#find/usr/local/java8_64-name"java"-typef/usr/local/java8_64/jre/bin/java"......
  • NewStarCTF 2023 week1 writeup
    NewStarCTF2023week1writeup花了几天时间,终于把week1的题目做完了,还是学到不少东西的,题目质量大多都挺高的,很适合新手入门。Web1.泄漏的秘密url/robots.txt查看robots协议,找到第一部分的flagPARTONE:flag{r0bots_1s_s0_us3fulurl/www.zip查看网站备份,找到第二部分的fla......
  • 嵌入式中MCU和SOC的区别
    MCU微控制单元微控制单元(MicrocontrollerUnit;MCU),又称单片微型计算机(SingleChipMicrocomputer)或者单片机,是把中央处理器(CentralProcessUnit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合......
  • dasctf2024 week1复现
    复现题目.web1234开局源码泄露www.zipindex.php<?phperror_reporting(0);include"class.php";$Config=unserialize(file_get_contents("/tmp/Config"));foreach($_POSTas$key=>$value){if(!is_array($value)){$param[$key]=ad......
  • JDK8和JDK17共存以及切换的方法
    1、先安装"jdk-8u381-windows-x64.exe",再安装"jdk-17_windows-x64_bin.exe"2、"系统属性"-"高级"-"环境变量"-"系统变量"-"Path"-"编辑",删除以下2条C:\ProgramFiles\CommonFiles\Oracle\Java\javapathC:\Pro......
  • Windows下从JDK1.8切换安装JDK11不生效
    Windows下安装JDK11是没问题的试了好几遍心态有点崩,试着把path的%JAVA_HOME%\bin移到最上层然后Java-version就可以了可能是配置好JDK1.8之后它会自动生成一个环境变量,此环境变量优先级较高导致在切换到JDK11后系统会先读取到JDK1.8生成环境变量而不会读取到JDK11的环......
  • (中文规格)FPGA - 现场可编程门阵列: XC7S15-1CPGA196I、LCMXO3L-4300C-5BG256C,FS32K142
    1、XC7S15-1CPGA196I  Spartan®-7现场可编程门阵列产品种类:FPGA-现场可编程门阵列系列:XC7S15逻辑元件数量:12800LE自适应逻辑模块-ALM:2000ALM嵌入式内存:360kbit输入/输出端数量:100I/O电源电压-最小:950mV电源电压-最大:1.05V最小工作温度:-40°C最大工作温度:+100°C数......
  • jdk17对比jdk8
    Lambda表达式/***Lambda表达式*/privatestaticvoidlambda(){//JDK8List<Integer>list=Arrays.asList(1,2,3,4,5);list.forEach(n->System.out.println(n));//JDK17List<Integer&g......
  • 车用MCU,R7F701320EAFP、R7F701321EAFP、R7F701322EAFP、R7F701323EAFP微控制器功耗低,
    RH850/P1M——适用于底盘系统的汽车用微控制器简介RH850/P1M微控制器功耗低,闪存容量高达2MB,RAM容量高达128KB,具有增强型电机控制定时器、CAN接口、SENT和PSI5等传感器数字接口以及锁定CPU、ECC、BIST(内置自检)和ECM(错误控制模块)等安全功能,适用于底盘系统。此外,仅2......