Raspberry Pi 3G/4G&LTE Base HAT USB ports lost with a call

Hello,
I’m experiencing some problems with the Base HAT, maybe interference related.
The product is placed on top of a x86 Raspberry compatible board (ROCK Pi X, RockpiX - Radxa Wiki) and the modem is a Quectel EC25-E.
The modem has been configured to work in ECM mode; the packet switched network is prepared with PDP context, the host network interface is statically configured with IP address, gateway and DNS. Data connection is quite stable and I can reach Internet without any issue.
Everything is fine until the modem have to operate with the circuit switched network: if I start a call with the ATD command, after a couple of seconds, the USB part stops to work: all ttyUSB devices disappear; the system log reports the worrying message “usb usb1-port4: disabled by hub (EMI?), re-enabling…”; the host network interface disappears. The modem however seems to continue working: the remote phone starts ringing, I can see the red led on and the blue one blinking on the HAT, but there is no way to interface with it. At this point the solution is only one: resetting the HAT/modem toggling the power (unplugging the USB or rebooting the system).
The behaviour is exactly the same if the modem receives an incoming call: just before the caller hears the ring tone, the USB part stops to work while the call is still ongoing (the caller continues to hear the ring tone, until he hangs up).

In order to narrow down the possible causes, we tried various actions.
We contacted Quectel support and they suggested a firmware update; so we updated the module.
We used a different modem (a U-Blox TOBY-L210, that works without any issue inside a board with an integrated MiniPCIE slot).
We connected the HAT to the USB port using a cable with a ferrite core.
We changed the antenna and we placed it 2 meters from the board.
We detached the HAT from the ROCK Pi X and we connected directly to a laptop, only with the USB cable.
Thinking it can be the environment, we moved to another office, 15 kilometers away…

Nothing is changed, the results are always the same.
You can find attached some info regarding the system and the logs of AT commands and sys kernel, while reproducing the errors.

Are the Raspberry Pi 3G/4G&LTE Base HAT not compatible with call?
Is there anyone experiencing the same issue?

Thank you.

System Info

root@simurlab02:/home/simurprobe# uname -sr
Linux 4.9.0-7-amd64
root@simurlab02:/home/simurprobe# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
Bus 001 Device 002: ID 03f0:3f40 HP, Inc 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

root@simurlab02:/home/simurprobe# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/7p, 480M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 4: Dev 3, If 1, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 4: Dev 3, If 4, Class=Communications, Driver=cdc_ether, 480M
    |__ Port 4: Dev 3, If 2, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 4: Dev 3, If 0, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 4: Dev 3, If 5, Class=CDC Data, Driver=cdc_ether, 480M
    |__ Port 4: Dev 3, If 3, Class=Vendor Specific Class, Driver=option, 480M

root@simurlab02:/home/simurprobe# ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3


root@simurlab02:/home/simurprobe# dmesg | grep tty
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.9.0-7-amd64 root=UUID=49558dae-2e3c-4307-b8a1-e1a8edd768fb ro console=tty1 console=ttyS0,115200 quiet rootdelay=4 cryptopts=target=mmcblk0p4_crypt,source=/dev/disk/by-uuid/fa9cbcf4-baf1-4fab-a9ec-80f4a813097f,keyscript=/lib/cryptsetup/scripts/opendisk.sh
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-4.9.0-7-amd64 root=UUID=49558dae-2e3c-4307-b8a1-e1a8edd768fb ro console=tty1 console=ttyS0,115200 quiet rootdelay=4 cryptopts=target=mmcblk0p4_crypt,source=/dev/disk/by-uuid/fa9cbcf4-baf1-4fab-a9ec-80f4a813097f,keyscript=/lib/cryptsetup/scripts/opendisk.sh
[    0.000000] console [tty1] enabled
[    0.000000] console [ttyS0] enabled
[    1.290922] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    1.298820] 8086228A:00: ttyS1 at MMIO 0x91921000 (irq = 39, base_baud = 2764800) is a 16550A
[    1.305568] 8086228A:01: ttyS2 at MMIO 0x9191f000 (irq = 40, base_baud = 2764800) is a 16550A
[   29.279796] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB0
[   29.280101] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB1
[   29.280500] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB2
[   29.280916] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB3



root@simurlab02:/home/simurprobe# cat /sys/kernel/debug/usb/devices

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 7
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 4.09
S:  Manufacturer=Linux 4.9.0-7-amd64 xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:14.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=03f0 ProdID=3f40 Rev=11.00
S:  Manufacturer=HP
S:  Product=v222w
S:  SerialNumber=AA0000000170
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=300mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=31875us

T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#=  3 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=2c7c ProdID=0125 Rev= 3.18
S:  Manufacturer=Android
S:  Product=Android
C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
A:  FirstIf#= 4 IfCount= 2 Cls=02(comm.) Sub=06 Prot=00
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether
E:  Ad=89(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
I:  If#= 5 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
I:* If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 6
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
P:  Vendor=1d6b ProdID=0003 Rev= 4.09
S:  Manufacturer=Linux 4.9.0-7-amd64 xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:14.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms



root@simurlab02:/home/simurprobe# dmesg
[...]

[   28.969098] usb 1-4: new high-speed USB device number 3 using xhci_hcd
[   29.120797] usb 1-4: New USB device found, idVendor=2c7c, idProduct=0125
[   29.120814] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   29.120825] usb 1-4: Product: Android
[   29.120834] usb 1-4: Manufacturer: Android
[   29.214615] usbcore: registered new interface driver usbserial
[   29.214664] usbcore: registered new interface driver usbserial_generic
[   29.214704] usbserial: USB Serial support registered for generic
[   29.216884] cdc_ether 1-4:1.4 usb0: register 'cdc_ether' at usb-0000:00:14.0-4, CDC Ethernet Device, 96:29:c9:63:41:2b
[   29.216958] usbcore: registered new interface driver cdc_ether
[   29.224088] usbcore: registered new interface driver cdc_wdm
[   29.229152] usbcore: registered new interface driver qmi_wwan
[   29.279216] usbcore: registered new interface driver option
[   29.279268] usbserial: USB Serial support registered for GSM modem (1-port)
[   29.279441] option 1-4:1.0: GSM modem (1-port) converter detected
[   29.279796] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB0
[   29.279893] option 1-4:1.1: GSM modem (1-port) converter detected
[   29.280101] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB1
[   29.280252] option 1-4:1.2: GSM modem (1-port) converter detected
[   29.280500] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB2
[   29.280705] option 1-4:1.3: GSM modem (1-port) converter detected
[   29.280916] usb 1-4: GSM modem (1-port) converter now attached to ttyUSB3
[   29.290225] cdc_ether 1-4:1.4 enp0s20u4i4: renamed from usb0

[...]



root@simurlab02:/home/simurprobe# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:e0:4c:88:02:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.88/24 brd 192.168.100.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::2e0:4cff:fe88:259/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s20u4i4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 96:29:c9:63:41:2b brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.40/24 brd 192.168.225.255 scope global enp0s20u4i4
       valid_lft forever preferred_lft forever
    inet6 fe80::9429:c9ff:fe63:412b/64 scope link 
       valid_lft forever preferred_lft forever
       

Modem Info


ATI
Quectel
EC25
Revision: EC25EFAR06A11M4G

OK
AT+CREG?
+CREG: 0,1

OK
AT+CEREG?
+CEREG: 2,1,"8108","1083020",7
AT+CSQ
+CSQ: 20,99

OK
AT+QCFG="usbnet"?
+QCFG: "usbnet",1

OK
AT+QCFG="band"
+QCFG: "band",0xd3,0x1a0000800d5,0x0

OK
AT+QCSQ
+QCSQ: "LTE",72,-106,118,-17

OK
AT+QNWINFO
+QNWINFO: "FDD LTE","22210","LTE BAND 3",1850

CASE 1: OUTGOING CALL

ATD+39347•••••••;
OK

+CGREG: 1,"7934","772F",0

+CEREG: 4

FATAL: term closed                  {{ picocom exits }}

                                    {{ The called terminal rings }}

root@simurlab02:/home/simurprobe# dmesg
[...]

[ 3826.305185] usb usb1-port4: disabled by hub (EMI?), re-enabling...
[ 3826.312460] usb 1-4: USB disconnect, device number 3
[ 3826.313495] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
[ 3826.313633] option 1-4:1.0: device disconnected
[ 3826.315353] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
[ 3826.315430] option 1-4:1.1: device disconnected
[ 3826.420559] option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
[ 3826.420622] option 1-4:1.2: device disconnected
[ 3826.422003] option1 ttyUSB3: GSM modem (1-port) converter now disconnected from ttyUSB3
[ 3826.422082] option 1-4:1.3: device disconnected
[ 3826.422579] cdc_ether 1-4:1.4 enp0s20u4i4: unregister 'cdc_ether' usb-0000:00:14.0-4, CDC Ethernet Device
[ 3827.478950] usb usb1-port4: Cannot enable. Maybe the USB cable is bad?
[ 3828.378948] usb usb1-port4: Cannot enable. Maybe the USB cable is bad?
[ 3828.386736] usb usb1-port4: attempt power cycle
[ 3829.594924] usb usb1-port4: Cannot enable. Maybe the USB cable is bad?
[ 3830.494926] usb usb1-port4: Cannot enable. Maybe the USB cable is bad?
[ 3830.502710] usb usb1-port4: unable to enumerate USB device

root@simurlab02:/home/simurprobe# ls /dev/ttyUSB*
ls: impossibile accedere a '/dev/ttyUSB*': File o directory non esistente

root@simurlab02:/home/simurprobe# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 03f0:3f40 HP, Inc 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

root@simurlab02:/home/simurprobe# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:e0:4c:88:02:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.88/24 brd 192.168.100.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::2e0:4cff:fe88:259/64 scope link 
       valid_lft forever preferred_lft forever

                                {{ The called terminal continues ringing }}

CASE 2: INCOMING CALL

AT

OK
                                {{ Caller starts the call }}

+CGREG: 1,"7934","772F",0

+CEREG: 4

FATAL: term closed              {{ picocom exits }}

                                {{ Caller hears the ring tone }}

Like the previous case, all ttyUSB devices are now lost.

Hello,

The Base HAT doesn’t contain the audio code as a result, you cannot receive or send voice.
However, you will be able to make blank calls, i.e to trigger an event. The phone will ring on the other side.

In order power cycle the Module, you can use GPIO26. This is Power regulator control. Normally pulled-down, when this pin drove to HIGH, Hat’s power will cut off.

We Rock Pi X to replicate your system and test. We can run a test with similar module FW and Raspberry Pi.

Hello,

starting a blank call is exactly the way I replicate the error.
I’m not interested in sending or receiving voice, but only DTMF, so the Base HAT capabilities are ok:
the Quectel module is able to send and recognize them with the command AT+VTS and AT+QLDTMF.

Unfortunately every time I start or receive a call, all the tty ports and the ethernet interface disappear.
For the operating system, the module is completely disconnected.
The poweroff-poweron cycle with the GPIO26 can restore the normal behaviour, but it should be an “emergency maneuver” only.

I don’t think the cause is the Quectel module, or the Rock PI X: I connected the Base HAT to a laptop (instead the Rock PI) using the USB, with a U-Blox module (instead the Quectel one) and the error is the same.

If you and other users can do some tests and share the results, I would appreciate it.

It could be my Base HAT faulty… ?