RK3568移植5G通信模组

  1. 5G通信模组

这次移植的5G通信模组选择的是深圳广和通公司生产的FG650 5G通信模组,对外的通信数据接口为USB2.0, USB3.0两个接口。FG650模组默认工作在NCM驱动模式,如果不是可以通过串口发送AT指令AT+GTUSBMODE=36来修改成工作在NCM模式。

  1. linux内核代码的修改

可以根据厂家的提供的《FIBOCOM Fx650 & FG652系列 ECM & NCM & RNDIS拨号指南 _Linux》文档说明来进行,

内核代码的修改主要修改就2个点。

A.打开内核源码文件 打开内核源码文件 打开内核源码文件 打开内核源码文件 打开内核源码文件 option.c(路径一般为 路径一般为 路径一般为 drivers/usb/serial/option.c)。在源码中找到 。在源码中找到 。在源码中找到 。在源码中找到 。在源码中找到 option_ids数组, 数组, 在数组中添加 在数组中添加 在数组中添加 FG650的 PID/VID。 注意 ECM/NCM/RNDIS等不同模式下的 等不同模式下的 等不同模式下的 等不同模式下的 PID是不一样的。需要根据模 是不一样的。需要根据模 是不一样的。需要根据模 是不一样的。需要根据模 是不一样的。需要根据模 是不一样的。需要根据模 是不一样的。需要根据模 是不一样的。需要根据模 组的 模式添加相应组的 模式添加相应组的 模式添加相应组的 模式添加相应组的 模式添加相应PID/VID(请参考 (请参考 (请参考 USB端口章节),或者可以把 端口章节),或者可以把 端口章节),或者可以把 端口章节),或者可以把 端口章节),或者可以把 端口章节),或者可以把 端口章节),或者可以把 FG650支持的所有模式 支持的所有模式 支持的所有模式 支持的所有模式 ID都添加上 都添加上 都添加上去。

#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[] = { 
#if 1 
{ 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) },
#endif

B. 在 USB串口驱动中,过滤 串口驱动中,过滤 串口驱动中,过滤 串口驱动中,过滤 串口驱动中,过滤 ECM/NCM/RNDIS接口。由于 接口。由于 USB串口跟 串口跟 ECM/NCM/RNDIS都属于 都属于 非标准 CDC设备,需要防止 设备,需要防止 设备,需要防止 设备,需要防止 设备,需要防止 设备,需要防止 设备,需要防止 ECM/NCM/RNDIS口被 USB串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常串口驱动加载 而导致无法正常ECM/NCM/RNDIS口驱动。对于linux内核版本在3.8以上的推荐在probe函数内判断当前的interface num进行过滤,具体如下:

if (serial->dev->descriptor.idVendor == cpu_to_le16(FIBOCOM_ VENDOR_ID) && serial->dev->descriptor.idProduct == cpu_to_le16(FIBOCOM_PRODUCT_FG650_ECM) && serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1) 
{ 
    printk(KERN_INFO “Discover the 4th interface for fibocom\n”); 
    return -ENODEV;
}
if (serial->dev->descriptor.idVendor == cpu_to_le16(FIBOCOM_ VENDOR_ID) && serial->dev->descriptor.idProduct == cpu_to_le16(FIBOCOM_ PRODUCT_FG650_NCM) &&
serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1) 
{ 
    printk(KERN_INFO “Discover the 4th interface for fibocom\n”); 
    return -ENODEV;
}
if (serial->dev->descriptor.idVendor == cpu_to_le16(FIBOCOM_ VENDOR_ID) && serial->dev->descriptor.idProduct == cpu_to_le16(FIBOCOM_ PRODUCT_FG650_RNDIS) && serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1) 
{ 
    printk(KERN_INFO “Discover the 4th interface for fibocom\n”); 
    return -ENODEV;
}

另外5G模组上电后,要通过POWER_KEY按键来进行开机操作,这个可以通过shell脚本程序如下操作IO来实现,另外注意5G模组的USB接口的VBUS信号要保持5V供电,否则USB连接一会后,5G模组会主动断开。

#!/bin/bash

case $1 in
power_on)
        echo "--------- control 5G module power on-----------"
        #5G module powerkey low level for 1s-2.5s startup
        echo 1 > /sys/class/leds/5G-powerkey/brightness
        sleep 1.5
        echo 0 > /sys/class/leds/5G-powerkey/brightness
        #reset the 5G module low level for 40ms-750ms
        echo 1 > /sys/class/leds/5G-reset/brightness
        sleep 0.5
        echo 0 > /sys/class/leds/5G-reset/brightness

        #USB VBUS power on
        echo 1 > /sys/class/leds/5G-USB-VBUS/brightness

        echo "-------------5G module alread open -------------"
        ;;
power_off)
        echo "--------- control 5G module power off-----------"
        #5G module powerkey low level for 3s-7s startup
        echo 1 > /sys/class/leds/5G-powerkey/brightness
        sleep 4
        echo 0 > /sys/class/leds/5G-powerkey/brightness
        #5G USB VBUS power off
        echo 0 > /sys/class/leds/5G-USB-VBUS/brightness

        echo "-------------5G module alread close -------------"
        ;;
*)
        echo "please input the $0 {power_on or power_off}"
        ;;
esac

3. 5G模组枚举

5G模组执行开机操作后,linux操作系统会对5G模组进行枚举,这个过程是先通过USB2.0接口进行枚举,之后通过USB2.0接口进行3.0接口的枚举。整个过程如下图:

枚举后可以通过lsusb来查看设备;

通过上图可以看到5G模组已经正常枚举成功了,可以通过ifconfig来查看5G网卡。

4. 5G模组拔号上网

经过上面的操作,5G网卡已经出来了,但是执行ping -I enx8ec564fd4e18 www.baidu.com,ping不通,这是由于5G模组未进行拔号,无法连接到公网。

5G模组的AT指令串口虚拟为ttyUSB0,在调试阶段,先执行cat /dev/ttyUSB0 & 运行一个后台程序来读取AT串口, 发送指令可以通过echo -e "at\r" > /dev/ttyUSB0的方式来发送AT指令后模组。

拔号流程可以参考厂家文档,其中上网的最关键的一步操作就是使用用 AT+GTRNDIS=1,1 激活上网,激活成功后返回IP地址就表示上网了。

到此5G网卡已经可以连接外网,完成了调试,拔号的过程是AT指令的操作,建议最后写成程序来控制拔号,模组的开机,关机操作等。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值