Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Quectel EC20 LTE Module

    Hardware
    3
    5
    1.5k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tibo
      last edited by

      Hi all,

      I'm trying to configure my Quectel EC20 miniPCIe Module    (Qualcomm, Inc. Acer Gobi 2000 Wireless Modem from linux lsusb)

      I tried to configure a ppp  on the  /dev/cuau0  device  and associate an OPT1 interface

      
      usbconfig dump_device_desc
      
      ugen3.2: <quectel quectel="" lte="" module="">at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
      
        bLength = 0x0012 
        bDescriptorType = 0x0001 
        bcdUSB = 0x0200 
        bDeviceClass = 0x0000  <probed by="" interface="" class="">bDeviceSubClass = 0x0000 
        bDeviceProtocol = 0x0000 
        bMaxPacketSize0 = 0x0040 
        idVendor = 0x05c6 
        idProduct = 0x9215 
        bcdDevice = 0x0232 
        iManufacturer = 0x0001  <quectel>iProduct = 0x0002  <quectel lte="" module="">iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001</no></quectel></quectel></probed></quectel> 
      
      
      Mar 3 01:02:35    ppp       [opt1_link0] CHAT: The modem is not responding to "AT" at ModemCmd: label.
      Mar 3 01:02:35    ppp       [opt1_link0] MODEM: chat script failed
      Mar 3 01:02:35    ppp       [opt1_link0] Link: DOWN event
      Mar 3 01:02:35    ppp       [opt1_link0] LCP: Down event 
      
      

      it's not registered in the Known_Working_3G-4G_Modems page https://doc.pfsense.org/index.php/Known_Working_3G-4G_Modems

      any ideas ?

      1 Reply Last reply Reply Quote 0
      • ?
        Guest
        last edited by

        You will have to figure out the usb mode switching commands before you can use this. On top of that, pfSense doesn't support the fast protocols like MBIM.

        1 Reply Last reply Reply Quote 0
        • stephenw10S
          stephenw10 Netgate Administrator
          last edited by

          Those are very similar to the Sierra modems I believe. You may be able to change the presented USB profile under Windows or Linux to something FreeBSD recognises.

          What do you see from?:

          usbconfig -d ugen3.2 dump_all_config_desc
          

          Steve

          1 Reply Last reply Reply Quote 0
          • T
            tibo
            last edited by

            Hi, thanks for the replies !

            I don't know if the modem requires the usb mode switching.
            It works well under linux grace to modemmanager (perhaps mm does the usb mode switching) and I'm not sure about the differences between qmi and mbim but the modem seems to use qmi :

            
            root@linux# ls -l /sys/class/net/wwp0s20f0u12i4/device/driver/module
            lrwxrwxrwx 1 root root 0 Mar  4 22:53 /sys/class/net/wwp0s20f0u12i4/device/driver/module -> ../../../../module/qmi_wwan
            
            root@linux# ls /dev/cdc*
            /dev/cdc-wdm0
            
            root@linux# ls -l  /dev/serial/by-id/
            total 0
            lrwxrwxrwx 1 root root 13 Mar  4 22:44 usb-Quectel_Quectel_LTE_Module-if00-port0 -> ../../ttyUSB0
            lrwxrwxrwx 1 root root 13 Mar  4 22:44 usb-Quectel_Quectel_LTE_Module-if01-port0 -> ../../ttyUSB1
            lrwxrwxrwx 1 root root 13 Mar  4 22:44 usb-Quectel_Quectel_LTE_Module-if02-port0 -> ../../ttyUSB2
            lrwxrwxrwx 1 root root 13 Mar  4 22:44 usb-Quectel_Quectel_LTE_Module-if03-port0 -> ../../ttyUSB3
            
            

            For test purpose I must admit that I use a virtualize pfsense under kvm from linux where I "mount" the host USB lte device into the pfsense guest, but this should not be a problem.

            As pfSense doesn't support the fast protocols like MBIM, perhaps it supports qmi ?

            Here is the output of command : usbconfig -d ugen3.2 dump_all_config_desc

            
            usbconfig -d ugen3.2 dump_all_config_desc
            ugen3.2: <quectel quectel="" lte="" module="">at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
            
             Configuration index 0
            
                bLength = 0x0009 
                bDescriptorType = 0x0002 
                wTotalLength = 0x00d1 
                bNumInterfaces = 0x0005 
                bConfigurationValue = 0x0001 
                iConfiguration = 0x0000  <no string="">bmAttributes = 0x00a0 
                bMaxPower = 0x00fa 
            
                Interface 0
                  bLength = 0x0009 
                  bDescriptorType = 0x0004 
                  bInterfaceNumber = 0x0000 
                  bAlternateSetting = 0x0000 
                  bNumEndpoints = 0x0002 
                  bInterfaceClass = 0x00ff  <vendor specific="">bInterfaceSubClass = 0x00ff 
                  bInterfaceProtocol = 0x00ff 
                  iInterface = 0x0000  <no string="">Endpoint 0
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0081  <in>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 1
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0001  <out>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                Interface 1
                  bLength = 0x0009 
                  bDescriptorType = 0x0004 
                  bInterfaceNumber = 0x0001 
                  bAlternateSetting = 0x0000 
                  bNumEndpoints = 0x0003 
                  bInterfaceClass = 0x00ff  <vendor specific="">bInterfaceSubClass = 0x0000 
                  bInterfaceProtocol = 0x0000 
                  iInterface = 0x0000  <no string="">Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x00
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
            
                  Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x01
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x01, 0x00, 0x00
            
                  Additional Descriptor
            
                  bLength = 0x04
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x02
                   RAW dump: 
                   0x00 | 0x04, 0x24, 0x02, 0x02
            
                  Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x06
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
            
                 Endpoint 0
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0083  <in>bmAttributes = 0x0003  <interrupt>wMaxPacketSize = 0x000a 
                    bInterval = 0x0009 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 1
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0082  <in>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 2
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0002  <out>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                Interface 2
                  bLength = 0x0009 
                  bDescriptorType = 0x0004 
                  bInterfaceNumber = 0x0002 
                  bAlternateSetting = 0x0000 
                  bNumEndpoints = 0x0003 
                  bInterfaceClass = 0x00ff  <vendor specific="">bInterfaceSubClass = 0x0000 
                  bInterfaceProtocol = 0x0000 
                  iInterface = 0x0000  <no string="">Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x00
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
            
                  Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x01
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x01, 0x00, 0x00
            
                  Additional Descriptor
            
                  bLength = 0x04
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x02
                   RAW dump: 
                   0x00 | 0x04, 0x24, 0x02, 0x02
            
                  Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x06
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
            
                 Endpoint 0
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0085  <in>bmAttributes = 0x0003  <interrupt>wMaxPacketSize = 0x000a 
                    bInterval = 0x0009 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 1
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0084  <in>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 2
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0003  <out>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                Interface 3
                  bLength = 0x0009 
                  bDescriptorType = 0x0004 
                  bInterfaceNumber = 0x0003 
                  bAlternateSetting = 0x0000 
                  bNumEndpoints = 0x0003 
                  bInterfaceClass = 0x00ff  <vendor specific="">bInterfaceSubClass = 0x0000 
                  bInterfaceProtocol = 0x0000 
                  iInterface = 0x0000  <no string="">Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x00
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
            
                  Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x01
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x01, 0x00, 0x00
            
                  Additional Descriptor
            
                  bLength = 0x04
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x02
                   RAW dump: 
                   0x00 | 0x04, 0x24, 0x02, 0x02
            
                  Additional Descriptor
            
                  bLength = 0x05
                  bDescriptorType = 0x24
                  bDescriptorSubType = 0x06
                   RAW dump: 
                   0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
            
                 Endpoint 0
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0087  <in>bmAttributes = 0x0003  <interrupt>wMaxPacketSize = 0x000a 
                    bInterval = 0x0009 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 1
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0086  <in>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 2
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0004  <out>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                Interface 4
                  bLength = 0x0009 
                  bDescriptorType = 0x0004 
                  bInterfaceNumber = 0x0004 
                  bAlternateSetting = 0x0000 
                  bNumEndpoints = 0x0003 
                  bInterfaceClass = 0x00ff  <vendor specific="">bInterfaceSubClass = 0x00ff 
                  bInterfaceProtocol = 0x00ff 
                  iInterface = 0x0000  <no string="">Endpoint 0
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0089  <in>bmAttributes = 0x0003  <interrupt>wMaxPacketSize = 0x0040 
                    bInterval = 0x0009 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 1
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0088  <in>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000 
            
                 Endpoint 2
                    bLength = 0x0007 
                    bDescriptorType = 0x0005 
                    bEndpointAddress = 0x0005  <out>bmAttributes = 0x0002  <bulk>wMaxPacketSize = 0x0200 
                    bInterval = 0x0000 
                    bRefresh = 0x0000 
                    bSynchAddress = 0x0000</bulk></out></bulk></in></interrupt></in></no></vendor></bulk></out></bulk></in></interrupt></in></no></vendor></bulk></out></bulk></in></interrupt></in></no></vendor></bulk></out></bulk></in></interrupt></in></no></vendor></bulk></out></bulk></in></no></vendor></no></quectel> 
            
            1 Reply Last reply Reply Quote 0
            • stephenw10S
              stephenw10 Netgate Administrator
              last edited by

              I believe the E20 runs the same Qualcom linux flavour (or very similar) that the Sierra devices do so you may be able to change the USB profile from it's command line.

              It looks like currently it's presenting a QMI interface only (there is only one config index) which means pfSense cannot talk to it.

              Try connecting to those ttyUSB ports in Linux and look for an AT prompt. Looks like it's probably ttyUSB3.

              If you do get a command line you might try this or something similar:
              https://forum.pfsense.org/index.php?topic=140301.msg766861#msg766861

              You might just get one of those Sierra modems instead though.

              Steve

              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.