嵌入式技术论坛
直播中

张艳

8年用户 1704经验值
私信 关注
[问答]

AT client组件返回超时如何解决

使用AT clien,判断

if (at_exec_cmd(resp, "AT+DMOVERQ") != RT_EOK)

{

            LOG_E("AT client send commands failed, response error or timeout !");

        }

返回-2(超时),但打印返回数据正确

sendline: 0000-0020: 41 54 2B 44 4D 4F 56 45 52 51 AT+DMOVERQ

[D/AT] recvline: 0000-0020: 00 00 00 00 00 00 2B 44 4D 4F 56 45 52 3A 56 32 30 34 0D 0A ......+DMOVER:V204..

[D/at.clnt] execute command (AT+DMOVERQ) timeout (2000 ticks)!

[E/at] AT client send commands failed, response error or timeout !

[D/at] resp->line_counts:1

回帖(9)

王刚

2022-8-15 10:22:33
超时时间加长一些试试呢
举报

张艳

2022-8-15 10:22:46
增加到5S了,还是不行,这个模块指令不会返回“OK”,或”ERROR”,是否与这个有关?
举报

王刚

2022-8-15 10:22:55
所有指令都不返回OK的话,你这个用AT组件是不行了,建议自己写驱动,或者把AT组件修改一下,不要判断OK了,通过判断其他标识来确定应答是否成功。
举报

刘军

2022-8-15 10:23:14
这是什么模组?根据log信息,模组已经回应了 “+DMOVER:V204”,但是并没有收到OK,所以程序判定了超时,发送 “AT+DMOVERQ” 这条指令的时候会返回 “OK” 吗?正常情况下发送 “AT+DMOVERQ” 这条指令返回的完整内容是什么?建议使用 USB-TTL 先连接模组,然后看一下发送各条指令,模组返回的内容是什么,记录一下。
举报

张艳

2022-8-15 10:23:26
你好,指令只会返回 “+DMOVER:V204”,这个模块所有的指令都没有返回”ok”的,如果是这样要怎么改?
举报

刘军

2022-8-15 10:23:36
这是什么模组?没有 “OK” 的话做起来比较麻烦,不能换一种替换一下?
举报

张艳

2022-8-15 10:23:42
数传模块SR-FRS-0W5
举报

刘军

2022-8-15 10:24:01
可以参考下面的代码,直接执行指令然后 at_resp_get_line_by_kw 来判断返回的结果。

if (at_obj_exec_cmd(device->client, resp, "AT+CPIN?") == RT_EOK)
{
    if (at_resp_get_line_by_kw(resp, "READY") != RT_NULL)
        break;
}
“AT+CPIN?” 的正常返回如下:
1.jpg
当然如果你的模组比较简单,用到的 AT 指令也比较少的话(且返回的没有 “OK”),我不建议使用 AT 组件来做,可以直接使用串口收发来做,使用串口写AT指令,然后根据串口的返回结果判断 AT 指令是否执行成功。比如说上电后先执行一些初始化工作,然后将发送数据封一个接口,直接调接口进行发送即可(可以透传的话就改为透传模式然后封发送的接口,进行数据的传输就行)
举报

刘军

2022-8-15 10:24:07
我认为 AT 组件的核心是和 SAL (套接字抽象层)层的联合使用,将硬件的操作封装起来,直接使用 socket 进行通信,从而节省开发的周期,因为 socket 编程大家更为熟悉。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分