reComputer RK3576 硬件接口

最近更新:

本指南介绍如何在运行 Armbian 的 reComputer RK3576 上检查和使用各硬件接口。可通过章节链接跳转到想要连接或测试的外设部分。

开始之前

  • 完成首次启动设置,并使用可运行 sudo 的用户在本地或通过 SSH 登录。
  • 连接外设之前,请先查阅接口与主板图示,确认对应的接口。
  • 安装内置板卡、排线或 GPIO 接线之前,请先关机并断开设备电源。
  • 下文的设备节点、总线编号和 hwmon 索引均基于参考镜像。执行任何会更改设置的命令之前,请先确认自己系统上的实际设备。

风扇

Armbian 通过 Linux hwmon 暴露风扇控制接口。参考镜像使用的是 /sys/class/hwmon/hwmon6,但该索引可能会变化。使用下文路径之前,请先找到名为 pwmfan 的节点:

bash
for node in /sys/class/hwmon/hwmon*; do
    [ -r "$node/name" ] || continue
    printf '%s: ' "$node"
    cat "$node/name"
done

读取风扇转速和 PWM

以参考的 hwmon6 节点为例:

bash
cat /sys/class/hwmon/hwmon6/fan1_input
cat /sys/class/hwmon/hwmon6/pwm1
cat /sys/class/hwmon/hwmon6/pwm1_enable

fan1_input 报告的是转速(RPM)。pwm1 是一个 0 到 255 的设定值,并不是实测风扇转速的百分比。参考环境下的首次测试显示,空闲时转速约为 2155 RPM,SoC 温度为 36°C。实际读数会随负载和环境温度而变化。

读取温度

bash
for zone in /sys/class/thermal/thermal_zone*; do
    [ -r "$zone/type" ] && [ -r "$zone/temp" ] || continue
    printf '%s: ' "$(cat "$zone/type")"
    awk '{printf "%.1f°C\n", $1 / 1000}' "$zone/temp"
done

sysfs 中的温度值以毫摄氏度为单位。下面的命令会将其换算为 °C,并输出各热区报告的名称。

验证 PWM 写入

Linux pwm-fan 文档 将 pwm1_enable 定义为 PWM 和调压策略。它的取值并不提供通用的手动/自动模式切换。尤其要注意的是,写入 2 并不代表已恢复自动温控。

做简单验证时,可先保存当前 PWM 值,写入 128,再读回确认,最后恢复保存的值。如果你的风扇是在其他索引下发现的,请替换 hwmon6:

bash
FAN_PWM=/sys/class/hwmon/hwmon6/pwm1
ORIGINAL_PWM=$(cat "$FAN_PWM")
printf '128\n' | sudo tee "$FAN_PWM"
cat "$FAN_PWM"
printf '%s\n' "$ORIGINAL_PWM" | sudo tee "$FAN_PWM"

内核温控器可能会覆盖手动写入的值,写入成功并不代表能持续保持手动控制。请保留镜像原有的温控设置;如需自定义控制方案,必须针对当前运行的厂商驱动和设备树进行验证。

LED 指示灯状态

前面板配有电源、状态和用户 LED。其中用户 LED 可在 Linux 下控制;其余指示灯反映设备的供电和系统状态。

image24.png

运行示例之前,请先确认要控制的是哪个 LED:

  • 电源 LED(红色): 由硬件控制,未提供 Linux 控制接口。
  • 状态 LED(绿色): 系统指示灯,在当前配置下未提供用户空间控制接口。
  • 用户 LED(RGB): 通过 GPIO 扩展芯片连接(参考镜像中为 gpiochip6)。蓝色通道用作心跳指示;在当前配置下,红色和绿色通道处于空闲状态。
  • 用户 RGB LED 控制指南 在 Linux 环境中(如 Armbian),建议使用现代化的 gpiod 工具链(gpioinfo / gpioset)来操作空闲的红色和绿色通道,并使用标准 Linux sysfs 接口控制蓝色通道。 定位 LED 在系统中,LED 通过 sysfs 接口进行管理。运行以下命令确认 LED 节点:
bash
ls /sys/class/leds/user-led

预期输出:

image26.png

手动控制(开/关) 在手动控制 LED 之前,需要先将其触发模式设置为 none。

bash
echo none | sudo tee /sys/class/leds/user-led/trigger

开启/关闭 LED

bash
# Turn ON
echo 1 | sudo tee /sys/class/leds/user-led/brightness
# Turn OFF
echo 0 | sudo tee /sys/class/leds/user-led/brightness

自动触发模式 内核提供了多种触发器,可根据系统事件自动控制 LED 行为。

bash
# Heartbeat Mode
echo heartbeat | sudo tee /sys/class/leds/user-led/trigger
# Custom Timer Mode (Blinking)
# Enable timer
echo timer | sudo tee /sys/class/leds/user-led/trigger
# Set intervals
echo 500 | sudo tee /sys/class/leds/user-led/delay_on
echo 500 | sudo tee /sys/class/leds/user-led/delay_off

开机持久化配置 由于 /sys 中的更改是易失性的,重启后会被重置,你可以通过添加 cron 任务或使用 rc.local 使其永久生效。

按键

reComputer RK3576 系列主板配备了 3 个板载物理按键,主要用于电源控制和底层固件烧录。

image27.png

注意: 使用 Recovery 或 MaskROM 进行烧录时,请确保设备的 Type-C OTG 接口通过数据线连接到主机 PC。你需要使用 Rockchip 官方工具(如 Windows 上的 RKDevTool 或 Linux 上的 upgrade_tool)来执行相关操作。

GPIO

40 针排针引出 GPIO、电源以及 I2C、UART、SPI、CAN 等外设总线。连接传感器或扩展板之前,请先确认引脚定义、电压和当前引脚功能。

image29.png

40 针引脚定义表

GPIO 使用说明 默认情况下,除非被系统驱动预先占用,否则 40 针排针上的大多数引脚都作为标准 GPIO 使用。推荐使用标准的 gpiod 工具集(gpiodetect、gpioinfo、gpioset、gpioget)在 Shell 层面进行操作。 以操作物理引脚 21(该引脚被指定为通用 GPIO,当前处于空闲状态)为例:

  • 定位其映射的控制器与线路编号:
bash
sudo gpioinfo | grep -i PIN_21

输出:

text
line 14:     "PIN_21"       unused   input  active-high

这表明它属于 gpiochip1 的第 14 号线路(Line)。

  • 将该引脚设置为高电平(例如点亮一个 LED):
bash
gpioset gpiochip1 14=1
  • 将该引脚设置为低电平:
bash
gpioset gpiochip1 14=0
  • 读取物理引脚 27 的输入状态: 执行 sudo gpioinfo | grep -i PIN_27 查询后可知,它映射到 gpiochip4 的第 23 号线路:
bash
gpioget gpiochip4 23

要启用引脚定义图中标注的专用外设硬件(I2C、UART、CAN、PWM),必须显式启用其对应的设备树覆盖层(Device Tree Overlay,DTBO),否则它们将始终只作为通用 GPIO 使用。 所有 40-Pin 专用的覆盖层配置均位于 /boot/dtb/rockchip/overlay/ 目录下,并严格遵循 recomputer-rk3576-devkit-40pin- 命名前缀:

配置步骤:

  • 打开系统环境配置文件:
bash
sudo nano /boot/armbianEnv.txt
  • 找到 overlays= 这一行(如果不存在,则在文件末尾追加一行),然后填入所需的覆盖层名称,不含 .dtbo 扩展名。多个覆盖层之间用空格分隔:
text
overlays=recomputer-rk3576-devkit-40pin-i2c3 recomputer-rk3576-devkit-40pin-can0
  • 保存并退出(Ctrl+O、Enter、Ctrl+X),然后重启设备以应用设备树修改:
bash
sudo reboot

注意:SPI 默认处于激活状态

SPI 总线引脚(引脚 19、21、23、24、26)在系统启动时默认已启用。你无需在 armbianEnv.txt 中为 SPI 额外指定任何自定义 DTBO。

硬件架构共享: 40-Pin 排针上的物理 SPI 信号与板载的 4G LTE / LoRaWAN / Hailo Wi-Fi 扩展槽位共享完全相同的硬件总线域。为了让这些通信模块获得开箱即用的体验,基础操作系统会让该 SPI 通道始终保持激活状态。

开发者建议: 如果你在 40-Pin 扩展排针上连接自定义的第三方 SPI 扩展板,请务必谨慎处理片选(CS)与地址分配,以避免与内置模块之间发生通信总线死锁。

USB

本设备为 reComputer RK3576 系列提供了多个物理 USB 接口,用于连接外部外设、进行系统固件烧录(OTG)以及扩展显示输出。

USB 资源分配定义如下:

接口位置/标签物理接口形态总线协议与最大带宽硬件规格与控制器路由
USB 3.0 HostUSB Type-AUSB 3.2 Gen 1x1(5 Gbps)通过内部 USB 3.0 控制器路由,为 USB 3.0 工业相机、NVMe 存储扩展或高速 DAQ 模块提供针对性优化的高带宽数据通道。
USB 2.0 HostUSB Type-A(多个)USB 2.0(480 Mbps)由 USB 2.0 主控制器管理,用于连接键盘、鼠标、4G/5G 蜂窝调制解调器、硬件加密狗或 USB 转 UART 桥接板等标准外设。
USB Type-CUSB Type-CUSB 3.0 / 2.0 OTG + DP 1.4 Alt Mode一个多协议复合端口,路由至 RK3576 的 USB 3.0 OTG 控制器与 DisplayPort(DP)TX PHY,支持双向 Host/Device 角色切换与硬件视频流传输。

使用 lsusb 可以查看当前系统上连接的 USB 设备信息:

image34.png

注意:USB Type-C 接口架构

A. 系统烧录与维护(USB OTG 设备模式): 通过 Recovery / MaskROM 按键触发,该端口将进入设备模式,以便使用 RKDevTool 进行底层固件烧录。

B. DisplayPort 输出(DP 1.4 Alt 模式): 复用硬件视频通道,通过 Type-C 线缆或转接器直接驱动显示器,输出标准的 DP 1.4 画面。

C. 标准原生 Host 模式: 在系统正常运行期间默认作为标准 USB 3.0 Host,可直接连接 Type-C 存储设备、网络适配器或 Hub。

SD 卡插槽

主板配备一个标准的 Micro SD(TF)卡插槽,直接连接至 RK3576 SOC 的 SDMMC0 总线。该接口主要用于系统启动、运行操作系统(如 Armbian OS)以及本地数据存储。

image35.png

可使用随附的 microSD 卡启动预装系统,也可参照 Armbian 安装指南 制作新卡。选择安装目标之前,请先确认设备随附的存储介质。

注意:启动优先级与存储建议

启动优先级机制(MaskROM 阶段): RK3576 上的固件启动顺序由底层 MaskROM 严格控制。如果 Micro SD 卡与板载 eMMC 上同时存在可启动固件,MaskROM 会优先从 Micro SD 卡加载 SPL(Secondary Program Loader,二级程序加载器)。在进行固件升级或多系统切换时,请特别留意这一物理特性。

NVMe 启动限制(U-Boot 阶段): M.2 NVMe SSD 不在 MaskROM 的直接启动路径之内,系统无法直接从裸 NVMe 硬盘执行第一阶段启动。若要从 NVMe SSD 运行操作系统,必须先在 Micro SD 卡或 eMMC 上执行引导程序进入 U-Boot 阶段,再由 U-Boot 完成初始化、加载,并将控制权移交给位于 NVMe 存储上的主操作系统。

重负载升级建议: 如果你计划在边缘侧部署具有高频 I/O 读写需求的应用(例如运行持续本地日志记录的大型数据库,或管理复杂的 Docker 容器集群),海量的 4K 随机读写可能会触及标准 Class 10 卡的性能瓶颈。对于此类重负载工业场景,建议将核心操作系统 rootfs 迁移至 M.2 NVMe SSD(通过 U-Boot 链式加载),或升级为明确标注 A1 或 A2(应用性能等级)的高性能 Micro SD 卡,以确保系统获得最佳响应速度。

挂载点: 在 Armbian OS 中,Micro SD 卡通常被枚举为 /dev/mmcblk0。

SIM 卡插槽

主板配备一个板载卡槽,专为搭配安装在 Mini-PCIe 插槽中的 4G LTE 蜂窝模块而设计。通过插入标准运营商 SIM 卡,设备可以在没有有线以太网的环境中实现端到云的蜂窝网络连接。

image36.png

硬件架构与工作机制 Nano SIM 卡槽的信号线直接连接至 Mini-PCIe 插槽的特定引脚(如 UIM_PWR、UIM_DATA、UIM_CLK、UIM_RESET)。

  • 非 SOC 直连:请注意,SIM 卡信号并不直接与 RK3576 SOC 相连,而是完全由安装在 Mini-PCIe 插槽中的 4G 模块管理和驱动。因此,SIM 卡只有在兼容的 4G 模块处于激活状态时才能正常工作。

注意:开发者须知与操作规范

严禁热插拔: 请务必在设备完全断电(断开 DC 电源或 PoE 供电)的情况下插拔 SIM 卡。在系统运行时热插拔 SIM 卡可能永久损坏 4G 模块的 SIM 接口,或引发与网络相关的系统崩溃。

卡型规格: 该卡槽仅支持 Nano SIM 卡(4FF),这是现代智能手机中使用的最小标准卡型。请避免使用配合廉价塑料转接卡的 Micro 或 Standard SIM 卡,因为它们很容易卡住或弄弯卡槽内部的触点。

插入方向: 插入前请查看卡槽附近的丝印图标或结构缺口。通常,SIM 卡应以金属触点朝下、缺角一侧先插入的方式放入(请以板上的物理对齐标记为准)。

M.2 Key M 2280 插槽

主板配备一个标准的 M.2 Key M 2280 插槽,由 PCIe 2.1 x1 总线驱动,专为高速存储扩展或边缘 AI 计算加速而设计。

image37.png

支持的设备

  • NVMe SSD:支持标准 2280 规格的 NVMe 固态硬盘,可用于系统启动、大容量数据存储或存放大型 AI 模型。
  • AI 加速卡:兼容基于 M.2 Key M 接口的 AI 加速模块,以提升边缘推理能力。

已测试验证的设备 为确保最佳兼容性与系统稳定性,强烈建议使用经过 Seeed Studio 全面测试验证的 M.2 扩展模块:

注意:

协议兼容性: 该插槽仅支持 PCIe NVMe 设备,不支持 M.2 SATA SSD,操作系统也无法识别此类设备。

带宽限制: 该插槽运行在 PCIe 2.1 x1 通道上,理论最大带宽约为 500 MB/s。选购 NVMe SSD 时,性价比较高的标准 Gen3/Gen4 硬盘即可满足需求;超高速的 Gen4 SSD 会受限于 PCIe 2.1 x1 接口的带宽瓶颈。

外形规格: 安装螺柱专为 2280(22mm x 80mm)规格模块设计。

SSD 使用指南

bash
lsblk

image38.png

Hailo YOLOv11 部署与推理指南

安装软件包 安装基础 PCIe 驱动后,需要重启系统才能使更改生效。

image39.png

image40.png

bash
# Install the PCIe driver
sudo dpkg -i hailort-pcie-driver_4.23.0_all.deb

# Reboot the system
sudo reboot

# After reboot, verify the driver is loaded
lsmod | grep hailo

# Install HailoRT
sudo dpkg -i hailort_4.23.0_arm64.deb

# Scan and verify device status
hailortcli scan

# Create and activate a virtual environment
python3 -m venv hailo_env
source hailo_env/bin/activate

# Install HailoRT Python library
pip install hailort-4.23.0-cp311-cp311-linux_aarch64.whl

# Verify installation and device connection
python3 -c "from hailo_platform import VDevice; vdev = VDevice(); print('Successfully connected via VDevice! Device info:', vdev)"

image41.png

image42.png

image43.png

安装 Hailo Model Zoo 要运行官方预训练模型,需要安装 Hailo Model Zoo 及其系统依赖项。

bash
# 1. Install required system libraries
sudo apt update
sudo apt install -y git libglib2.0-0 libgl1-mesa-glx

# 2. Clone the official repository (latest branch recommended)
git clone https://github.com/hailo-ai/hailo_model_zoo.git
cd hailo_model_zoo
pip install -e .

运行 YOLOv11 模型

  • 检查摄像头设备: 确认摄像头的挂载节点。
bash
v4l2-ctl --list-devices
  • 下载模型: 确认已下载 yolov11n.hef 模型文件,并将其放置在你的工作目录中。

创建一个名为 webcam_yolo11.py 的文件,并粘贴以下代码。请根据你的实际环境,调整配置部分下的 HEF_PATH 和 DEVICE_ID。

python
import numpy as np
import cv2
import time
from hailo_platform import (VDevice, HEF, InferVStreams, ConfigureParams,
                            HailoStreamInterface, InputVStreamParams, OutputVStreamParams)

# ================= Configuration =================
HEF_PATH = 'yolov11n.hef'
DEVICE_ID = "/dev/video40"  # Update based on v4l2-ctl output
CONF_THRESHOLD = 0.45

# COCO Dataset 80 Class Labels
COCO_CLASSES = [
    "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light",
    "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow",
    "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee",
    "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard",
    "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple",
    "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch",
    "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone",
    "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear",
    "hair drier", "toothbrush"
]
# ==================================================

def main():
    # 1. Initialize Hailo Hardware
    hef = HEF(HEF_PATH)
    input_vstream_info = hef.get_input_vstream_infos()[0]
    input_h, input_w = input_vstream_info.shape[:2]

    cap = cv2.VideoCapture(DEVICE_ID)
    if not cap.isOpened():
        print("Cannot open webcam")
        return

    # Setup inference variables
    prev_time = 0

    with VDevice() as target:
        config_params_dict = ConfigureParams.create_from_hef(hef, HailoStreamInterface.PCIe)
        network_group = target.configure(hef, config_params_dict)[0]
        with network_group.activate():
            vstream_params = (InputVStreamParams.make_from_network_group(network_group),
                              OutputVStreamParams.make_from_network_group(network_group))
            with InferVStreams(network_group, vstream_params[0], vstream_params[1]) as vstreams:
                print("[INFO] Initialization successful! Running YOLOv11 real-time detection...")
                while True:
                    start_time = time.time()  # Record start time for FPS
                    ret, frame = cap.read()
                    if not ret:
                        break

                    # Preprocessing (Convert to RGB based on previous validation)
                    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                    resized = cv2.resize(frame_rgb, (input_w, input_h))
                    input_tensor = np.expand_dims(resized, axis=0)

                    # Inference
                    outputs = vstreams.infer(input_tensor)

                    # Parsing and Drawing
                    h, w, _ = frame.shape
                    for name, class_list in outputs.items():
                        # Iterate through 80 classes
                        for class_id, detections in enumerate(class_list[0]):
                            if len(detections) > 0:
                                for det in detections:
                                    if len(det) >= 5:
                                        ymin, xmin, ymax, xmax, confidence = det[:5]
                                        if confidence > CONF_THRESHOLD:
                                            # Coordinate Mapping
                                            left, top = int(xmin * w), int(ymin * h)
                                            right, bottom = int(xmax * w), int(ymax * h)

                                            # Get class name, display ID if out of bounds
                                            class_name = COCO_CLASSES[class_id] if class_id < len(COCO_CLASSES) else f"ID {class_id}"

                                            # Draw bounding box
                                            cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
                                            # Draw background and label text
                                            label = f"{class_name}: {confidence:.2f}"
                                            cv2.putText(frame, label, (left, top - 10),
                                                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

                    # Calculate and display real-time FPS
                    curr_time = time.time()
                    fps = 1 / (curr_time - start_time)
                    # Print in the top left corner
                    cv2.putText(frame, f"FPS: {fps:.1f}", (20, 40),
                                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

                    # Display window
                    cv2.imshow('reComputer RK3576 - Hailo YOLOv11', frame)
                    if cv2.waitKey(1) & 0xFF == ord('q'):
                        break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

image44.png

RK182x 部署与推理指南

RK182x 支持协处理器模式,由主机 SoC(例如 RK3588/RK3576)作为系统核心,负责任务调度、资源分配与整体控制,并通过高速 PCIe(通常协商至 Gen2 x1、5 GT/s,提供约 400 MB/s 的单向带宽)或 USB 3.0 接口连接到 RK1820/RK1828 加速单元。RK1820 与 RK1828 共享相同的 PCI 设备 ID(1d87:182a)。整个开发框架由 PC 端的模型转换工具(RKNN3 Toolkit)与板端的运行时环境(RKNN3 Runtime)组成。

方案 A:快速自动化部署(推荐) 使用 SDK 提供的预编译自动化安装包,可以一键完成内核驱动、设备固件、运行时库、调试工具以及系统自启动服务的部署。

bash
# Push the package via ADB from PC to Board
# Optional packages include:
#   - rknn3_rk182x_m2_installer_arm64.tgz (M.2 Module)
adb push rknn3_rk182x_m2_installer_arm64.tgz /tmp/installer.tgz
adb shell "cd /tmp && tar xzf installer.tgz && ./install.sh"

# Note: A hard power cycle (physical power off) is MANDATORY to ensure proper hardware and firmware loading.
sudo poweroff

如果在开发调试过程中需要手动控制驱动绑定,或在未安装自动化安装包的环境中操作,请按顺序执行以下系统总线命令。请注意:** RK1820 在驱动探测完成后,需要手动显式激活 BusMaster。**

bash
# Force driver override and trigger binding
echo pcie-rkep | sudo tee /sys/bus/pci/devices/0000:01:00.0/driver_override
echo 0000:01:00.0 | sudo tee /sys/bus/pci/drivers/pcie-rkep/bind

# Enable the BusMaster register to activate accelerator card bus mastering
sudo setpci -s 01:00.0 COMMAND=0x0406

主机系统默认运行 Python 3.11。部署前,请确保已在 x86 机器上使用 RKNN3 Toolkit 将模型转换为专用的 .rknn 格式(适用于 LLM 和 CNN),并将转换后的文件(例如 qwen2_5_1_5b_rk1820.rknn)上传至主机。

bash
# 1. Create workspace
mkdir -p ~/rk_182x_work && cd ~/rk_182x_work

# 2. Clone Model Zoo and Toolkit repositories
git clone --recursive https://github.com/airockchip/rknn3-model-zoo.git
git clone https://github.com/airockchip/rknn3-toolkit.git

# 3. Install rknn3-toolkit-lite
cd rknn3-toolkit/rknn3-toolkit-lite/packages
pip3 install ./rknn3_toolkit_lite-1.0.0-cp311-cp311-linux_aarch64.whl

# 4. Install dependencies
pip3 install -r requirements.txt

Mini-PCIe 插槽

主板配备一个标准 Mini-PCIe(Mini PCI Express)插槽,主要用于扩展 4G LTE、LoRaWAN 或 Wi-Fi HaLow 等工业级无线通信模块。

image45.png

信号与总线架构 Mini-PCIe 插槽引出 PCIe 和 USB 信号。模块能否使用还取决于其电气要求和 Linux 驱动支持;接口能插上并不代表兼容。

  • 蜂窝网络扩展:与板载 Nano SIM 卡插槽配合使用,可直接插入 4G LTE 模块以实现蜂窝网络连接。

下文涉及的模块类型 下文将介绍以下几类模块。请核对各示例中使用的具体模块和驱动:

  • 4G 蜂窝网络
    • 官方推荐的 4G LTE Mini-PCIe 模块
  • LoRaWAN 与物联网无线
    • 基于 USB / SPI 的 LoRaWAN 网关模块
    • Wi-Fi HaLow(802.11ah)远距离低功耗无线模块

注意:

SIM 卡安装: 使用 4G LTE 模块时,请在设备断电状态下将 Nano SIM 卡插入板载卡槽。热插拔 SIM 卡可能导致模块识别失败或永久损坏。

天线走线: 由于工业外壳可能会屏蔽无线信号,在部署 4G 或 LoRaWAN 模块时,请务必连接 IPEX 转 SMA 转接线,将天线引出机箱外部。

驱动与网络配置: 大多数工业级 4G 模块在 Armbian OS 中需要特定的 USB 串口驱动(如 option 驱动)。开发者可以使用 NetworkManager 或 pppd 建立蜂窝网络连接。

4G 模块(EC25)配置与测试指南

image46.png

通过 AT 命令进行蜂窝网络配置 插入装有物联网 SIM 卡的 4G 模块,启动系统,并确认 USB 串口设备:

bash
lsusb
ls /dev/ttyUSB*

安装并启动 minicom 以与模块通信:

bash
sudo apt install minicom
sudo minicom -D /dev/ttyUSB2

核心 AT 命令速查

详细状态检查与拨号流程 SIM 卡状态检查:发送 AT+CPIN? 以确认 SIM 卡状态。

text
Command:  AT+CPIN?
Response: +CPIN: READY
Meaning:  The SIM card is present and ready (no PIN lock applied).

信号质量(RSSI)检查:发送 AT+CSQ 以评估无线信号环境。

text
Command:  AT+CSQ
Response: +CSQ: 28,99
Meaning:  Excellent signal. The value 28 maps to approx. -57 dBm (range 0-31, >20 is excellent). 99 indicates unknown Rx error rate (normal).

网络注册状态检查:发送 AT+CGREG? 和 AT+CREG? 以检查蜂窝网络的注册状态。

text
Command:  AT+CGREG?  and  AT+CREG?
Response: +CGREG: 0,1  /  +CREG: 0,1
Meaning:  The trailing 1 indicates "Registered, home network", meaning the module has successfully attached to the tower.

当前运营商查询:发送 AT+COPS? 以检查运营商及网络制式。

text
Command:  AT+COPS?
Response: +COPS: 0,0,"T-Mobile",7
Meaning:  Currently attached to the specific carrier (e.g., T-Mobile). The trailing 7 indicates the connection is in LTE (4G) mode.

数据上下文激活:先通过 AT+QIACT? 查询,再使用 AT+QIACT=1 激活数据上下文。

text
Command:  AT+QIACT?   -> Response: OK (If empty, no context is currently active)
Command:  AT+QIACT=1  -> Response: OK
Meaning:  Successfully activates Context ID 1. The module will fetch a private IP from the carrier and enable cellular routing.

注意: 如果硬件与运营商套餐支持语音/数据并发,可以通过 ATD<number>; 发起语音通话。

内置 Ping 测试:运行 AT+QPING 可直接从模块验证 IP 层的连通性。

text
Command:  AT+QPING=1,"www.google.com",1,4
Response: +QPING: 0["142.250.190.46",32,45,255]
          +QPING: 0,4,4,0,40,52,45
Meaning:  Successfully pinged the target domain. 4 packets sent, 4 received, 0% loss.

故障排查

Lora 模块配置与测试指南

USB

验证设备识别

bash
ls /dev/ttyACM*
udevadm info /dev/ttyACM0 | grep -E "ID_VENDOR|ID_MODEL"

预期输出包括:

bash
E: ID_MODEL=STM32_Virtual_ComPort
E: ID_VENDOR=STMicroelectronics

TX 测试命令

bash
cd ~/sx1302_hal/libloragw
sudo ./test_loragw_hal_tx \
  -u \
  -d /dev/ttyACM0 \
  -r 1250 \
  -m LORA \
  -f 867.1 \
  -s 12 \
  -b 125 \
  -n 1000 \
  -z 100 \
  --dig 3 \
  --pa 0 \
  --pwid 13

预期输出

text
Opening USB communication interface
INFO: Configuring TTY
INFO: Connect to MCU
INFO: Concentrator MCU version is V01.00.00
INFO: MCU status: sys_time:197172 temperature:37.2oC
Note: chip version is 0x10 (v1.0)
TX done
TX done

image49.png

常见错误与修复方法

错误原因修复方法
chip version is 0xFF在 USB 模块上使用了 SPI 模式添加 -u 参数
failed to open COM port ... No such file or directory设备已断开连接(例如 GPIO 复位后)重新插拔或重启设备;不要运行 reset_lgw.sh
dmesg 中出现 USB disconnectreset_lgw.sh 切换了 GPIO 并导致 USB 断开连接USB 模块跳过复位脚本

注意: 在测试 USB 模式模块之前,请勿运行 reset_lgw.sh。该复位脚本会切换 GPIO 引脚,导致模块断电重启并引发 USB 断开连接。STM32 MCU 会在内部自行处理 SX1302 的复位。

SPI

验证设备识别

bash
ls /dev/ttyACM*
udevadm info /dev/ttyACM0 | grep -E "ID_VENDOR|ID_MODEL"

预期输出包括:

bash
E: ID_MODEL=STM32_Virtual_ComPort
E: ID_VENDOR=STMicroelectronics

TX 测试命令

bash
cd ~/sx1302_hal/libloragw
sudo ./test_loragw_hal_tx \
  -u \
  -d /dev/ttyACM0 \
  -r 1250 -m LORA -f 867.1 -s 12 -b 125 \
  -n 1000 -z 100 --dig 3 --pa 0 --pwid 13

预期输出

text
Opening USB communication interface
INFO: Configuring TTY
INFO: Connect to MCU
INFO: Concentrator MCU version is V01.00.00
INFO: MCU status: sys_time:197172 temperature:37.2oC
Note: chip version is 0x10 (v1.0)
TX done
TX done
...

image50.png

HaLow WiFi 模块配置与测试指南

HaLow WiFi 需要一个设备树覆盖层,以暴露 MM6108 芯片所需的 SPI 总线与 GPIO 配置。

将覆盖层添加到 Armbian 环境配置中:

bash
echo "overlays=recomputer-rk3576-devkit-halow-wifi" | sudo tee -a /boot/armbianEnv.txt

重启前先验证文件内容:

bash
tail -2 /boot/armbianEnv.txt

预期输出:

image51.png

重启以应用覆盖层:

bash
sudo reboot

重启后,确认驱动已加载且接口已出现:

bash
dmesg | grep -i morse | grep -E "found|Loaded|initialized|MAC"

预期输出:

text
morse_spi spi3.1: Morse Micro SPI device found, chip ID=0x0306
morse_spi spi3.1: Loaded firmware from morse/mm6108.bin, size 459124, crc32 0x51d355b9
morse_spi spi3.1: Loaded BCF from morse/bcf_default.bin, size 1251, crc32 0x941b2a82
morse_spi spi3.1: Firmware initialized
morse_spi spi3.1: Firmware Manifest MAC: 90:03:71:52:9d:8e

morse-hostapd 和 morse-wpa_supplicant 这两个二进制文件内部会调用 morse_cli,但实际安装的可执行文件名为 morsectrl,因此需要创建一个符号链接。

bash
sudo ln -s /usr/bin/morsectrl /usr/local/bin/morse_cli

该操作只需执行一次。

检查接口:

bash
ip link show | grep -E "wlan0|wlan1|morse0"

AP 模式 创建配置文件:

bash
sudo nano /etc/morse-hostapd.conf

最小可用配置:

text
interface=wlan0
driver=nl80211
ssid=HaLow_Test
country_code=AU          # Change to your region
hw_mode=a
channel=42               # AU channel, see table below
op_class=69
beacon_int=100
dtim_period=2
ieee80211ah=1
s1g_prim_chwidth=1
s1g_prim_1mhz_chan_index=0
s1g_capab=[SHORT-GI-ALL]
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ctrl_interface=/var/run/hostapd

关闭接口并启动 AP:

bash
sudo ip link set wlan0 down
sudo morse-hostapd /etc/morse-hostapd.conf -B

预期输出(成功):

text
s1g mapped ht channel 159
Full Channel Information
    Operating Frequency: 923000 kHz
    Operating BW: 2 MHz
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED

注意: Unable to set RAW 警告并非致命错误,它的出现是因为已安装的驱动版本不支持 RAW(Restricted Access Window,受限访问窗口)。AP 仍会正常启动。

检查 AP 状态:

bash
sudo morse-hostapd_cli -i wlan0 status
sudo morse-hostapd_cli -i wlan0 all_sta   # list connected clients

Station 模式 创建配置文件:

bash
sudo nano /etc/morse-wpa_supplicant.conf

最小配置:

text
ctrl_interface=/var/run/wpa_supplicant
country=AU

network={
    ssid="HaLow_Test"
    psk="12345678"
    key_mgmt=WPA-PSK
}

连接:

bash
sudo ip link set wlan0 down
sudo morse-wpa_supplicant -i wlan0 -c /etc/morse-wpa_supplicant.conf -D nl80211 -B
sudo dhclient wlan0

检查连接状态:

bash
sudo morse-wpa_cli -i wlan0 status
ip addr show wlan0

以太网 RJ45

板载两个千兆以太网(RJ45)口。初次设置时任选一个网口接入网络即可;如需在两个网口之间桥接或路由,还需额外配置软件。

image52.png

端口定义与功能:

  • 1x 标准千兆以太网(GbE):支持 10/100/1000 Mbps 自协商以太网连接。
  • 1x 支持 PoE 的千兆以太网(GbE with PoE PD):除标准千兆网络功能外,该端口还支持 **PoE PD(受电设备)**协议。

注意: 作为 PoE 受电设备(PD),该 RK3576 主板可以直接通过网线从 PoE 交换机(PSE)获取供电,无需额外配备 DC 电源适配器。

注意:

PoE 模块要求: PoE 受电功能并未直接内置于底板上,需要额外单独购买 PoE 扩展模块。如未安装该模块,该端口仅能作为标准千兆以太网端口使用。

PD 与 PSE 说明: 请注意,本设备的角色是 PoE 受电设备(PD),不支持 PoE 供电输出(PSE),即无法为 PoE IP 摄像头等外部设备供电。

系统网络配置: 在 Armbian OS 中,这两个物理端口通常被枚举为 eth0 和 eth1。建议使用标准的 Linux NetworkManager 工具(通过 nmtui 或 nmcli)或 systemd-networkd 来配置静态 IP 地址、网络桥接或链路聚合(bonding)。

DSI

主板配备一个 **4-lane MIPI DSI(22 针)**显示接口,专为连接高分辨率嵌入式 LCD 或工业触摸屏而设计。

接口特性

  • 高带宽传输:采用 4-lane 物理链路设计,相比传统 2-lane 接口具有显著更高的数据吞吐能力,可流畅驱动 1080P 甚至 2K 分辨率的高清显示屏。
  • 物理接口形态:采用 22 针 0.5mm 间距的 FPC(柔性印刷电路)连接器,带有翻盖锁定机构。
  • 显示屏选择: 请使用与示例中屏幕型号匹配的线缆和 overlay。连接其他 Raspberry Pi 显示屏之前,请先确认引脚定义和驱动支持。

DSI 配置与测试指南

在 reComputer-RK3576 上,MIPI DSI 接口通过**设备树覆盖层(DTBO)**进行管理。用户需要根据所连接的显示外设,手动加载相应的覆盖层文件。 打开终端并编辑 Armbian 环境配置文件:

bash
sudo nano /boot/armbianEnv.txt

在文件末尾添加以下行,以指定 DSI 屏幕的覆盖层:

text
overlays=recomputer-rk3576-devkit-raspi-7inch-touchscreen

保存并退出(在 nano 中按 Ctrl + O,再按 Enter 保存,然后按 Ctrl + X 退出)。 更新软件包列表,并确保安装所需的多媒体与显示插件:

bash
sudo apt-get update
sudo apt install v4l-utils -y
sudo apt-get install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-x -y

重启系统以应用更改:

bash
sudo reboot

重启后,验证系统是否已成功初始化图形桌面环境:

bash
echo $XDG_SESSION_TYPE

注意:

x11 或 wayland 只能识别当前的桌面会话,本身并不能确认 DSI 显示屏工作正常;还需确认屏幕有画面显示,如支持触控,还要验证触控输入是否正常。

FPC 排线方向: 插入 FPC 排线时,请严格注意金属触点的朝向,触点必须朝向连接器内部的接触针脚。反向插入可能导致短路或屏幕无法点亮。插入后请确保翻盖锁扣已牢固扣紧。

驱动与设备树: MIPI 屏幕并非"即插即用"。连接显示屏后,你必须在 Armbian OS 中应用相应的设备树覆盖层(例如使用 armbian-add-overlay)或修改 /boot 中的 DTB 文件,以启用对应的面板驱动和背光控制节点。

触控支持: 该 22 针接口通常集成了用于触控反馈的 I2C 信号引脚。如果你使用的是 MIPI 触摸屏,请确保操作系统中已同时加载显示驱动和 I2C 触控 IC 驱动(例如 GT911)。

CSI

板载两个 **4 通道 MIPI CSI(22 针)**摄像头接口。下面的示例配置的是 Raspberry Pi Camera V3 模块。请为自己的传感器选用匹配的线缆、摄像头驱动和 overlay。

接口特性

  • 双 4-Lane 架构:提供两个物理端口(CSI_0 和 CSI_1),每个端口均配备完整的 4-lane 数据通道,可同时处理两路高分辨率或高帧率的工业相机模块。
  • 物理接口形态:采用 22 针 0.5mm 间距的 FPC 连接器。
  • 摄像头选择: 请针对所用摄像头核实引脚定义、排线方向、传感器驱动和镜像支持。仅凭 22 针接口匹配并不足以确认兼容性。

注意:

兼容性与选型: 强烈建议使用经过 Seeed Studio 官方验证的相机模块。使用未经验证或非标准的相机,可能需要开发者自行移植 Linux V4L2(Video for Linux 2)驱动。

线缆连接规范: 请务必留意 FPC 排线金属触点的朝向。此外,在工业部署或机器人框架集成过程中,请注意 MIPI 信号对电磁干扰(EMI)非常敏感,建议将相机排线长度控制在 30 cm(12 英寸)以内。

多相机并发采集: 在 Linux 中,两路相机通常被枚举为 /dev/video0 和 /dev/video1。如果你的 AI 应用或多媒体框架(如 GStreamer 或 OpenCV)需要同时采集两路视频流,请确保合理分配内存带宽,并使用硬件加速插件以获得最佳性能。

CSI 配置与测试指南

本节将指导你同时启用双 MIPI CSI 摄像头(以树莓派 Camera V3 为例)。 编辑环境配置文件:

bash
sudo nano /boot/armbianEnv.txt

在文件末尾添加以下行,为 CAM0 和 CAM1 同时启用 V3 相机驱动:

text
overlays=recomputer-rk3576-devkit-cam0-rpi-v3 recomputer-rk3576-devkit-cam1-rpi-v3

注意:多个覆盖层之间必须用单个空格分隔。 保存文件并重启设备:

bash
sudo reboot

重启后,使用 v4l-utils 工具链验证并测试相机状态。 列出可用的相机设备与节点:

bash
v4l2-ctl --list-devices

查看指定相机(如 /dev/video22)所支持的像素格式与分辨率:

bash
v4l2-ctl --list-formats-ext --device=/dev/video22

相机帧率基准测试:测试特定分辨率与像素格式(例如 3280x2464 MJPG)下的流传输性能:

bash
v4l2-ctl -d /dev/video22 --set-fmt-video=width=3280,height=2464,pixelformat='MJPG' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=3280,height=2464 --stream-count=500

安装 GStreamer 命令行工具:

bash
sudo apt install gstreamer1.0-tools -y

运行以下管线以预览实时相机画面(请将 device=/dev/video11 替换为通过 v4l2-ctl --list-devices 获取到的实际视频节点):

bash
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3280,height=2464

HDMI

主板配备一个标准的 HDMI(Type-A)端口,主要用于连接外部显示器、电视或工业控制屏幕,提供高清同步的音视频输出。

image57.png

接口特性

  • 超高清分辨率:凭借 RK3576 强大的多媒体处理能力,该接口支持高达 4K 的超高清视频输出,非常适合渲染清晰的 GUI 仪表盘或多路监控视频画面。
  • 音视频同步:HDMI 端口可同时传输视频与数字音频信号。如果所连接的显示器内置扬声器,系统音频将直接通过 HDMI 连接播放,无需额外的 3.5mm 音频线。
  • 多屏显示支持:该 HDMI 端口可与板载的 Type-C(DP 1.4)及 MIPI DSI 接口协同工作。开发者可以在 Linux 操作系统中配置最多三块屏幕的镜像显示或扩展桌面模式。

注意:

线缆标准: 为确保稳定性并避免 4K 分辨率下出现屏幕闪烁,请务必使用符合 HDMI 2.0 或更高规格的优质线缆。

EDID 与分辨率自动检测: 操作系统(如 Armbian / Ubuntu)会在启动时自动读取显示器的 EDID 信息,以应用最佳分辨率。如果遇到"无信号"问题,可以通过 SSH 登录设备,并使用 xrandr 命令调试显示输出状态。

无头模式操作: 如果你将设备部署为纯粹的边缘计算节点、不连接物理显示器,操作系统可能会暂停桌面 UI 渲染以节省资源。如果在无头模式下仍需要 VNC 远程桌面访问,建议在该端口上插入一个"HDMI 欺骗头(显示模拟器)"。