使用EC600M在使用HTTP下载文件的同时,进行MQTT通讯

目前单独进行HTTP下载正常,单独进行MQTT通讯正常,但无法两项同时进行,通过查找DataSheet,发现该模组共有3个串口,貌似只有主串口用于进行AT命令传输与数据获取。

目前板载一块该模组,解决方法是:

对下载函数给予返回值,进行下载成功/失败的判断,当MQTT通讯数据进来时,HTTP的数据会被打乱导致下载失败,重新进行模块的初始化,并重新下载当前块的文件。测试显示,MQTT数据可以被正常接收到,被打断的下载可以正常恢复直到下载完成。

但目前需要在HTTP下载过程中,新增MQTT发送机制,无法实现,在不修改硬件,不增加模块的前提下,是否有其它解决方法?

从现象看,核心限制在于:HTTP 下载数据、MQTT AT 命令响应及 URC 都共用同一个主 AT 串口。若 HTTP 正在连续输出文件数据,此时再进行 MQTT 收发,串口数据流容易交织,外部 MCU 侧解析就会出现“下载数据被打乱”的情况。

不改硬件、不增加模组的前提下,建议按以下优先级处理:

  1. 优先确认固件是否支持 CMUX

    • 若 EC600M 当前固件支持 3GPP 27.010 CMUX,可在同一物理 UART 上虚拟出多个逻辑通道。
    • 可将 HTTP 与 MQTT 分配到不同虚拟通道,避免 AT 响应和数据在 MCU 侧混在同一解析流中。
    • 该方案不需要增加硬件,但 MCU 侧需要实现 CMUX 协议栈和分帧解析。
  2. 如果不使用 CMUX,不能在连续 HTTP 数据输出期间直接插入 MQTT 发布命令

    • 单 AT 串口模式下,AT 命令本质上需要串行执行。
    • 建议改为“分片下载 + 任务调度”:
      • HTTP 每次只读取一小段数据;
      • 当前分片读取完成并退出 AT 数据输出后,再执行 MQTT 发布;
      • MQTT 处理完成后继续读取下一段 HTTP 数据。
    • MQTT 接收建议使用缓存/通知类模式,避免 payload 在 HTTP 数据输出过程中直接插入串口流。
  3. 可考虑改为模组侧文件下载

    • 若当前 AT 手册支持 HTTP 下载到模组文件系统,可先将 HTTP 文件保存到模组内部文件系统;
    • 下载完成后,MCU 再按块读取文件;
    • 这样可以减少 HTTP 数据流与 MQTT URC 在主串口上的直接冲突。
  4. 若必须做到“HTTP 连续下载期间同时 MQTT 发布”

    • 在单主 AT 串口、无 CMUX、无额外 AT 口的条件下,不建议按两个业务真正并发处理;
    • 需要改为串行调度,或使用支持多逻辑通道的 CMUX/USB 多端口/模组侧应用方案。

结论:当前硬件条件下,推荐方案是 CMUX;若无法使用 CMUX,则采用 HTTP 分片读取 + MQTT 发布排队调度,不要在 HTTP 连续数据输出过程中直接发送 MQTT AT 命令。

本回答仅供参考。若问题已解决,可标记为 :white_check_mark:解决方案 ;若仍有疑问,请等待官方技术人员回复,最终请以专业解答为准。

帖子主题 - 使用EC600M在使用HTTP下载文件的同时,进行MQTT通讯
用户问题 - 用户使用EC600M模组,单独进行HTTP下载正常,单独进行MQTT通讯正常,但无法两项同时进行;通过查看DataSheet发现该模组共有3个串口,貌似只有主串口用于AT命令传输与数据获取;目前板载一块该模组,后续描述被截断。
客服解答 - 当前内容中暂无实际客服回复,仅有系统转发帖子信息。
处理状态 - 未知,待客服回复。
备注 - 原帖内容过长被截断,仅展示用户开头描述,缺少完整故障细节、前置操作及客服方案,需查看原文获取更多信息。

分口输出试一下呢:
HTTP 走 UART1、
MQTT 走 USB AT(或反之),
并用 AT+QURCCFG=“urcport” 把 URC 指到 MQTT 那一侧避开争抢。

注意一下:
+QHTTPGET: / +QHTTPREAD: 这些结果 URC 会出现在 usbat(因为 urcport 是全局的),uart1 上只看到 CONNECT 和二进制流。你的 MCU 得在 usbat 侧按前缀分流:+QMTRECV/+QMTSTAT 归 MQTT,+QHTTPGET/+QHTTPREAD/+QHTTPURC 归 HTTP。

我尝试了一下使用自动回复推荐的CMUX方案,测试日志如下:
T: AT+CMUX=?

R: ERROR

T: ATI

R: Quectel
EC600M
Revision: EC600MCNLFR06A02M04

OK

T: AT+QGMR

R: EC600MCNLFR06A02M04

 OK

T: AT+CMUX=0

R: ERROR
请问以上是否证明该Flash 大小为 4MB 的 EC600M-CN 模块不支持 MUX 功能呢?

是的, MUX 应用指导修订历史(v1.2):“备注:Flash 大小为 4 MB 的 EC200M-CN、EC600M-CN 和 EC800M-CN 模块不支持 MUX 功能”

了解,谢谢!

请问一下,分口输出方案是否USB AT那一边需要加一个CH340呢

不用的,参考下图:

收到,麻烦了,谢谢!