思兼的 Fly-Gemini 硬件简明使用手册(探索版 v1.2)前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。 请访问 原文链接 以获得文章更新。 这篇为什么叫探索版呢,其实就是自己使用过程中记录的流水账,是 发现问题 - 查阅探索 - 找到答案 的过程,对于大多数人来说,可能看一下结论就可以了。 本文中我们约定,运行 Linux 的部分称为 MPU,运行 Klipper 固件的部分称为 MCU。关于主板方向,以驱动朝上为正。 本手册内容比较繁杂,尽量先简介开机上电运行 Klipper 的整个理想流程,然后再对于具体细节做介绍。 最重要的是请先阅读官方说明书,除了部分内容我觉得可以补充的,其余就不再赘述。 【2021年12月19日更新】 修正 adxl345 CS 引脚,优化关机按钮修复脚本路径 更正:MCU 部分引脚是 5V tolerant ,在手册中Pinouts and pin description 部分可以看到,FT = 5V tolerant, TT = 3.6V tolerant,参考。 补充:对于 MPU 部分,有说 AW 的 SoC UART 引脚支持 5v,有说仅 Rx 支持 5v,反正不要接 5v 输入脚最好。
【2021年12月21日更新】 增加代码行号显示,便于新手理解。 MCU 部分 MCP2542 CAN收发器暂时不可用。 MPU 的引脚电平为 3.3v,其 SPI 接口可用于连接 ADXL345 加速度计(内置电压转换电路,可以使用 5v/3.3v 供电),查看原理图和手册可知,其信号电平 3.3v,所以可以正常连接 MPU 引脚。 也因此我们知道,ADXL345 加速度计模块不要直接接在 Arduino Nano 等 8位 MCU 上使用,其信号电平为 5v,仅是 MCU 接收信号时可以使用,但是交互时有可能损坏 ADXL345 模块,需要进行电平转换。参考 ADXL345 Hookup Guide 。

【2021年12月26日更新】 内容介绍主板的一些情况与问题全部信号引脚均为 3.3V 电平,实际略低,输出电流较小,不适合大负载。 MPU 和 MCU 供电是一起的,无法独立使用。注意 MPU 运行 Linux,相当于一台电脑,不要频繁强制断电,会损坏系统及硬件。 USB-OTG 为以太网接口旁边上方的 USB0 接口,需要拉高 USB ID 引脚,并启用 usbhost0 overlay。 原理图 SPI 端子座引脚顺序(5v-GND-I2C)与主板丝印顺序(5v-IO-GND)冲突,原理图正确。 I2C 的数据脚和时钟脚分在两个端子座上,应该是 I2C1,如是则 overlay 启用错误。 Core FAN 引脚为 左(-)右(+)和有的风扇的线序相反(比如我的)。此外,此引脚输出为最大为 3.3v 不到,带不动5v风扇,建议接常开风扇
如果使用 MKS 屏幕,其 EXP1 和 EXP2 开口方向与此主板相反,使用屏幕建议购买各主板的配套设备,否则注意线序进行必要修改。
3D打印机控制主板介绍">0、Fly-Gemini 3D打印机控制主板介绍Fly-Gemini(以下简称 Gemini)是 Fly3D(Mellow)新推出的将 MPU 和 MCU 整合到一起的新 3D打印机主板,支持 Klipper 与 RRF 固件,尤其是对于 Klipper 这种需要上位机进行计算的新固件意义重大,由于比较新颖,优点和缺点皆有之。 硬件规格: MPU:Allwinner H5 4 核 | linux-sunxi.org 内存:512MB GPU:Mali450 USB 2.0 × 3,USB 2.0 OTG × 1 UART × 3,SPI × 2(引脚复用) microHDMI × 1(注意区分 miniHDMI) 100Mbps Ethernet MCU:STM32F405RGT6 其他特性: 支持 CAN模块 支持 ST-Link 调试 支持一路 MPU 可控风扇


1、理想使用流程为了防止劝退新手,先把基本剧本顺一遍,走一遍流程。 
【部分接口分布图】有些是我参考主板原理图和测试出来的。 1.1 供电主板 MPU 和 MCU 是同时供电的,无法独立供电,方式包括 MPU Type-C 、MCU Type-C 、端子 三种方式。和树莓派一样,由于 GPIO 区域的引脚一般不存在保护电路,我不推荐通过引脚反向供电的方式(Fysetc Spider 支持该选项),除非你能保证反向供电的电压电流总是稳定可靠。 
主板启动过程最大电流约 0.5A(MPUType-C供电,无线网连接状态) MPU 信号电平为 3.3v
1.2 烧录系统镜像从官方QQ群或者 GoogleDrive 下载系统镜像,文件名:FLY-Gemini_Armbian_21_12_8_server.img.xz 。 下载并打开系统烧录工具:USBImager(100+ KB) 或者 balenaEtcher(100+ MB) ,这里以更轻巧的 USBImager 为例。 插入 microSD 卡(8GB 以上即可),如果烧录失败可以先使用 SDFormatter 格式化

将 SD 卡插入 MPU 的 SD 卡插槽,MPU Type-C 另一头连接到电脑,根据官方文档操作即可。远程管理工具以免费强大的 MobaXterm 为例。
1.3 Armbian 优化设置与常见问题解决(重要)粗看了一眼官方系统,有些地方需要优化,同时还有一些常见问题没有解决。 复制代码 隐藏代码
#!/bin/bash#////////////////////////////////////# Armbian Setting Up for Klipper Script## Created by 思兼 / sjqlwy# 1. 根据个人习惯,添加名为 pi 的用户# adduser --gecos GECOS --add_extra_groups pi# su pi# 2. armbian-config 会访问 github.com 测试网络连接,改为 baidu.comsudo sed -i 's/http:\/\/github.com/https:\/\/baidu.com/g' $(which armbian-config)
sudo apt-mark showhold
armbian-bsp-cli-orangepipcplus
armbian-config
armbian-firmware
linux-dtb-legacy-sunxi
linux-image-legacy-sunxi
linux-u-boot-orangepipcplus-current
https://www.jianshu.com/p/f284bc90944f Ubuntu删除多余内核
https://github.com/dotnetcore/FastGithub/
https://github.com/guumaster/hostctl
https://github.com/ineo6/hosts
https://github.com/hunshcn/gh-proxy##mkdir -p $HOME/.config/pip
cat << _EOF_ > $HOME/.config/pip/pip.conf
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple# extra-index-url=https://www.piwheels.org/simpletimeout = 600
_EOF_#git config --list
git config --global --unset url.https://github.com.cnpmjs.org/.insteadof
/usr/lib/arm-linux-gnueabihf/libproxychains.so.3
fd-find# git config --global url."https://hub.fastgit.org/".insteadOf "https://github.com/"git config --global url."https://github.com.cnpmjs.org/".insteadOf "https://github.com/"#sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's|security.debian.org|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
sudo sed -i 's|apt.armbian.com|mirrors.ustc.edu.cn/armbian|g' /etc/apt/sources.list.d/armbian.list
sudo sed -i 's/http:/https:/g' /etc/apt/sources.list
sudo sed -i 's/http:/https:/g' /etc/apt/sources.list.d/*# 10. 设置系统时区sudo timedatectl set-timezone Asia/Shanghai
nmtui# 6. 更新系统软件包sudo apt update #&& sudo apt upgrade -y# 7. 安装必要组件,注意如果使用 Klipper Python3,可以不安装 python-pipsudo apt install -y avahi-daemon python3-pip fonts-wqy-microhei python3-dev # python-pip fonts-wqy-zenhei# 8. 添加常用命令别名echo 'alias lid="ls /dev/serial/by-id/*"' >> ~/.bashrc && source ~/.bashrc
echo 'alias k="~/kiauh/kiauh.sh"' >> ~/.bashrc && source ~/.bashrc# 9. 添加系统环境变量,修复 Fluidd 网页关机/重启功能,修复可能的串口操作权限问题echo 'export PATH="/sbin:/usr/sbin:$PATH"' >> ~/.bashrc && source ~/.bashrc
git clone https://github.com/th33xitus/kiauh
sed -i 's|python2|python3|g' kiauh/scripts/install_klipper.sh
sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER
k
~/moonraker/scripts/sudo_fix.sh# 11. 优化 Fluidd/MJPG-Streamer 配置文件下载链接# sed -i '0,/FLUIDD_DL_URL/{s/FLUIDD_DL_URL/FLUIDD_DL_URL_ORI/}' kiauh/scripts/install_klipper_webui.sh# sed -i '/FLUIDD_DL_URL_ORI/a\\ FLUIDD_DL_URL=${FLUIDD_DL_URL_ORI\/github.com\/download.fastgit.org}' kiauh/scripts/install_klipper_webui.sh# sed -i.bak 's/githubusercontent.com/fastgit.org/g' kiauh/scripts/install_mjpg-streamer.sh# 12. 【可选】切换 Klipper Python3git clone https://github.com/th33xitus/kiauh
sed -i 's|python2|python3|g' kiauh/scripts/install_klipper.sh
cp kiauh/scripts/install_klipper_webui.sh 1.sh
sed "s/FLUIDD_DL_URL/{s_head -1_sed 's/github.com/download.fastgit.org/g'_}/1" 1.sh
nmcli dev wifi connect TP password 65446414 list
nmcli dev wifi connect nww password njjiswang# 修复gpiohost,builtin wifi,优先级# 复原wlan0wlx70f11c577968: flags=4163 mtu 1500
https://blog.csdn.net/weixin_42409052/article/details/113065704
python3-dev 注:【11】可以参考 该方法:FLUIDD_DL_URL=$(curl -s https://api.github.com/repositories/295836951/releases/latest | grep browser_download_url | cut -d'"' -f4 | sed 's/github.com/download.fastgit.org/g') 优化后效果: 支持 Fly-Gemini.local 访问设备 支持输入 lid 命令查看串口设备,k 启动 kiauh 【重要】修复 Fluidd 网页无法使用右上角命令关机/重启 MPU 的问题 加速 git/pypi/apt 下载加速,减少因网络超时导致安装失败等问题 优化 Fluidd 以及摄像头支持包 MJPG-Streamer 配置文件的链接地址,防止下载超时失败 修复环境变量导致的部分命令无法使用的问题 修复可能的权限导致串口设备访问失败的问题 支持切换到 Klipper Python3 运行环境,解决新版本不支持中文名称 Gode 文件的问题,具体请移步 此链接。
此外可以切换使用我 自编译的 Fluidd 开发版本,补全了中文本地化翻译,支持更流畅的摄像头视频流方式。
至此,可以愉快使用 Klipper 了。 1.4 Klipper 配置与启动参考官方文档,为 MCU 刷入 Klipper 固件,参数设置如下图所示。编译成功后,下载 klipper.bin 重命名为 firmware.bin (可选)并拷贝到格式化为 FAT32文件系统 的 microSD 中,插入 MCU SD卡槽 后按下 MCU Reset键 5s 左右,重新把 microSD 卡插入电脑,看到文件重命名为 fly.cur 则代表刷入新固件成功。查看说明书,将拨码开关 3/4 调到 ON 。 
如果想对 Fly-Gemini 进行脱机测试,请至少接入挤出头的温敏电阻。这里附上我写的 Gemini MCU 引脚文件,配合我的 Klipper-Box 项目使用。 复制代码 隐藏代码
[mcu] serial: /dev/serial/by-id/usb-Klipper_stm32f405xx_29002A000450314335393220-if00restart_method: command[temperature_sensor mcu]sensor_type: temperature_mcusensor_mcu: mcu[board_pins]aliases: MOT0_EN=PB2, MOT0_STEP=PC13, MOT0_DIR=PC1, MOT0_UART=PB11, MOT1_EN=PB6, MOT1_STEP=PC14, MOT1_DIR=PC4, MOT1_UART=PB9, MOT2_EN=PB5, MOT2_STEP=PC15, MOT2_DIR=PC5, MOT2_UART=PB8, MOT3_EN=PB4, MOT3_STEP=PC3, MOT3_DIR=PC7, MOT3_UART=PB7, BED_OUT=PA2, HE0=PA0, TB=PC2, T0=PC0, FAN0=PC6, ESTOP0=PA3, ESTOP2=PB1, ESTOP4=PB10, EXP1_1=, EXP1_2=PA4, EXP1_3=PA13, EXP1_4=PA10, EXP1_5=PA9, EXP1_6=PA8, EXP1_7=, EXP1_8=, EXP1_9=, EXP1_10=<5V>, EXP2_1=PB14, EXP2_2=PB13, EXP2_3=PA15, EXP2_4=PB12, EXP2_5=PA14, EXP2_6=PB15, EXP2_7=PB3, EXP2_8=, EXP2_9=, EXP2_10=, BLT_5=, BLT_4=<5V>, BLT_CTL=PB0, BLT_2=, BLT_SNSR=PA1, SWDIO=PA13, SWCLK=PA14, TX1=PA9, RX1=PA10, BOOT1=PB2, USB_CAN_TX=PA12, USB_CAN_RX=PA11 另外附上 Klipper 和 Moonraker 常见问题的解决步骤。 
复制代码 隐藏代码
# 遇到问题请附上 Klippy.log 和 Moonraker.log 文件,点击上图中的按钮即可下载.# 手动执行以下命令,并附上输出截图systemctl status klipper
systemctl status moonraker
/home/fly/moonraker-env/bin/python /home/fly/moonraker/moonraker/moonraker.py -l /home/fly/klipper_logs/moonraker.log -c /home/fly/klipper_config/moonraker.conf 2、正文好,流程走完,我们开始去深入讲讲 Gemini 的硬件。主要分为三部分:MPU、MCU 和两者的通讯手段。 2.1 刷写 MCU BootLoader有些 Gemini 的 MCU 出厂没有刷入 Bootloader(以下简称 BL),导致无法使用 SD 卡刷入固件。我们首先尝试进入 STM32F4 的 USB DFU 模式,发现 MPU Linux 系统使用 lsusb 和 dmesg | tail 命令都无法识别设备。后来发现,不仅没有刷入 Fly BL ,也没有ST官方 DFU BL 。如此想要刷入 BL 或者 Klipper 固件,只能使用 3.3v Serial。具体参考: 加速度计与输入整形器|1、番外23-UART通讯设置与stm32线刷方法|3、USB DFU培训。画张图示意如下: 如图所示,STM32的存储包括只读存储器(ROM)和存取存储器(RAM),后者起始地址为 0x08000000 ,这是基本固定的,可以将 0x08000000 ~ 0x08002000 这 8KB 的空间存放Bootloader 代码。前者可以使用 3.3v serial + stm32flash 工具烧写 BL 和 APP。 0x080020008KB0x0800400016KB0x0800800032KB0x0801000064KB 8 * 1024 = 8192 =0x2000 这里我们只能使用 3.3v serial 进行烧录,STM32 默认使用 PA10(Rx)和 PA9(Tx) 引脚,查看原理图发现位于主板下方的 Screen1 接口。 
2.1.1 使用 USB-TTL 模块刷写 Bootlaoder我们先尝试群主推荐的 USB-TTL 模块烧写 BL,注意主板信号电平为 3.3v,且不建议连接 VCC 引脚。 主板上 BOOT0-置高(插上跳帽),BOOT1-置低(跳帽短接GND) 按住 MCU-RESET 5s左右,重启 MCU 进入 3.3v Serial 烧写状态 从 QQ 群下载 bootloader.bin 放入 stm32flash 文件夹 使用以下命令烧录 BL: 复制代码 隐藏代码
# 查看设备信息sudo stm32flash /dev/ttyUSB0# 烧录 Fly BLsudo stm32flash -w bootloader.bin -v -g 0 [/dev/ttyUSB0]# .\stm32flash.exe -w bootloader.bin -v -g 0 [COM11] # 也可以使用 3.3v serial 直接烧录 Klipper 固件,起始地址 0x08000000,编译固件时选择 Bootloader offset (No bootloader)# sudo stm32flash -w ~/klipper/out/klipper.bin -v -g 0 /dev/ttyUSB0 主板上 BOOT0-置低(拔除跳帽),BOOT1-置低(跳帽短接GND),会自动重启 MCU 此时可通过 SD 卡更新 Klipper 固件了

【使用 USB 串口模块刷入 BootLoader】注意 Rx-Tx,Tx-Rx,GND-GND,信号电平为 3.3v 2.1.2 使用 Gemini UART 自刷写 BootLoader之前文章说过,可以通过 MPU 的板载 UART 接口与主板通讯,当然也可以用来烧录 BL。H5 有四组UART,TTL 电平3.3V,其中UART0 可用于调试,UART3 可以复用为SPI 接口。 UART0Gemini 板载 CH340N 串口芯片,一端连接 MPU TypeC ,一端与 UART0(ttyS0,CP-Tx,CP-Rx)连接,用于内核调试 (Kernel Console)。 
UART1 - UART2分别对应 /dev/ttyS1 和 /dev/ttyS2,查看 ARMBIAN 配置文件可知默认启用 uart1 。 复制代码 隐藏代码
fly@Fly-Gemini:~$ cat /boot/armbianEnv.txt
verbosity=1
bootlogo=true
console=both
disp_mode=1920x1080p60
overlay_prefix=sun50i-h5
overlays=i2c0 spi-spidev uart1
rootdev=UUID=7c4fee6e-3d75-4497-9764-fe4a130f862a
rootfstype=ext4
param_uart1_rtscts=1
param_spidev_spi_bus=0
user_overlays=spi
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u 查看原理图,uart1 和 uart2 位于左上角,最后测试发现左侧那个为 uart1,原来我参考原理图猜测右侧那个为 uart1,终究是错付了。如果想启用 uart2,添加相应的 overlay 即可。 
UART3 与 SPI1参考上方很奇怪的一点,UART3 和 SPI1 是共用引脚的,SPI1 缺少 CS 和 CLK 引脚。查阅 H5手册 P57 可知 SPI1 和 UART3 引脚复用,通过 overlay 切换。 
使用 UART1 烧录固件我们制作连接线,我端子用镊子压的,效果不好,凑活使用吧。 如上图所示进行接线,不连接 VCC 引脚,方法同上。当然也可以使用 UART1 与主板 Klipper 固件通讯。 复制代码 隐藏代码
# 查看设备信息sudo stm32flash /dev/ttyS1# 烧录 Fly BLsudo stm32flash -w bootloader.bin -v -g 0 /dev/ttyS1 
2.1.3 使用 USB 刷写固件因为我测试的时候需要频繁刷写固件,使用 SD 卡频繁插拔太麻烦,所以 USB 线刷是更方便的方法,具体参考我之前的文章:UART通讯设置与stm32线刷方法|3 ,使用 HID-BootLoader,需要对源码修改后编译。但是该方法会覆盖 Fly BootLoader,使 SD 卡刷方法失效,需要的时候重刷官方 FLY BL 即可。 2.1.4 SD-Updates 伪线刷(不可行)Klipper 对一些支持 SD 卡刷的主板,提供了伪线刷的方法,需要将 SD 卡插在主板上,然后上位机把编译好的固件通过 SPI 协议传到 SD 卡上,重启主板刷机。但是这种方法在 Gemini 上不可行,原因是其 SD 卡通讯采用的是 SDIO 接口。 2.2 Allwinner H5 MPU overlays参考文档:https://docs.armbian.com/User-Guide_Allwinner_overlays/ H5 的 overlays 相关信息可以在此文件内查看:/boot/dtb/allwinner/overlay/README.sun50i-h5-overlays [analog-codec] | 音频相关,默认开启,可以关闭 Activates SoC analog codec driver that provides Line Out and Mic In functionality [usbhost0] | 启用 USB-OTG Activates USB host controller 0,所以我们猜测不能用的那个上面的就是 USB0-OTG。也就是我图中插无线网卡的接口。 
配套的还有 USB ID 引脚,配合 overlay 启用 usb-otg 功能,需要测试验证。 USB_ID pin 为低电平时,则设备为host模式。比如PC和支持OTG设备做主设备时。USB_ID pin 为悬空(高电平)时,则设备为device模式。比如U盘和支持OTG设备做从设备时。
[spi-spidev] | 启用硬件 SPI
可以用于连接加速度计和灯带等 SPI 通讯设备,可以在 /dev/spidevX.Y 看到。for userspace SPI access, where X is the bus number and Y is the CS number。默认启用 SPI0 ,即右侧那个,可以通过拨码开关与 MCU 的 SPI 连接。SPI1 与 UART3 复用引脚。 此外,原理图引脚顺序(5v-GND-I2C)与主板丝印顺序(5v-IO-GND)冲突,是i0还是io?哪个正确?使用万用表测得原理图正确。
附上 ASXL345 加速度计设置: 复制代码 隐藏代码
[mcu host]serial: /tmp/klipper_host_mcu[adxl345]cs_pin: host:gpiochip1/gpio67spi_bus: spidev0.0axes_map: x,y,z[resonance_tester]probe_points: 120,120,20accel_chip: adxl345min_freq: 30max_freq: 100 2.3 MPU FAN 与 GPIO 控制主板引出一路 MPU 风扇接口位于右上方,可以通过短接 NC FAN 引脚切换常开(Normal Close)和可控。 不短接就是由 FAN(GPIOL3) 引脚控制。是用了一个 AO3400场效应管 ,属于电压控制元件,更多信息可以参考 用MOS管还是三极管? 
这里介绍一下如何控制该引脚,更多内容可以参考 https://linux-sunxi.org/GPIO。 
2.3.1 使用 sysfs 测试 MPU GPIO我们查看原理图,发现 FAN 引脚为 GPIOL3 ,需要计算其 GPIO 号。全志系列的计算公式为: 复制代码 隐藏代码
(字母顺序 - 1) * 32 + 引脚号 以 GPIOL3 为例,为 (17-1) * 32 + 3 = 355。我们验证一下: 复制代码 隐藏代码
sudo su# 启用 GPIOL3echo 355 > /sys/class/gpio/export# 设置引脚方向为输出echo "out" > /sys/class/gpio/gpio355/direction# 设置引脚输出值为1echo 1 > /sys/class/gpio/gpio355/value# 释放引脚echo 355 > /sys/class/gpio/unexport 可以使用万用表直流电压档验证输出,高电平为 ~3.3v 输出。说明测试成功。附一张方便记忆的图:PL3 = 352 + 3。 
cat /sys/kernel/debug/pinctrl/*/pinmux-pins 2.3.2 使用 libgpiod 测试 MPU GPIO新版 Linux 内核更多使用 libgpiod 来操作 GPIO,更多信息可参考 GPIO Programming: Exploring the libgpiod Library。 复制代码 隐藏代码
sudo apt-get install gpiod# 识别 gpiochip 芯片gpiodetect# 查看 gpio 引脚信息gpioinfo# 输出结果如下fly@Fly-Gemini:~$ gpiodetect
gpiochip0 [1f02c00.pinctrl] (32 lines)
gpiochip1 [1c20800.pinctrl] (224 lines)
fly@Fly-Gemini:~$ gpioinfo
gpiochip0 - 32 lines:
line 0: unnamed unused input active-high
line 1: unnamed unused input active-high
line 2: unnamed "power" input active-low [used]
line 3: unnamed "moonraker" output active-high [used]
line 4: unnamed unused input active-high
line 5: unnamed "vcc-io" output active-low [used]
line 6: unnamed unused input active-high
line 7: unnamed unused input active-high
...# 读取 gpiochip0/gpio6 引脚值gpioget 0 6# 设置 gpiochip0/gpio24 输出高电平1s后恢复低电平gpioset --mode=time -s 1 0 24=1 这里我们想操作 FAN 引脚,试图找到我们计算得到的 355 号引脚,但是并没有,有问题,属实有问题,那它肯定有其他名称,如何获悉呢? 复制代码 隐藏代码
sudo cat /sys/kernel/debug/gpio 【图】如图所示,我们得知,gpio-355 属于 gpiochip0 的第 3 个,输入以下命令测试成功。参考:IMX8 GPIO 编号计算和控制 复制代码 隐藏代码
gpioset 0 3=1 2.3.3 演示 moonraker 控制 MPU FAN既往我会使用电源管理模块连接到树莓派 GPIO 引脚上,然后 使用 Moonraker 控制打印机开/关,这里我们准备演示使用 moonraker 控制 FAN 引脚。 moonraker 的 文档 关于 power 部分格式是这么要求的: 复制代码 隐藏代码
[power light_strip]type: gpiopin: gpiochip0/gpio17initial_state: on 于是我先后尝试了 gpiochip0/gpio355 、 gpiochip0/gpio3 、 gpiochip0/gpioL3 ,在 Fluidd 有上角都没有出现那个熟悉的电闸开关。 
查看 moonraker.log 日志,报错信息如下: Stage 1、首先搜索关键词 gpiochip0/gpio3 ,提示无法解析。报错 Unparsed config option ,那我们看看源码对格式是怎么要求的,另外到底应该填入的 GPIO 号是什么,355、3 亦或是 L3?翻阅 moonraker 源码 moonraker/moonraker/components/gpio.py ,相关代码如下: 复制代码 隐藏代码
try:
chip = self._get_gpio_chip(chip_id)
line = chip.get_line(pin_id)
args: Dict[str, Any] = {
'consumer': "moonraker",
'type': self.gpiod.LINE_REQ_DIR_OUT
}def _parse_pin(self, pin_name: str) -> Tuple[int, str, bool]: pin = pin_name
invert = False if pin[0] == "!":
pin = pin[1:]
invert = True chip_id: str = "gpiochip0" pin_parts = pin.split("/")
if len(pin_parts) == 2:
chip_id, pin = pin_parts
elif len(pin_parts) == 1:
pin = pin_parts[0]
if not chip_id.startswith("gpiochip") or \
not chip_id[-1].isdigit() or \
not pin.startswith("gpio") or \
not pin[4:].isdigit():
raise self.server.error(
f"Invalid Gpio Pin: {pin_name}")
pin_id = int(pin[4:])
return pin_id, chip_id, 至此正式确认格式为 gpiochip0/gpio3 ,默认为 gpiochip0 可省略。我们写个小程序测试一下: 复制代码 隐藏代码
import gpiod
chip=gpiod.Chip('gpiochip0')
line = chip.get_line(3)
line.request(consumer='moonraker', type=gpiod.LINE_REQ_DIR_OUT) 提示 Permission Denied (权限不足),使用 sudo 执行 python 成功。此时再回头去看 moonraker.log,以 gpio 为关键词搜索,同样发现权限不足的问题,至此我们找到了新思路。 Stage 2、修复权限不足问题我们查看树莓派 FluiddPi_OS 的是如何设置的: 复制代码 隐藏代码
ls -l /sys/class/gpio/# 查看用户组cat /etc/group# 查看当前用户所在组id $user# ORgroups 可以看到树莓派中,gpiochip 所在 gpio 组,且 pi 用户在此用户组中。依此修复权限不足的问题 复制代码 隐藏代码
# 我们不建议把用户添加到root组,所以新建gpio组添加当前用户进去,重新登录 (Relogin) 生效sudo su
groupadd gpio
gpasswd -a fly gpio## 不建议使用usermod,会覆盖辅用户组# sudo usermod -a -G gpio $user # usermod -a -G tty,disk,dialout,sudo,audio,gpio,fly,plugdev,users,systemd-journal,input,netdev,ssh,mnrkrsudo $user# chown -R root:gpio /sys/class/gpio 似乎不需要## 添加 /etc/udev/rules.d/60-gpiod.rules# sudo bash -c '' cat << _EOF_ > /etc/udev/rules.d/60-gpiod.rules# udev rules for gpio port access through libgpiodSUBSYSTEM=="gpio", KERNEL=="gpiochip[0-4]", GROUP="gpio", MODE="0660"
_EOF_# 重启 moonraker 并验证是否成功,relog?systemctl restart moonraker
cat /sys/kernel/debug/gpio 
注意: 如上图所示,我们可以使用 Moonraker 通过 FAN 引脚控制 LED 灯珠亮灭。 MPU FAN 线序与我手里的风扇不一样,左(-)右(+),如果你的风扇不转的话可以看下线序。 be之间等同个二极管 会有0.3V压降 1k电阻上再降点 输出电压不高于3.3v,带不动5v风扇,只能常开使用。
参考: 
2.3.4 MPU FAN 电压问题之研究
查看上面的原理图,理论上风扇接口的电压变化应该是0-5v,但示波器显示实际为1.629~2.845v。其使用 A3400 N-MOS,查看手册可知 Vgs (th) 最大值为1.45v,FAN 引脚高电平时,Vgs = 3.3v,N-MOS 导通,然后 Vg=3.3v,Vs=5v,Vgs 处于不稳定状态。具体参考孙老师的视频: 看完就明白为什么会这样了。 2.4 可用 MPU GPIO 汇总当所有 overlay 关闭时,对应的引脚为 unused 状态,亦即 GPIO(General Purpose Input Output,通用输入输出),对应引脚可用作 GPIO 引脚使用。 
2.4 MPU 控制信号按钮MPU 有两个按钮,功能分别是 UBOOT (左侧) 和 AP-RESET (右侧)。其中 AP-RESET 相当于电脑的强制重启,一般情况下不建议使用。 
UBOOT烧录按键刷机时使用此按键AP-RESET系统复位按键当系统出现死机或者其他异常时,置低AP-RESET 信号大于300ms,系统会强制重启。 2.5 MCU EXP1 和 EXP2兼容 Ramps 引脚顺序,但是我手中的 MKS 屏幕与 Gemini 主板的开口方向相反,建议大家购买主板配套屏幕。 
备注: 
2. MCU BOOT1 引脚复用的问题感谢群友 ↖ǒ↗ (630559633) 的提醒。现状: BOOT1 可用于 3.3v serial 为主板烧录固件时置低使用 BOOT1 同时连接到 X 电机驱动的 EN 使能引脚 驱动的 EN 引脚低电平或者悬空时,可以正常移动电机;高电平时电机锁死。 BOOT1 作为 HID-BootLoader 的激活引脚,低电平启动 Application,高电平进入 BootLoader。
我们首先分析一下除了 X 其他电机电路部分: MCU 设置 EN 为输出接口,输出高低电平,经过 N-MOS 来调节电机驱动 EN 引脚的高低电平。 在 Klipper 配置文件 printer.cfg 的 [stepper_]区域,通过 enable_pin: 来设置输出电平,默认为高电平,为了能转动电机,常添加 ! 。 X 的 使能被跳帽强行拉高或者拉低,特别在拉低的时候,不过求证石总,此时并没有短路。那也因此失去了设置 EN 的能力。 此外,Klipper Boot1 悬空会默认输出低电平

CAN模块的测试使用 为 MPU 添加硬件关机按钮以及屏幕关机命令 启用 USB-OTG 虚拟串口功能
|
还没有评论,来说两句吧...