2021-11-26 03:22:47 [显示全部楼层]
20777浏览
查看: 20777|回复: 6

[教程] 跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3

[复制链接]

番外二:使用 UART 接口连接主板通讯

参考文档:https://klipper.wiki/index.php/UART

除了使用传统的USB数据线连接上位机,我们还可以使用UART,它支持所有主板。

通过UART连接的优点是:

  • 机身面板上没有数据线(封在电源仓内的除外)
  • 可以连接没有 USB 接口的设备
  • 方便刷写升级 STM32 设备固件和引导
  • 对于没有 USB 主板供电选择开关的设备,可以避免 USB 5v 和主板24v供电混合

缺点:

  • 需要 GPIO 引脚进行连接,这在 x86 计算机和笔记本电脑上是不可能的
  • 需要额外配置单板计算机
  • 无法访问 DFU,这在某些情况下导致无法在没有 SD 卡的情况下重新刷新电路板

大多数开发板以及部分电视盒子拥有 UART 接口可以直接使用,而树莓派比较特殊,所以单独叙述。

1.1 树莓派

树莓派有一个 miniuart 接口,还有一个全功能 UART 接口。前者有些限制所以不适用于 Klipper,后者有时候被板载的蓝牙模块占用。另外不同版本的树莓派也有差异,具体可以参考 RPi UART 文档

sudo raspi-config
# 【3 Interface Options】 - 【P6 Serial Port】 - 【NO】 - 【Yes】
sudo nano /boot/config.txt
#####################################################
## 在最后添加以下内容
enable_uart=1              # 没有则添加
dtoverlay=disable-bt       # 除 RPi3 的其他版本树莓派
core_freq=250
# dtoverlay=pi3-disable-bt # 树莓派3 特殊设置
#####################################################
## 禁用蓝牙相关服务
sudo systemctl disable hciuart.service
sudo systemctl disable bluetooth.service
## 重启生效
sudo reboot
注意:
  • disable-bt | 关闭蓝牙设备
  • sudo systemctl disable hciuart | 关闭蓝牙服务
  • miniuart-bt | 不要使用该 overlay。设置蓝牙设备使用 mini UART, 但会降低最大可用串口通讯波特率
  • force_turbo=1core_freq=250 | 设置 VPU 核心时钟来固定频率

对应的配置文件如下:

# printer.cfg
[mcu] # 通过 ls /dev/ttyAMA* 来确定
serial: /dev/ttyAMA0
restart_method: command

# [mcu 2ndMCU] # 设置第2个MCU
# serial: /dev/ttyAMA0
# restart_method: command

接线方式:

树莓派 GND(Pin6/9) GPIO14(TX,Pin8) GPIO15(RX,Pin10) GPIO26(Pin37)* 3.3v(Pin1)*
MCU GND RX TX boot0 3.3v
注意:
  1. 使用前3个引脚即可以通讯
  2. 后2个标记星号的为可选,用于刷写引导和固件。GPIO26 也可以换成其他未使用的引脚。

1.2 香橙派等其他设备

这些设备一般拥有独立的调试串口和额外 UART ,具体请参考其手册,使用调试串口需要关闭终端和内核信息输出功能。采用传统的接线方式即可。

以 Armbian 为例,修改 /boot/armbianEnv.txt 并添加对应的 overlays 。它们的设备好可以通过 ls /dev/ttyS* 查看。

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图1

【MKS Robin Nano v1.2 接线示意图】 请注意,有些主板的 UART 接口用于连接 WiFi模块后者其他设备。

番外三:不需要 microSD 卡的线刷模式

目前大多数32位主板需要通过拷贝固件到 SD卡刷来更新固件。那么有没有办法不用每次升级时要打开盖子插拔SD卡呢?

1. 官方伪线刷方法(SD updates)

Klipper 提供了一种伪线刷的方式,具体可以参考官方文档 SDCard updates,目前支持的主板可以通过 ~/klipper/scripts/flash-sdcard.sh -l 进行查询。kiauh 助手默认支持这种方式,但是需要插一张 SD 卡在主板上。

  • 此方法仅适用于固件升级,你仍然需要通过传统方式安装 Klipper 固件
  • 此方法仅适用于 SPI 接口的 SD 卡插槽,不支持 SDIO 接口(例如 Flyboard 以及 MKS Robin Nano V1/V2 等)

2. 新的线刷方法

在上面学习为STM32烧录引导和固件的过程中,我们联想到将树莓派的 GPIO引脚与最小系统的 BOOT0 引脚连接,即可以通过网页控制,切换MCU的boot0状态,闭合为高电平(ISP烧录模式),断开为低电平(正常运行模式),从而实现不需要microSD卡的固件线刷。

  • 此方法可以用于 Klipper 固件首次烧录、升级,以及 bootloader 烧录
  • 此方法不需要额外的 microSD 卡
  • 【结论】STM32F103 和 STM32F4 都测试成功

是否可行,我们验证一下。此外,由于 Klipper 包括上位机和下位机才能运行和读写引脚,所以我们不能在 printer.cfg 里面进行设置,这里使用 moonraker 进行控制。

# moonraker.cfg
[power boot0]
type: gpio
pin: gpiochip0/gpio26 # 根据喜好和实际情况设置,用于输出设置 `boot0` 的高/低电平,需要共地
off_when_shutdown: True
initial_state: off

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图2

2.1 UART 模式通讯

此种模式除了 boot0 线之外,需要额外的三根线连接:GND、Rx、Tx。

此种方式适用于引出 boot0 的设备,比如 monster8 主板,否则无法使用,比如 boot0 接地的 robin nano v2

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图3

  • 此时选择 No bootloader ,并且会覆盖之前烧录的 stm32duino bootloader
  • 晶振频率请根据实际情况选择,可以在原理图上找到,我这里是 8 MHz
  • 通讯端口我这里选择 USART1 Serial ,对应引脚为 PA10(Rx)和 PA9(Tx),也可以选择其他 UART 引脚
  • 一定要确认通讯过程中良好接线

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图4

# 点击右上角 power,闭合开关使 boot0 为高信号,断开并重新给主板上电,使其进入 ISP 烧录模式
# 查看设备信息
sudo stm32flash /dev/ttyAMA0
# 刷入固件
sudo stm32flash -w ~/klipper/out/klipper.bin -v -g 0 /dev/ttyAMA0
# 刷入 bootloader,这里不需要,会被覆盖
# sudo stm32flash -w generic_boot20_pc13.bin -v -g 0 /dev/ttyAMA0 

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图5

2.2 USB 模式通讯

此种模式除了 boot0 线之外,需要通过 USB 数据线与树莓派连接。

此种方式由于可以自定义进入 bootloader 的按键,所以不需要引出 boot0 也可以使用。但是需要主板支持使用 SWD 协议刷入引导。话说回来,有些主板既没有引出 boot0,又没有引出 SWD 引脚,SD卡又是通过 SDIO 协议通讯的,这种乖乖用 microSD 卡更新吧,说的就是 MKS Robin Nano v1/v2。

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图6

  • 此时选择 8KiB bootloader ,烧录固件后不会覆盖,板载 LED 灯可以正常指示 bootloader 状态。
  • 晶振根据实际情况选择
  • 通讯接口选择USB,必要时查看原理图确认。
  • 烧录方法和上面一样:sudo dfu-util -d 1eaf:0003 -a 2 -R -D ~/klipper/out/klipper.bin

查理  学徒

发表于 2022-3-10 19:38:48

大佬,问一下mks-robin-nano v1.2 我按你的接线接了之后,klipper连不上打印机(我是cubieboard2,上位机串口是好的,用命令测试可以连接上)。

是打印机刷需要重新编译驱动,选择wifi那里那个UART口么?
回复

使用道具 举报

查理  学徒

发表于 2022-3-10 19:42:01

查理 发表于 2022-3-10 19:38
大佬,问一下mks-robin-nano v1.2 我按你的接线接了之后,klipper连不上打印机(我是cubieboard2,上位机串 ...

【MKS Robin Nano v1.2 接线示意图】 请注意,有些主板的 UART 接口用于连接 WiFi模块或者其他设备。
MKS Robin Nano v1.2这个UART就是接wifi模块的啊,是不可以用么?

回复

使用道具 举报

pATAq  版主
 楼主|

发表于 2022-3-11 15:37:42

查理 发表于 2022-3-10 19:42
【MKS Robin Nano v1.2 接线示意图】 请注意,有些主板的 UART 接口用于连接 WiFi模块或者其他设备。
MKS  ...

固件编译选项,接线示意图看看
回复

使用道具 举报

查理  学徒

发表于 2022-3-11 18:56:26

pATAq 发表于 2022-3-11 15:37
固件编译选项,接线示意图看看

主板就是mks robin nano v1.2,上位机是cubieboard,看情况uart应该是打开了,接线是对应的4跟都接了,rx对接tx。

跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图1跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图2跟着思兼学习Klipper(03-3)番外23-UART通讯设置与stm32线刷方法|3图3

回复

使用道具 举报

pATAq  版主
 楼主|

发表于 2022-3-11 22:21:43

查理 发表于 2022-3-11 18:56
主板就是mks robin nano v1.2,上位机是cubieboard,看情况uart应该是打开了,接线是对应的4跟都接了,rx ...

我们来确认一下:
1. 使用上位机烧录固件后,通过 update_mks_robin.py 工具修正 bootloader 固件偏移,然后 SD 卡刷入主板。
2. 使用主板WiFi模块插槽的 Rx、Tx、GND 三个引脚通讯,连接上位机的串口,主板通过独立供电。

DEBUG:
1. 编译固件选择主板USB接口通讯(USB串口芯片-PB10、PB11)进行测试,USB方口线连接上位机
2. 单独的USB-TTL模块连接WiFi串口

回复

使用道具 举报

查理  学徒

发表于 2022-3-12 20:28:42

pATAq 发表于 2022-3-11 22:21
我们来确认一下:
1. 使用上位机烧录固件后,通过 update_mks_robin.py 工具修正 bootloader 固件偏移, ...

还是老样子,连接不上。日志提示串口超时。

连接主板usb通讯正常的。

等串口转usb模块到了我再试试吧,谢谢大佬。
漏一个usb线在打印机外面也不是不可以忍受。。。
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail