
1. RK3568与FG650 5G模组初探RK3568作为瑞芯微推出的高性能嵌入式处理器在工业控制、边缘计算等领域应用广泛。而广和通FG650 5G模组则是当前市面上性价比较高的5G通信解决方案之一。将两者结合能为嵌入式设备提供稳定的5G联网能力。我在实际项目中多次使用FG650模组它的最大特点是支持USB 2.0/3.0双接口通信默认工作在NCM模式。NCMNetwork Control Model是USB-IF定义的标准化网络通信协议相比RNDIS有更好的跨平台兼容性。如果模组工作模式不对可以通过串口发送AT指令ATGTUSBMODE36切换到NCM模式。2. 内核驱动适配实战2.1 添加设备VID/PID首先需要在内核中注册FG650的设备标识。打开drivers/usb/serial/option.c文件找到option_ids数组。FG650在不同工作模式下会使用不同的PID建议将所有模式都添加进去#define FIBOCOM_VENDOR_ID 0x2CB7 #define FIBOCOM_PRODUCT_FG650_ECM 0x0A04 #define FIBOCOM_PRODUCT_FG650_NCM 0x0A05 #define FIBOCOM_PRODUCT_FG650_RNDIS 0x0A06 static const struct usb_device_id option_ids[] { { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_ECM) }, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_NCM) }, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_RNDIS) }, // 其他设备... };这里有个坑要注意ECM/NCM/RNDIS模式的PID各不相同如果只添加当前模式的PID切换工作模式后驱动就无法识别了。2.2 接口过滤机制FG650的USB接口包含通信接口和AT指令接口需要防止USB串口驱动错误加载网络接口。在option.c的probe函数中添加过滤逻辑if (serial-dev-descriptor.idVendor cpu_to_le16(FIBOCOM_VENDOR_ID) (serial-dev-descriptor.idProduct cpu_to_le16(FIBOCOM_PRODUCT_FG650_ECM) || serial-dev-descriptor.idProduct cpu_to_le16(FIBOCOM_PRODUCT_FG650_NCM) || serial-dev-descriptor.idProduct cpu_to_le16(FIBOCOM_PRODUCT_FG650_RNDIS)) serial-interface-cur_altsetting-desc.bInterfaceNumber 1) { printk(KERN_INFO Filter out Fibocom network interface\n); return -ENODEV; }这段代码会过滤掉前两个接口通常是网络接口确保它们由对应的网络驱动处理。3. 电源管理关键细节3.1 上电时序控制FG650模组的上电需要严格遵循时序要求。我整理了一个可靠的启动脚本#!/bin/bash case $1 in power_on) # 保持POWER_KEY低电平1.5秒 echo 1 /sys/class/gpio/gpio15/value sleep 1.5 echo 0 /sys/class/gpio/gpio15/value # 复位信号40ms低电平 echo 1 /sys/class/gpio/gpio16/value sleep 0.05 echo 0 /sys/class/gpio/gpio16/value # 启用USB VBUS供电 echo 1 /sys/class/gpio/gpio17/value ;; power_off) # POWER_KEY低电平4秒关机 echo 1 /sys/class/gpio/gpio15/value sleep 4 echo 0 /sys/class/gpio/gpio15/value # 关闭VBUS echo 0 /sys/class/gpio/gpio17/value ;; esac实测发现VBUS供电不稳定会导致模组异常断开建议在硬件设计时增加大容量电容。3.2 热插拔处理在RK3568上需要配置好USB热插拔检测。修改设备树文件确保USB控制器配置了正确的电源管理属性usb_host0_ehci { status okay; pinctrl-names default; pinctrl-0 usb_host0_pins; vbus-supply vcc5v0_host; };4. 设备枚举与网络配置4.1 枚举过程分析FG650的枚举过程分为两个阶段通过USB2.0接口完成基础枚举通过USB3.0接口建立高速连接使用lsusb -v命令可以查看枚举详情。正常状态下应该看到三个接口接口0AT指令端口ttyUSB0接口1诊断端口ttyUSB1接口2NCM网络接口4.2 网络接口配置枚举成功后会出现enxMAC地址格式的网络接口。建议创建udev规则固定接口名# /etc/udev/rules.d/70-fg650.rules SUBSYSTEMnet, ACTIONadd, ATTR{address}8e:c5:64:fd:4e:18, NAMEwwan0然后配置NetworkManager或systemd-networkd管理连接。对于NCM模式不需要特殊驱动配置内核会自动处理。5. 拨号上网实战5.1 AT指令交互FG650通过ttyUSB0接收AT指令。建议使用atinout工具进行可靠通信# 查询信号强度 echo -e ATCSQ\r /dev/ttyUSB0 # 激活NCM模式 echo -e ATGTUSBMODE36\r /dev/ttyUSB0 # 启用数据连接 echo -e ATCGDATA\M-RAW_IP\,1\r /dev/ttyUSB05.2 自动化拨号脚本我常用的拨号脚本框架如下#!/bin/bash # 初始化串口 stty -F /dev/ttyUSB0 115200 raw -echo # 等待模组就绪 while ! echo -e AT\r | grep -q OK; do sleep 1 done # 配置APN echo -e ATCGDCONT1,\IP\,\your_apn\\r /dev/ttyUSB0 # 激活数据连接 echo -e ATCGACT1,1\r /dev/ttyUSB0对于需要持久化连接的应用建议使用pppd或modemmanager进行连接管理。6. 常见问题排查6.1 枚举失败处理如果lsusb看不到设备按以下步骤排查检查VBUS电压是否稳定在5V±5%测量POWER_KEY信号是否满足时序要求确认内核配置已启用USB_NET_CDC_NCM驱动检查USB线材质量建议使用带屏蔽的USB3.0线缆6.2 网络连接不稳定遇到频繁断连时# 查看USB错误计数 dmesg | grep usb # 调整USB驱动参数 echo 1000 /sys/module/usbcore/parameters/autosuspend在RK3568上建议关闭USB自动挂起功能特别是在工业环境中。