EM-06E firmware upgrade with no COM ports

Hi Team,

How can I upgrade firmware on my Quectel EM06-E module that shows no COM ports in Windows 10? I tried QFirehose in Linux without success. The module is connected to my PC via an M.2 to USB adapter.

root@pavel-X58L:/home/pavel/QFirehose# ./QFirehose -f EM06ELAR03A09M4G
[000.000]: Version: QFirehose_Linux_Android_V1.4.8
[000.000]: Builded: Jan 5 2022 01:49:40
[000.000]: Find md5 check file <EM06ELAR03A09M4G/md5.txt>
[000.014]: md5 checking: EM06ELAR03A09M4G/contents.xml pass
[000.033]: md5 checking: EM06ELAR03A09M4G/update/appsboot.mbn pass
[000.049]: md5 checking: EM06ELAR03A09M4G/update/ENPRG9x45.mbn pass
[000.050]: md5 checking: EM06ELAR03A09M4G/update/firehose/partition_complete_p4K_b256K.mbn pass
[000.050]: md5 checking: EM06ELAR03A09M4G/update/firehose/patch_p4K_b256K.xml pass
[000.064]: md5 checking: EM06ELAR03A09M4G/update/firehose/prog_nand_firehose_9x45.mbn pass
[000.064]: md5 checking: EM06ELAR03A09M4G/update/firehose/rawprogram_nand_p4K_b256K_update.xml pass
[000.258]: md5 checking: EM06ELAR03A09M4G/update/mdm9640-perf-boot.img pass
[001.345]: md5 checking: EM06ELAR03A09M4G/update/mdm9640-perf-sysfs.ubi pass
[001.581]: md5 checking: EM06ELAR03A09M4G/update/mdm-perf-recovery-image-mdm9640-perf.ubi pass
[002.648]: md5 checking: EM06ELAR03A09M4G/update/NON-HLOS.ubi pass
[002.672]: md5 checking: EM06ELAR03A09M4G/update/NPRG9x45.mbn pass
[002.672]: md5 checking: EM06ELAR03A09M4G/update/partition.mbn pass
[002.673]: md5 checking: EM06ELAR03A09M4G/update/partition_nand.xml pass
[002.679]: md5 checking: EM06ELAR03A09M4G/update/rpm.mbn pass
[002.704]: md5 checking: EM06ELAR03A09M4G/update/sbl1.mbn pass
[002.891]: md5 checking: EM06ELAR03A09M4G/update/tz.mbn pass
[002.891]: Totals checking 17 files md5 value, 0 file fail!
[002.891]: [1] /sys/bus/usb/devices/2-2 2c7c/307/310
[002.891]: P: /dev/bus/usb/002/002 idVendor=2c7c idProduct=0307
[002.891]: C: /dev/bus/usb/002/002 bNumInterfaces: 2
[002.891]: I: If#= 0 Alt= 0 #EPs= 1 Cls=02 Sub=0e Prot=00
[002.891]: E: Ad=82 Atr=03 MxPS= 64 Ivl=9ms
[002.891]: I: If#= 1 Alt= 0 #EPs= 0 Cls=0a Sub=00 Prot=02
[002.891]: I: If#= 1 Alt= 1 #EPs= 2 Cls=0a Sub=00 Prot=02
[002.891]: E: Ad=81 Atr=02 MxPS= 512 Ivl=0ms
[002.891]: E: Ad=01 Atr=02 MxPS= 512 Ivl=0ms
[002.891]: tmp=/sys/bus/usb/devices/usb2/ā€¦/driver, driver=ā€¦/ā€¦/ā€¦/bus/pci/drivers/ehci-pci
[002.891]: inf[3] USBDEVFS_SUBMITURB -1/5, errno = 2 (No such file or directory)
[002.891]: qusb_noblock_write write=-1, errno: 2 (No such file or directory)
[002.891]: qusb_noblock_write cur=0, min_size=5
[002.892]: qfirehose.c detect_and_judge_module_version 161 fail
[002.892]: inf[3] ep_in -1/512, errno = 2 (No such file or directory)
[002.892]: qusb_noblock_read read=-1, errno: 2 (No such file or directory)
[002.892]: qusb_noblock_read cur=0, min_size=1
[002.892]: switch to ā€˜Emergency download modeā€™
[002.892]: inf[3] USBDEVFS_SUBMITURB -1/7, errno = 2 (No such file or directory)
[002.892]: qusb_noblock_write write=-1, errno: 2 (No such file or directory)
[002.892]: qusb_noblock_write cur=0, min_size=7
[002.892]: inf[3] ep_in -1/512, errno = 2 (No such file or directory)
[002.892]: qusb_noblock_read read=-1, errno: 2 (No such file or directory)
[002.892]: qusb_noblock_read cur=0, min_size=1

The last 23 lines repeat 29 times more.

[032.930]: qfirehose.c main 414 fail
root@pavel-X58L:/home/pavel/QFirehose#

root@pavel-X58L:/home# lsusb -v -s 2:2

Bus 002 Device 002: ID 2c7c:0307 Quectel Wireless Solutions Co., Ltd. EM06-E
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x2c7c Quectel Wireless Solutions Co., Ltd.
idProduct 0x0307
bcdDevice 3.10
iManufacturer 1 Quectel
iProduct 2 EM06-E
iSerial 3 0123456789ABCDEF
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x005f
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 500mA
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 0
bInterfaceCount 2
bFunctionClass 2 Communications
bFunctionSubClass 14
bFunctionProtocol 0
iFunction 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 14
bInterfaceProtocol 0
iInterface 4 EM06-E
CDC Header:
bcdCDC 1.10
CDC Union:
bMasterInterface 0
bSlaveInterface 1
CDC MBIM:
bcdMBIMVersion 1.00
wMaxControlMessage 4096
bNumberFilters 32
bMaxFilterSize 128
wMaxSegmentSize 2048
bmNetworkCapabilities 0x20
8-byte ntb input size
CDC MBIM Extended:
bcdMBIMExtendedVersion 1.00
bMaxOutstandingCommandMessages 64
wMTU 1500
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 9
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0
bInterfaceProtocol 2
iInterface 5 MBIM Data
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0
bInterfaceProtocol 2
iInterface 5 MBIM Data
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
bNumConfigurations 1
canā€™t get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
root@pavel-X58L:/home#

Serial port option driver should not be installed.

Do you mean, the serial port option driver must be installed or it must not be installed? So far I have not installed it.

Isaac, could you answer my question?

Does your lsusb -t output show the cdc_acm driver attached to 2:2 or the option driver ?

Helg,

Find below the output of lsusb -t. I canā€™t see cdc_acm, only cdc_mbim. What does it mean for me?

root@pavel-X58L:/home# lsusb -t
/: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
|__ Port 2: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 2, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 2, If 2, Class=Vendor Specific Class, Driver=, 12M
|__ Port 2: Dev 2, If 3, Class=Application Specific Interface, Driver=, 12M
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
|__ Port 2: Dev 2, If 0, Class=Communications, Driver=cdc_mbim, 480M
|__ Port 2: Dev 2, If 1, Class=CDC Data, Driver=cdc_mbim, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
root@pavel-X58L:/home#

cdc_mbim is a network driver, while cdc_acm and option are usb serial drivers (COM) and they can be in conflict.

Could you suggest how to move on with my COMless EM06-E?

I have no idea how to flash over MBIM or if there is such possibility. I have flashed firmware updates on my devices only through serial (COM) or QMI.

Is there a way to get my Quectel EM06-E into an emergency download mode so that I could upgrade its firmware to get COM ports?

I will send a option driver to you via email, you can install it and check the result of lsusb -t command again.

He has no interface to bind the driver to!
What he needs is USB_BOOT testpoint location.

1 Like

I unpacked your driver, ran ā€œmakeā€ and ā€œmake installā€ from v5.8.1 folder and then ran ā€œlsusb -tā€. This is the output:

root@pavel-X58L:/home/pavel/Downloads/20211204/v5.8.1# lsusb -t
/: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
|__ Port 2: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 2, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 2, If 2, Class=Vendor Specific Class, Driver=, 12M
|__ Port 2: Dev 2, If 3, Class=Application Specific Interface, Driver=, 12M
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
|__ Port 1: Dev 2, If 0, Class=Communications, Driver=cdc_mbim, 480M
|__ Port 1: Dev 2, If 1, Class=CDC Data, Driver=cdc_mbim, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
root@pavel-X58L:/home/pavel/Downloads/20211204/v5.8.1#

What do I do next?

Isaac, What do I do next? Does EM06-E have emergency download mode test points?

Shorten the moduleā€™s usb_boot pin and vdd_ext pin, the module can enter emergency download mode.

I canā€™t see either USB_boot or VDD_ext pins in the pin assignment diagram in EM06 Series Hardware Design version 1.4. Which exactly pins do I need to short?

I didnā€™t find it either, that means the EM-06E module does not support emergency download mode.

Isaac, what are my options to get COM ports with this Quectel EM06-E modem then?

Isaac, how can I get COM ports with my Quectel EM06-E modem?