移远官网

RM500U-CN直接用quectelCM初始化为什么一直循环requestQueryDataCall?

                          :$  sudo ./quectelCM

[09-25_14:47:36:081] Quectel_QConnectManager_Linux_V1.6.0.24
[09-25_14:47:36:082] Find successed, path = /sys/bus/usb/devices/6-1 idVendor=0x2c7c idProduct=0x900, bus=0x006, dev=0x002
[09-25_14:47:36:082] Auto find qmichannel = /dev/ttyUSB2
[09-25_14:47:36:082] Auto find usbnet_adapter = usb0
[09-25_14:47:36:082] netcard driver = cdc_ncm, driver version = 5.10.160
[09-25_14:47:36:082] Modem works in ECM_RNDIS_NCM mode
[09-25_14:47:36:110] /proc/8745/fd/7 → /dev/ttyUSB2
[09-25_14:47:36:110] /proc/8745/exe → /mnt/z_test/quectel/source/exe_demo/quectelCM_revise
[09-25_14:47:36:110] mark:is brother process dir=/proc,file=8745 → filename=/mnt/z_test/quectel/source/exe_demo/quectelCM_revise
[09-25_14:47:51:112] force kill /proc/8745/exe → /mnt/z_test/quectel/source/exe_demo/quectelCM_revise
[09-25_14:47:53:115] fd= 7
[09-25_14:47:53:115] atc_fd = 7
[09-25_14:47:53:115] AT> ATE0Q0V1
[09-25_14:47:53:122] AT< OK
[09-25_14:47:54:122] AT> AT+QCFG=“NAT”,1
[09-25_14:47:54:140] AT< OK
[09-25_14:47:54:140] AT> AT+QCFG=“usbnet”
[09-25_14:47:54:143] AT< +QCFG: “usbnet”,5
[09-25_14:47:54:143] AT< OK
[09-25_14:47:54:143] AT> AT+QNETDEVCTL=?
[09-25_14:47:54:143] AT< +QNETDEVCTL: (1-8),(0-3),(0,1)
[09-25_14:47:54:143] AT< OK
[09-25_14:47:54:144] AT> AT+C5GREG=2
[09-25_14:47:54:145] AT< OK
[09-25_14:47:54:145] mark: AT+C5GREG=2
[09-25_14:47:54:145] AT> AT+QNETDEVSTATUS=?
[09-25_14:47:54:146] AT< +QNETDEVSTATUS: (1-8)
[09-25_14:47:54:146] AT< OK
[09-25_14:47:54:146] AT> AT+CGMR
[09-25_14:47:54:147] AT< RM500UCNAAR03A03M2G_01.001.01.001
[09-25_14:47:54:147] AT< OK
[09-25_14:47:54:147] AT> AT+CPIN?
[09-25_14:47:54:149] AT< +CPIN: READY
[09-25_14:47:54:149] AT< OK
[09-25_14:47:54:149] AT> AT+QCCID
[09-25_14:47:54:151] AT< +QCCID: 89860323245540897594
[09-25_14:47:54:152] AT< OK
[09-25_14:47:54:152] requestGetICCID 89860323245540897594
[09-25_14:47:54:152] AT> AT+CIMI
[09-25_14:47:54:153] AT< 460115484072342
[09-25_14:47:54:153] AT< OK
[09-25_14:47:54:153] requestGetIMSI 460115484072342
[09-25_14:47:54:153] AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?;+COPS=3,2;+COPS?
[09-25_14:47:54:158] AT< +COPS: 0,0,“CHN-TELECOM”,7
[09-25_14:47:54:163] AT< +COPS: 0,1,“CTCC”,7
[09-25_14:47:54:169] AT< +COPS: 0,2,“46011”,7
[09-25_14:47:54:169] AT< OK
[09-25_14:47:54:170] at_netdevstatus marked
[09-25_14:47:54:170] AT> AT+QNETDEVSTATUS=1
[09-25_14:47:54:251] AT< +QNETDEVSTATUS: 10.37.207.246,255.255.255.0,10.37.207.1,202.101.172.37,202.101.173.157,
[09-25_14:47:54:251] AT< OK
[09-25_14:47:54:251] requestQueryDataCall err=0, call_state=2
[09-25_14:47:54:251] at_netdevstatus marked
[09-25_14:47:54:251] AT> AT+QNETDEVSTATUS=1
[09-25_14:47:54:342] AT< +QNETDEVSTATUS: 10.37.207.246,255.255.255.0,10.37.207.1,202.101.172.37,202.101.173.157,
[09-25_14:47:54:342] AT< OK
[09-25_14:47:54:342] requestGetIPAddress 10.37.207.246
[09-25_14:47:54:342] requestGetIPAddress err=0
[09-25_14:47:54:342] ifconfig usb0 up
[09-25_14:47:54:345] No default.script found, it should be in ‘/usr/share/udhcpc/’ or ‘/etc//udhcpc’ depend on your udhcpc version!
[09-25_14:47:54:345] busybox udhcpc -f -n -q -t 5 -i usb0
[09-25_14:47:54:346] 11111 busybox udhcpc -f -n -q -t 5 -i usb0
udhcpc: started, v1.30.1
udhcpc: sending discover
udhcpc: sending select for 192.168.42.2
udhcpc: lease of 192.168.42.2 obtained, lease time 86400
[09-25_14:48:09:508] at_netdevstatus marked
[09-25_14:48:09:508] AT> AT+QNETDEVSTATUS=1
[09-25_14:48:09:602] AT< +QNETDEVSTATUS: 10.37.207.246,255.255.255.0,10.37.207.1,202.101.172.37,202.101.173.157,
[09-25_14:48:09:602] AT< OK
[09-25_14:48:09:602] requestQueryDataCall err=0, call_state=2
[09-25_14:48:24:617] at_netdevstatus marked
[09-25_14:48:24:617] AT> AT+QNETDEVSTATUS=1
[09-25_14:48:24:713] AT< +QNETDEVSTATUS: 10.37.207.246,255.255.255.0,10.37.207.1,202.101.172.37,202.101.173.157,
[09-25_14:48:24:713] AT< OK
[09-25_14:48:24:714] requestQueryDataCall err=0, call_state=2
[09-25_14:48:39:729] at_netdevstatus marked
[09-25_14:48:39:729] AT> AT+QNETDEVSTATUS=1
[09-25_14:48:39:824] AT< +QNETDEVSTATUS: 10.37.207.246,255.255.255.0,10.37.207.1,202.101.172.37,202.101.173.157,
[09-25_14:48:39:824] AT< OK
[09-25_14:48:39:824] requestQueryDataCall err=0, call_state=2
[09-25_14:48:54:836] at_netdevstatus marked
[09-25_14:48:54:836] AT> AT+QNETDEVSTATUS=1
[09-25_14:48:54:929] AT< +QNETDEVSTATUS: 10.37.207.246,255.255.255.0,10.37.207.1,202.101.172.37,202.101.173.157,
[09-25_14:48:54:929] AT< OK
[09-25_14:48:54:929] requestQueryDataCall err=0, call_state=2

目前通过断点查到可能是atc_request_ops在循环获取,同时一直在拨号,我通过在qmi_main函数中设置requestQueryDataCall的次数也无法停止跳出while(1)死循环,求解答,同时还有一个问题是kill_brother_process中总是只能保证第一次初始化没问题,后面只要执行初始化就会被force kill,尝试了僵尸进程处理不掉???求解答,求讨论,跪谢!。。。为了防止接收不到信息,email: xfzeng_01@163.com

这里是因为其他应用(可能是另外一个quectel-CM)打开了ttyUSB2,回线kill 掉其他的程序。

这个log没什么问题。如果usb0 没有ip地址,应该是DHCP过程ip地址没有assign到网卡上,一般我们建议客户将quectel-CM源码里的default.script 放到 /etc/udhcpc/ 里。
这个quectel-CM的版本也有些旧,可以试下新的版本。

同时这个quectel-CM拨号工具本身有手册或者技术文档介绍吗?新手刚接触项目看了源码对照AT命令一顿测试,导致对错都难以鉴别

谢谢您的解答!但还是有几个问题
1.这个循环这样requestquerydatacall是什么原因呀?我在rk3588上也挂udhcpc -i usb0了可以ping通百度。但是如果直接运行编译脚本就会这样循环不止,是正常现象吗?我的需求是能够./quectelcm -s 信息 -p 信息 -自定义tcp内容 。
2.default.script已经放进去了,但是不知道怎么检查是否assign到网卡,ifconfig可以看到usb0是有ip的。
3.新版本的拨号工具在哪里下载呢?

RM500U 使用quectel-CM,其实就是follow 模组的AT指令拨号流程。
你可以停掉quectel-CM, 直接自己用AT指令拨号。quectel-CM 会监听是否断网是否断开拨号了。

看看usb0 上是否有ip 地址,能不能上网。

问题我现在是在rk3588上面接的RM500U,在终端或者通过串口发不了AT命令,只能在quectel-CM拨号工具里添加argv吗(例如下面的所写的)?还是我的方式本身是错的呢?
static int init_pdp(void) {
char command[100];
snprintf(command, sizeof(command), “AT+QICSGP=1,1,“CTNET”,”","",0 ");
//APN▒▒▒▒Ϊ▒й▒▒▒š▒CTNET▒▒
ATResponse *response = NULL;

int ret = at_send_command_singleline(command, "+QICSGP:", &response);

if (ret == 0 && response != NULL) {
    if (strstr(response->finalResponse, "OK")) {
        at_response_free(response);
        return 0; // ▒ɹ▒
    }
}

if (response != NULL) {
    at_response_free(response);
}

return -1; // ʧ▒▒

}

while (opt < argc) {
if (argv[opt][0] != ‘-’)
return usage(argv[0]);

    switch (argv[opt++][1])
            //argv[opt]▒ǵ▒ǰ▒▒▒▒IJ▒▒▒
            //argv[opt][1]▒ǵ▒ǰ▒▒▒▒IJ▒▒▒(▒ַ▒)▒ĵڶ▒▒▒▒ַ▒
            //▒▒һ▒▒▒ַ▒▒▒ѡ▒▒▒־▒▒▒ӵڶ▒▒▒▒ַ▒ʼ▒▒▒
    {
       //▒Լ▒д▒IJ▒▒֣▒▒▒▒▒▒▒▒ﲢ▒▒▒▒▒▒ֹ▒▒▒Ź▒▒▒ѭ▒▒requestQueryDataCall▒▒▒▒
                    case 'I':
                            if (has_more_argv()) {
                                    strncpy(profile.server_ip, argv[opt++], sizeof(profile.server_ip));
                                    dbg_time("--------------------2------------");
                            }
                    break;

                    case 'P':
                            if (has_more_argv()) {
                                    profile.server_port = atoi(argv[opt++]);
                                    dbg_time("--------------------3------------");
                            }
                    break;

}
// ▒▒ʼ▒▒▒▒▒▒▒▒
ret = init_pdp();
dbg_time(“ret = %d”,ret);
if (ret != 0) {
dbg_time(“▒▒ʼ▒▒▒▒▒▒▒▒ʧ▒▒”);
return -1;
}

这个quectel-CM会打开ttyUSB2,
应该还有另外一个AT串口可以自己发AT指令。

是可以配置ttyUSB2的串口吗?这个该怎么找呢?

你可以用ttyUSB3 去发AT

是先用quectel-CM拨号工具先初始化,然后写接口函数配置我想做的TCP通信部分的AT命令,然后创建ttyUSB3发吗?那是不是意味着ttyUSB2负责初始化拨号,ttyUSB3负责联网成功后的扩展部分呢?另外ttyUSB3怎么创建呀

quectel-CM 会去打开ttyUSB2,并且会一直占用。
如果你有自己的应用需要发AT,可以用ttyUSB3.

在自己的应用中给ttyUSB3发AT时,quectel-CM拨号工具需要关闭吗,还是让它一直循环出现requestQueryDataCall数据查询? 我对着源码和手册看了一周,最后回顾发现连这个工具是干什么的都分不清楚了 :sob: 我理解的是通过qmi或者其他的协议去检测到RM设备,然后配置网络初始化。但是它总是在执行./quectel-CM后出现一开始log中循环的问题(也可能我还是没理解那个qmi_main中对于requestQueryDataCall函数的意义。。。)
但是我现在想要实现两块搭载RK3588的RM500U实现TCP或者UDP通信,却始终找不到如何将tcp/ip应用指导手册那一部分的AT命令传输进去,从而实现后续传输字符或者文件的功能。 求大佬指教!


这个地方查到的是ttyUSB2是唯一可以交互的虚拟串口,我用busybox microcom /dev/ttyUSB3 也发送不了AT命令,这是不是得更变思路,或者给我一个可以利用AT命令实现两个模块TCP通信的方向,大致需要做哪些步骤~
另:我要实现TCP通信时,是一定需要拨号,执行requestQueryDataCall吗?

Modem 命令端口也是一个AT口,只是一些URC 默认只会在AT命令端口上报。
如果要做TCP业务,要看看是否打算用移远的AT指令手册,参考AT指令手册,用ttyUSB3 就可以。

两个模块之间一般是不能互相通信。

两个模块之间一般是不能互相通信是什么意思,我让他们都搭载linux开发板,然后按照移远的AT指令手册配置,一个配置为客户端,一个为服务器端,两个模块通过socket传播视频数据,这样是可实现的吗?具体这种应用场景需要哪些步骤呢?

除非你用的是自己的基站,不然公网运营商的设备,两个设备之间是没法直接连接对方的。
要么通过第三方服务器。
ipv4 是肯定不行的,基站分配的ipv4地址其实就是一个私网地址。
可以试试ipv6,估计也不行。

好的明白!那在设置服务器模式下需要固定的IP时申请专网卡可以的嘛?
回顾看感觉最大的问题是怎么在拨号工具成功初始化配置的基础上,TCP/IP应用指导手册中的AT命令应该在哪里进行输入,从而利用AT命令去进行配置5G模块为客户端和服务端?

你截图这里的服务器ip 是一个公网ip。
我估计你误解了一些东西。
quectel-CM 拨号是为了给Linux系统拿到internet,这样这个Linux 就可以上网了。
而TCP 的AT指令,是用移远的AT指令去连TCP 服务器,去收发数据,一般来说都是用来收发一些传感器数据,你这种要传视频我觉得没法用这个TCP的AT指令,应该是拨号之后,自己去用一些开源协议软件去实现。

意思是这个TCP很难去完成传输视频流吗?
如果不考虑传输的信息,假设是字符串,那么TCP的这个AT指令在联网的基础上是怎么移植代码进拨号工具或者以其他形式发送到5G的呢?
我这里的问题是我们不用at指令去传输数据,只是想用at指令去配置5g模组,所以能不能配置为类似局域网那种模式,两个模块配置两个同网段的IP,就像两台设备都是两个本地网口,然后我再用socket编程的方式去传输数据呢?