一般在嵌入式设备中,使用有线网络或者WIFI来联网,但是使用有线网络或者 WIFI有很多限制,因为要布线,即使是 WIFI 也得先布线,然后在接个路由器。有很多场合是不方便布线的,这个时候5G和4G模块就突出它的优势了。
1.硬件
1.1 5G模块简介
下面是一些部分不同厂商的模块图片:
很多5G和4G模块都是MiniPCIE接口,这些 5G 模块虽然用了 MiniPCIE 接口,但是实际上的通信接口都是 USB,所以5G模块的驱动就转换为了USB驱动。而这些 5G 模块厂商都提供了详细的文档讲解如何在 Linux下使用5G模块,以及如何修改 Linux内核来加入5G模块驱动。需要注意的是模块工作是需要天线的,一定记得要和天线一起搭配才能正常使用。
1.2 RG500Q-CN简介
我用的5G模块是使用的上海移远的RG500Q-CN,其特性如下:
I.最高下行速率可达 2.5 Gbps,最高上行速率可达 900 Mbps;
II.支持5G NSA和SA模式;
III.向下兼容4G/3G;
IV.集成多星座 GNSS 接收机,满足不同环境下对快速、精准定位
的需求;
V.支持多种功能: DFOTA*和 VoLTE(可选);
2.驱动移植
2.1添加VID PID
为了能够正确识别到模块,添加相应的VID PID到驱动文件:drivers/usb/serial/option.c
2.2添加USB网络驱动到drivers/usb/serial/option.c
2.3结构体option_1port_device中添加休眠唤醒代码:
文档相关描述:
2.4添加零包处理代码:/drivers/usb/serial/usb_wwan.c.
文档相关描述:
3.RG500Q模块的使用
3.1确认模块已被正常加载
因为模块是通过usb总线连接到我们的芯片,所以可以通过lsusb查看到模块的基本信息:
如图所示:红色标框就是5G模块,显示了产商信息以及VID和PID;
3.2如何和模块进行通信
进入系统后,在/dev/下面会发现多了ttyUSB0~ttyUSB3这几个设备,这4个tty设备接口就是RG500Q虚拟出来的串口,关于这个几个设备接口,其含义在文档中的描述如下:
所以我们就是主要通过这几个port和模块进行通信。
3.3设置波特率
我们在主控芯片侧通过microcom工具进行设置,Microcom 是一款在 UNIX 和类 UNIX 系统中使用的串行通信软件。它是一个简单而功能强大的终端程序,可以用于与远程设备进行串行通信,如通过串口与调制解调器、路由器、交换机等设备进行交互。
具体操作如下:microcom -s 115200 /dev/ttyUSB2 &,为了方便后台监视模块的回显,一般会再执行一下:cat /dev/ttyUSB2 &
3.4查看模块固件版本号
每个模块在出厂前厂家都会烧录好其内部的固件,当我们想要更换里面固件的时候,也有相应的工具,查询其版本号的指令:echo -e "ATI\r\n" > /dev/ttyUSB2
3.4.1如何更新模块的固件
目前移远的这款5G模块他们提供了QFirehose这个工具进行内部固件的升级,这个工具使用他们提供的源码包进行交叉编译即可得到:
将QFirehose可执行文件和将要升级的固件包push到我们的系统同一级目录下,然后使用:./QFirehose -f ./RG500QCNAAR12A06M4G即可开始升级。
3.5拨打电话
当插入SIM卡后,可以使用如下AT指令进行拨打电话:echo -e "ATD18123074359;\r\n" > /dev/ttyUSB2
3.6如何拨号上网
由于我们的项目的5G模块还外接了一个WIFI(FG50),因此在进行拨号上网的时候,就有两种模式:
⑴host借助WIFI模块上网,此时5G模块处于ECM网卡模式;
⑵host使用蜂窝上网,模块需要借助qcm拨号工具拨号(qcm拨号需要加载qmi驱动,这个qmi驱动移远也会提供,按照官方文档将其编译进内核即可使用),此时5G模块使用的是rmnet网卡(wwanx),另外这个qcm的拨号工具也会一并提供,交叉编译后得到(高通模块ECM模式下自动拨号,可不借助qmi拨号)。
host使用蜂窝上网,模块使用ECM网卡模式也是可以的。因此,不做切换网卡模式的话,建议使用ECM网卡。
WiFi STA mode的优先级高于蜂窝拨号,即在使用蜂窝拨号上网时启用STA WiFi mode,ECM网卡自动使用WiFi数据。
两种场景下切换模块网卡模式:at+qcfg="usbnet",0 //rmnet at+qcfg="usbnet",1 //ecm (重启生效)
此时直接ping www.baidu.com即可。