Why is my PPP connection failing using the modem_shell on the nRF9160dk to talk to a Dart-6UL over uart? Also what are these errors I'm seeing on the MoSH even when a PPP connection is successful?

I'm trying to connect the nrf9160dk from its uart0 running the modem_shell sample code from SDK v2.2.0 to our Dart6ul on its tty4 uart running at 921600 baud using a PPP connection. I have been able to use the modem_shell on the nrf9160 and ubuntu laptop successfully. But I'm getting errors in both configurations that I don't understand completely. When trying to replace the ubuntu laptop (ttyACM0) with the Dart6UL (ttymxc4), I use the same command (changing the port) to initiate the PPP connection from the unix device:

 pppd -detach /dev/ttymxc4 921600 noauth crtscts noccp novj nodeflate nobsdcomp local debug +ipv6 ipv6cp-use-ipaddr usepeerdns noipdefault defaultroute ipv6cp-restart 5 ipcp-restart 5 lcp-echo-interval 0

I have been able to successfully run the Serial LTE Modem example on my 9160 and Dart-6ul with these same devicetree settings to use the ttymxc4 and uart0.

When running the mosh, I see these same errors on the MoSH terminal (regardless of ubuntu or dart-6ul):

[00:00:04.657,104] <wrn> net_if: iface 0x200127c4 is down

[00:00:34.670,959] <err> net_sock: invalid access on sock -1 by thread 0x20012ad0

[00:00:36.702,850] <err> net_ppp: uart_rx_enable() failed, err -16

And the bottom two repeat. I'm attaching photos of the ubuntu and the dart-6ul outputs from MoSH prompt. In addition the Dart-6ul is not completing the setup of the PPP connection. I see the PPP start but then it fails out and eventually gives me a fork error. I'm attaching my net-connect and net-chat file running on the Dart-6ul. And a log file that the net-connect kicks off.

Any help getting these understood and me pointed in the right direction would be greatly appreciated!

9160dk_mosh_errors.jpg shows the startup of the LTE connection and the issues identified above.

dart_6ul_fail1.jpg shows that the PPP did initiate but it doesn't appear as a network interface and then displays the fork error.

#!/bin/bash
exec > ppp_connect_log.txt 2>&1

/usr/sbin/pppd -detach /dev/ttymxc4 921600 noauth crtscts noccp novj nodeflate nobsdcomp local debug +ipv6 ipv6cp-use-ipaddr usepeerdns noipdefault defaultroute ipv6cp-restart 5 ipcp-restart 5 lcp-echo-interval 0
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
ABORT 'ERROR'
'' ATZ
OK 'AT+CGDCONT=1,"IP","hologram"'
OK 'ATDT*99***1#'
CONNECT \d\c

Script /etc/ppp/net-connect finished (pid 511), status = 0x8
Connect script failed

ce temporarily unavailable
Connect script failed

Parents Reply Children
  • Thank you! But do they have any idea why it is creating so many pppd child processes I should expect with debian and the modem_shell? 

  • I have one more question. As I have been going through this with you, I have started to question if our intended design will work as expected. The idea is to use the ppp connection from the dart-6ul to the 9160 module via a single uart. We intended to control the device and get the data from the single uart connection. However, I have needed to use two tty connections to interface with the 9160, one for the console and the other for the modem.

    Is it required to have two individual uart interfaces for the 9160 to dart-6ul interface?

  • An additional question, I was just looking into enabling modem trace but there is a line in the overlay-ppp.conf (line 118) that states "UART traced cannot be enabled". Does that mean I can't get a modem trace while using the PPP configuration?

  • MichelleV said:
    An additional question, I was just looking into enabling modem trace but there is a line in the overlay-ppp.conf (line 118) that states "UART traced cannot be enabled". Does that mean I can't get a modem trace while using the PPP configuration?

    At the moment (this will change in the next NCS release), the UART backend for modem traces is hard-coded to use UART1. It can be changed to use any UART, you just have to manually edit the source file, rather than doing it with the device tree.

    In ppp.overlay, UART0 is chosen for PPP, and UART1 is chosen for the shell. As this conflicts with the UART used for modem traces, modem tracing is disabled.

    However, you can use other UARTs than the ones chosen in the overlay file, or you can change which UART is used for modem traces. Another limitation is that on the nRF9160 DK, only two UARTs are routed to the interface chip, so you would have to use an external UART-to-USB converter to get the trace.

    A third option is to send the modem trace over RTT instead, by enabling CONFIG_NRF_MODEM_LIB_TRACE_BACKEND_RTT. It isn't as stable as the UART backend, and we don't have any tools for receiving the trace (so you would have to use the tools from Segger), which is why it isn't our preferred option, but it is a possible solution.

    MichelleV said:
    Is it required to have two individual uart interfaces for the 9160 to dart-6ul interface?

    If you need to control the modem? Yes, I believe so.

    The modem will try to re-establish network connection if the connection is lost, and the modem shell can be configured to restart if it crashes, so you might be able to get by without any extra control of the modem in some use cases.

    However, in general, yes, you would need to use two UARTs.

    If the limit is in the number of UARTs on the host processor, you might also be able to work around it with a multiplexer or switches.

  • MichelleV said:
    Is it required to have two individual uart interfaces for the 9160 to dart-6ul interface?

    If you need to control the modem? Yes, I believe so.

    What kind of control do mean here? The modem_shell should handle the modem operation, correct?

Related