Quectel EC20 LTE Module



  • 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 ?



  • 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.


  • Netgate Administrator

    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



  • 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> 
    

  • Netgate Administrator

    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


 

© Copyright 2002 - 2018 Rubicon Communications, LLC | Privacy Policy