未通过 UART(ESP-32 -> Sim7600)在 LCP(PPPoS)阶段接收数据
Not receiving data in LCP(PPPoS) phase over UART(ESP-32 -> Sim7600)
在我的 ESP32 上,我无法为我的 ISP 创建一个有效的 PPP 接口。
我正在使用 ESP-32 以太网套件,并将其连接到带有 Sim7600G 芯片的 Simcom EVB 套件。
有了这个硬件,我将 ESP-IDF 与 LWIP 结合使用来建立 PPP 连接。
首先,我必须发送所有相应的 AT 命令以确保它实际上已准备好进行 PPP 连接。
这些 AT 命令如下:
AT+CGDCONT=1,"IP","<APN>"
AT+CGACT=1,1
AT+CREG? <Must be 0,5 -> Registered and Roaming>
ATD*99***1# -> I receive "Connect 152000" and start the PPP phase.
收到 Connect 152000 作为响应后,我开始 PPP 连接。
m_pPpp = pppapi_pppos_create(&netif, pppos_output_cb, ppp_link_status_cb, nullptr);
pppapi_set_default(m_pPpp);
pppapi_set_auth(m_pPpp, PPPAUTHTYPE_PAP, "", "");
err_t err = ppp_connect(m_pPpp, 0);
这是对应代码的输出:
ppp phase changed[2]: phase=0
ppp_connect[2]: holdoff=0
ppp phase changed[2]: phase=3
pppos_connect: unit 2: connecting
ppp_start[2]
ppp phase changed[2]: phase=6
pppos_send_config[2]: out_accm=FF FF FF FF
ppp_send_config[2]
pppos_recv_config[2]: in_accm=FF FF FF FF
ppp_recv_config[2]
ppp: auth protocols: PAP=1
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xcd3e2cad> <pcomp> <accomp>]
I: pppos_output callback called
I: ppp_output_cb() len = 45
W: ip4addr: 0.0.0.0
W: his_ipaddr: 0.0.0.0
W: netmask: 255.255.255.255
pppos_write[2]: len=24
ppp_start[2]: finished
据我所知,它经历了几个有关 PPP 连接的阶段。
- 第 0 阶段(显然已死)
- 阶段 3(初始化)
- 第 6 阶段(建立)。
此后不再继续。我看到正在调用 pppos_output 回调,这应该会发生。据我了解,此功能可让您将 PPP 数据写入您的 UART 设备。
另外,我在后台有一个任务 运行 轮询我的 UART 设备以获取写入的数据,因此我可以将其写入 pppos_input
函数。我从来没有收到任何数据...
老实说,我不知道我在哪里遗漏了什么或如何解决这个问题。
此外,LWIP 文档非常简单并且缺少示例,这使得它变得更加困难。
我尝试过的其他事情:
- AT+CGDCONT=1,“PPP”,“APN”。 <- 这将导致 Sim7600 永远不会连接并继续搜索。我应该使用这些 PDP 设置还是继续使用 IP?
- 应用上述 AT 命令并尝试启动 PPP 阶段,希望它能以某种方式连接...
我还没有找到使用上述框架解决此问题的方法。相反,我恢复到 ESP-IDF 的另一个依赖项:esp-modem。我按照当前软件中的 pppos-client 和 modem-console 示例设法获得了一个可行的解决方案。
在我的 ESP32 上,我无法为我的 ISP 创建一个有效的 PPP 接口。 我正在使用 ESP-32 以太网套件,并将其连接到带有 Sim7600G 芯片的 Simcom EVB 套件。 有了这个硬件,我将 ESP-IDF 与 LWIP 结合使用来建立 PPP 连接。 首先,我必须发送所有相应的 AT 命令以确保它实际上已准备好进行 PPP 连接。 这些 AT 命令如下:
AT+CGDCONT=1,"IP","<APN>"
AT+CGACT=1,1
AT+CREG? <Must be 0,5 -> Registered and Roaming>
ATD*99***1# -> I receive "Connect 152000" and start the PPP phase.
收到 Connect 152000 作为响应后,我开始 PPP 连接。
m_pPpp = pppapi_pppos_create(&netif, pppos_output_cb, ppp_link_status_cb, nullptr);
pppapi_set_default(m_pPpp);
pppapi_set_auth(m_pPpp, PPPAUTHTYPE_PAP, "", "");
err_t err = ppp_connect(m_pPpp, 0);
这是对应代码的输出:
ppp phase changed[2]: phase=0
ppp_connect[2]: holdoff=0
ppp phase changed[2]: phase=3
pppos_connect: unit 2: connecting
ppp_start[2]
ppp phase changed[2]: phase=6
pppos_send_config[2]: out_accm=FF FF FF FF
ppp_send_config[2]
pppos_recv_config[2]: in_accm=FF FF FF FF
ppp_recv_config[2]
ppp: auth protocols: PAP=1
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xcd3e2cad> <pcomp> <accomp>]
I: pppos_output callback called
I: ppp_output_cb() len = 45
W: ip4addr: 0.0.0.0
W: his_ipaddr: 0.0.0.0
W: netmask: 255.255.255.255
pppos_write[2]: len=24
ppp_start[2]: finished
据我所知,它经历了几个有关 PPP 连接的阶段。
- 第 0 阶段(显然已死)
- 阶段 3(初始化)
- 第 6 阶段(建立)。
此后不再继续。我看到正在调用 pppos_output 回调,这应该会发生。据我了解,此功能可让您将 PPP 数据写入您的 UART 设备。
另外,我在后台有一个任务 运行 轮询我的 UART 设备以获取写入的数据,因此我可以将其写入 pppos_input
函数。我从来没有收到任何数据...
老实说,我不知道我在哪里遗漏了什么或如何解决这个问题。
此外,LWIP 文档非常简单并且缺少示例,这使得它变得更加困难。
我尝试过的其他事情:
- AT+CGDCONT=1,“PPP”,“APN”。 <- 这将导致 Sim7600 永远不会连接并继续搜索。我应该使用这些 PDP 设置还是继续使用 IP?
- 应用上述 AT 命令并尝试启动 PPP 阶段,希望它能以某种方式连接...
我还没有找到使用上述框架解决此问题的方法。相反,我恢复到 ESP-IDF 的另一个依赖项:esp-modem。我按照当前软件中的 pppos-client 和 modem-console 示例设法获得了一个可行的解决方案。