AT+CIPRECVDATA=0,3000 返回 ERROR

硬件: ESP32C2

AT 版本号:

AT version:2.5.0.0-dev(bcd5fe3 - ESP32C2 - Oct 19 2022 07:07:53)
SDK version:v5.0-beta1-764-gdbcf640261-dirt
compile time(07ac04f):Nov 25 2022 14:21:44
Bin version:2.5.0(ESP32C2-2MB)

一、问题描述:

最近在使用 AT+CIPRECVDATA=0,3000这条指令去获取被动接收模式下的数据,发现会有概率性返回 error log 信息如下图所示:

 二、测试步骤:

AT+CWMODE=1

OK

AT+CWJAP="espressif",""
WIFI CONNECTED
WIFI GOT IP

OK

AT+CIPMUX=1

OK
AT+CIPRECVMODE=1

OK
AT+CIPSTART=0,"TCP","121.201.33.121",8081
0,CONNECT

OK
AT+CIPSEND=0,213

OK
//实际 post 的data:
GET http://121.201.33.121:8081/app/HM600S/00001300521/V3.10.02_52_AJH_DF0102_E02AA889.jhlbin HTTP/1.1
Host: 121.201.33.121:8081
Connection: Keep-Alive
Content-Type: text/xml; charset=utf-8
Range: bytes=0-1
Recv 213 bytes

SEND OK
+IPD,0,295
+CIPRECVLEN:295,0,0,0,0

OK

+CIPRECVDATA:295,HTTP/1.1 206 Partial Content
Server: nginx
Date: Fri, 06 Jan 2023 10:10:52 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 2
Last-Modified: Fri, 06 Jan 2023 08:50:47 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "63b7e0e7-74610"
Content-Range: bytes 0-1/476688

OK

AT+CIPRECVLEN?
+CIPRECVLEN:3000,0,0,0,0

OK

AT+CIPRECVDATA=0,3000

ERROR


 三、问题分析

先来看下这条指令是用来做什么的, 文档中对于这条指令的定义如下:

 所以这条指令要执行成功,需要满足以下条件:

1) 需要保证模式是处于被动模式

 2)被动接收模式下查询到的套接字长度不为 0

 3)被动接收模式下, 数据内存分配是 ok

根据以上三点, 可以从以上三点进行排查:

1)使用 AT+CIPRECVMODE? 指令获取当前是否处于被动模式

2)使用 AT+CIPRECVLEN? 指令获取当前数据的长度

3)可以在 uart0 端查询下是否有 alloc fail log 信息

经排查, 发现是内存分配失败导致的, 对应的 log 信息如下:

四、问题总结

原因: 内存不足导致 AT+CIPRECVDATA=0,3000 返回 ERROR

建议: 1) 关掉不用的 AT 指令, 这部分可以根据具体需求在 menuconfig 中自行调整, idf.py menuconfig--->Component config--->AT

  2) 减少 tcp send buffer 和 recv buffer 的大小, idf.py menuconfig-->Component config-->LWIP--->TCP

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值