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

Quectel EC20 LTE Module

Scheduled Pinned Locked Moved Hardware
5 Posts 3 Posters 1.5k Views
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 Mar 3, 2018, 1:10 AM

    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 Mar 3, 2018, 1:16 PM

      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
      • S
        stephenw10 Netgate Administrator
        last edited by Mar 4, 2018, 4:59 PM

        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 Mar 4, 2018, 10:16 PM

          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
          • S
            stephenw10 Netgate Administrator
            last edited by Mar 5, 2018, 3:12 AM

            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
            3 out of 5
            • First post
              3/5
              Last post
            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.
              This community forum collects and processes your personal information.
              consent.not_received