news 2026/6/11 11:46:13

RK3568驱动适配:从零到一集成广和通FG650 5G模组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RK3568驱动适配:从零到一集成广和通FG650 5G模组

1. RK3568与FG650 5G模组初探

RK3568作为瑞芯微推出的高性能嵌入式处理器,在工业控制、边缘计算等领域应用广泛。而广和通FG650 5G模组则是当前市面上性价比较高的5G通信解决方案之一。将两者结合,能为嵌入式设备提供稳定的5G联网能力。

我在实际项目中多次使用FG650模组,它的最大特点是支持USB 2.0/3.0双接口通信,默认工作在NCM模式。NCM(Network Control Model)是USB-IF定义的标准化网络通信协议,相比RNDIS有更好的跨平台兼容性。如果模组工作模式不对,可以通过串口发送AT指令AT+GTUSBMODE=36切换到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的枚举过程分为两个阶段:

  1. 通过USB2.0接口完成基础枚举
  2. 通过USB3.0接口建立高速连接

使用lsusb -v命令可以查看枚举详情。正常状态下应该看到三个接口:

  • 接口0:AT指令端口(ttyUSB0)
  • 接口1:诊断端口(ttyUSB1)
  • 接口2:NCM网络接口

4.2 网络接口配置

枚举成功后会出现enx<MAC地址>格式的网络接口。建议创建udev规则固定接口名:

# /etc/udev/rules.d/70-fg650.rules SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="8e:c5:64:fd:4e:18", NAME="wwan0"

然后配置NetworkManager或systemd-networkd管理连接。对于NCM模式,不需要特殊驱动配置,内核会自动处理。

5. 拨号上网实战

5.1 AT指令交互

FG650通过ttyUSB0接收AT指令。建议使用atinout工具进行可靠通信:

# 查询信号强度 echo -e "AT+CSQ\r" > /dev/ttyUSB0 # 激活NCM模式 echo -e "AT+GTUSBMODE=36\r" > /dev/ttyUSB0 # 启用数据连接 echo -e "AT+CGDATA=\"M-RAW_IP\",1\r" > /dev/ttyUSB0

5.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 "AT+CGDCONT=1,\"IP\",\"your_apn\"\r" > /dev/ttyUSB0 # 激活数据连接 echo -e "AT+CGACT=1,1\r" > /dev/ttyUSB0

对于需要持久化连接的应用,建议使用pppdmodemmanager进行连接管理。

6. 常见问题排查

6.1 枚举失败处理

如果lsusb看不到设备,按以下步骤排查:

  1. 检查VBUS电压是否稳定在5V±5%
  2. 测量POWER_KEY信号是否满足时序要求
  3. 确认内核配置已启用USB_NET_CDC_NCM驱动
  4. 检查USB线材质量,建议使用带屏蔽的USB3.0线缆

6.2 网络连接不稳定

遇到频繁断连时:

# 查看USB错误计数 dmesg | grep usb # 调整USB驱动参数 echo 1000 > /sys/module/usbcore/parameters/autosuspend

在RK3568上建议关闭USB自动挂起功能,特别是在工业环境中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 11:45:54

别再死磕ResNet了!用PyTorch复现VGG-16在CIFAR-10上也能轻松突破90%准确率(附完整代码与调参心得)

经典模型逆袭&#xff1a;VGG-16在CIFAR-10上的调优实战与深度思考当整个AI社区都在追逐Transformer和扩散模型时&#xff0c;我决定做一次反潮流的实验——用最基础的VGG-16网络在CIFAR-10数据集上挑战90%准确率。这个看似简单的目标背后&#xff0c;隐藏着对深度学习本质的思…

作者头像 李华
网站建设 2026/6/11 11:45:21

告别物理摄像头:一个开源Hook方案如何让安卓App用上本地视频文件(微信/QQ实测)

安卓免Root虚拟摄像头实战&#xff1a;用本地视频替代真实摄像头的完整指南你是否遇到过这些场景&#xff1a;视频会议时背景杂乱却无法虚拟背景、网课需要预录演示但平台限制真实摄像头、或是单纯想用创意视频替代单调的自拍画面&#xff1f;传统解决方案往往需要root权限或专…

作者头像 李华
网站建设 2026/6/11 11:43:15

深入解析S12ZVHY ADC12B_LBA_V1中断机制与双缓冲配置实战

1. 项目概述与核心价值 在嵌入式系统开发&#xff0c;尤其是汽车电子、工业控制或高精度传感器数据采集领域&#xff0c;模数转换器&#xff08;ADC&#xff09;的性能和可靠性往往是整个系统成败的关键。飞思卡尔&#xff08;现恩智浦&#xff09;S12ZVHY/S12ZVHL系列微控制器…

作者头像 李华
网站建设 2026/6/11 11:42:07

Vivado综合约束实战:DONT TOUCH的优先级策略与布线保留

1. Vivado设计中的DONT TOUCH属性解析 在FPGA设计过程中&#xff0c;我们经常会遇到一个让人头疼的问题&#xff1a;明明代码里写得好好的信号或模块&#xff0c;经过综合工具优化后突然"消失"了。这种情况在调试关键路径或保留特定逻辑时尤为常见。这时候&#xff0…

作者头像 李华
网站建设 2026/6/11 11:32:06

FigmaCN:5分钟解锁全中文Figma设计体验

FigmaCN&#xff1a;5分钟解锁全中文Figma设计体验 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗&#xff1f;FigmaCN中文汉化插件为你提供完美的解决方…

作者头像 李华