EM7565 Any Special Hardware Conditions for Flashing Firmware?

I am trying to use the EM7565 in an M.2-USB adapter board, however, when using the firmware download binaries I am running into the error: FW download failed: eSDP_FWDWL_ERR_FIREHOSE_STATE_ERR(120). I have ran into this error on two different M.2-USB boards. I do not encounter this issue when running the same x86/64 binary on a Latte Panda 3 Delta which is a Single-Board Computer(SBC) that has an M.2 slot built into it. Both my workstation and the Delta are running ubuntu 24.04. Additionally, I have tried the fw-download-toolarm64linaro binary on a raspberry pi 5 and receive the same error.

Are there special hardware conditions that allow the Delta to perform the full firmware flash that the M.2-USB boards do not have? Or any other thoughts on why this error is occurring only on the adapter boards?

$ sudo ~/Downloads/MBPL_SDK_R46_ENG5-fwdwl/SampleApps/fw-download-tool/bin/fw-download-toolhostx86_64 -f ~/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003 -P 1-7 -t 1
Application version: 1.0.2509.0
INFO: QDL Port:
INFO: Device Path: /dev/cdc-wdm2
INFO: Device Port: 1-7
INFO: FW Path: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003
Target image Info:
Carrier :TMO
FW Version :01.14.02.00
Model ID :SWI9X50C
Package ID :003
PRI Version:002.003
SKU :9999999
Switching device into download mode for image switch …
Modem Needs FW
Modem Needs PRI
Waiting for modem to disconnect from the host …
Modem disconnected from host.
Waiting for modem to come up in BOOT and HOLD mode …
QDL port found: /dev/ttyUSB0
BOOT and HOLD Mode. Downloading firmware …
Downloading: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003/SWI9X50C_01.14.02.00.cwe
FW download failed: eSDP_FWDWL_ERR_FIREHOSE_STATE_ERR(120)

Full fwdw.log output:
Summary
1.
Sahara protocol completes successfully - Hello, command execute, switch to Firehose all work
2. Firehose negotiation works - getStorageInfo returns valid NAND info, ACK received
3. The entire 80 MB CWE image transfers - Total bytes sent: 80240356 bytes
4. Then no ACK received - 300 consecutive 500ms read timeouts (~150 seconds) waiting for the post-write ACK from the modem before bailing with eSDP_FWDWL_ERR_FIREHOSE_STATE_ERR(120)

fwdwllog.txt (72.1 KB)

is that you have other M.2 module in the same platform?
I can see /dev/cdc-wdm2, but not /dev/cdc-wdm0

BTW, you can also use the same command as this one:

I am not sure why it is showing up as 2 instead of 0. Probably from attempting the download a few times. There is no other cdc-wdm port active
$ ls /dev/cdc*
/dev/cdc-wdm2

I tried the sudo chmod +777 /dev/cdc-wdm2 command, but no luck after trying the FW download again

you can try to use similar command as this one:

BTW, did you install the same MBPL driver with the OK platform and the NOK platform?

Lastly, what is the setting of AT!USBCOMP? for your module?

I did try those commands for adding permissions with chmod 777, see my previous reply. I also tried the firmware download command with -d and -p but it still gives the firehose error

$ sudo ~/Downloads/MBPL_SDK_R46_ENG5-fwdwl/SampleApps/fw-download-tool/bin/fw-download-toolhostx86_64 -f ~/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003 -d /dev/ttyUSB0 -p /dev/cdc-wdm2 -t 1
Application version: 1.0.2509.0
INFO: QDL Port: /dev/ttyUSB0
INFO: Device Path: /dev/cdc-wdm2
INFO: Device Port: 0-0
INFO: FW Path: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003
Target image Info:
Carrier :TMO
FW Version :01.14.02.00
Model ID :SWI9X50C
Package ID :003
PRI Version:002.003
SKU :9999999
Switching device into download mode for image switch …
Modem Needs PRI
Waiting for modem to disconnect from the host …
Modem disconnected from host.
Waiting for modem to come up in BOOT and HOLD mode …
BOOT and HOLD Mode. Downloading firmware …
Downloading: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003/SWI9X50C_01.14.02.00_TMO_002.003_003.nvu
FW download failed: eSDP_FWDWL_ERR_FIREHOSE_STATE_ERR(120)

Yes I am using the R46 MBPL drivers on both systems.

at!usbcomp?
Config Index: 1
Config Type: 3 (Generic)
Interface bitmask: 0000010D (diag,nmea,modem,rmnet0)

Does it help if you use mbim instead of rmnet in at!usbcomp?

BTW, one user (who getting the same error as yours) makes it work after bypassing USB hub:

I followed the “Manual Flashing Procedure” in this github readme and it was successful. They used the qmi-firmware-update cli tool

sudo add-apt-repository universe
sudo apt update
apt-get install libqmi-glib5 libqmi-proxy libqmi-utils -y

sudo systemctl stop ModemManager
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 1462:7e06 Micro Star International MYSTIC LIGHT 
Bus 001 Device 003: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub
Bus 001 Device 006: ID 8087:0033 Intel Corp. AX211 Bluetooth
Bus 001 Device 007: ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub
Bus 001 Device 008: ID 275d:0ba6  USB OPTICAL MOUSE 
Bus 001 Device 010: ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub
Bus 001 Device 011: ID 046d:094d Logitech, Inc. Brio 101
Bus 001 Device 030: ID 1c4f:007e SiGma Micro USB Keyboard
Bus 001 Device 054: ID 1199:9091 Sierra Wireless, Inc. Sierra Wireless EM7565 Qualcomm® Snapdragon™ X16 LTE-A

# vendor:product ID of 1199:9091

$ sudo qmi-firmware-update --update -d 1199:9091 SWI9X50C_01.14.02.00.cwe SWI9X50C_01.14.02.00_TMO_002.003_003.nvu 
loading device information before the update...
setting firmware preference:
  firmware version: '01.14.02.00'
  config version:   '002.003_003'
  carrier:          'TMO'
rebooting in download mode...
download mode detected
downloading cwe image: SWI9X50C_01.14.02.00.cwe (80.2 MB)...
finalizing download... (may take several minutes, be patient)
successfully downloaded in 113.26s (708.5 kB/s)
downloading cwe image: SWI9X50C_01.14.02.00_TMO_002.003_003.nvu (10.4 kB)...
finalizing download... (may take several minutes, be patient)
successfully downloaded in 0.09s (115.6 kB/s)
rebooting in normal mode...
normal mode detected

------------------------------------------------------------------------
    NOTE: in order to validate which is the firmware running in the
    module, the program will wait for a complete boot; this process
    may take some time and several retries.
------------------------------------------------------------------------

waiting some time for the device to boot...
loading device information after the update (1/12)...

------------------------------------------------------------------------

   original firmware revision was:
      SWI9X50C_01.14.02.00 2e210b jenkins 2020/08/19 14:18:39
   original running firmware details:
      Model: EM7565
      Boot version: SWI9X50C_01.14.02.00
      AMSS version: SWI9X50C_01.14.02.00
      SKU ID: 1104207
      Carrier ID: 1
      Config version: 002.011_002
   original firmware preference details:
      image 'modem': unique id '002.003_003', build id '01.14.02.00_TMO'
      image 'pri': unique id '002.003_003', build id '01.14.02.00_TMO'

   new firmware revision is:
      SWI9X50C_01.14.02.00 2e210b jenkins 2020/08/19 14:18:39
   new running firmware details:
      Model: EM7565
      Boot version: SWI9X50C_01.14.02.00
      AMSS version: SWI9X50C_01.14.02.00
      SKU ID: 1104207
      Carrier ID: 203
      Config version: 002.003_003
   new firmware preference details:
      image 'modem': unique id '002.003_003', build id '01.14.02.00_TMO'
      image 'pri': unique id '002.003_003', build id '01.14.02.00_TMO'

   NOTE: this device supports stored image management
   with qmicli operations:
      --dms-list-stored-images
      --dms-select-stored-image
      --dms-delete-stored-image

   NOTE: this device supports firmware preference management
   with qmicli operations:
      --dms-get-firmware-preference
      --dms-set-firmware-preference

------------------------------------------------------------------------

firmware update operation finished successfully

This doesn’t appear to be the solution as when I try the qmi-firmware-update cli tool with another EM7565 modem, it does not complete.
$ sudo qmi-firmware-update --update -d 1199:9091 firmware/SWI9X50C_01.14.02.00.cwe firmware/SWI9X50C_01.14.02.00_TMO_002.003_003.nvu
loading device information before the update…
setting firmware preference:
firmware version: ‘01.14.02.00’
config version: ‘002.003_003’
carrier: ‘TMO’
rebooting in download mode…
error: error waiting for serial device in download mode: waiting for device at ‘/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7’ timed out

Looking back at the previous reply, it seems that somehow the firmware got partially loaded on the modem, then the qmi-firmware-update completed the flash. I’m not sure how that happened.

When trying with the sierra wireless binary, it does not get past the step “Modem not coming up in BOOT and HOLD mode in 60 seconds. Please check parameters. Application terminates.”

$ sudo ~/Downloads/MBPL_SDK_R46_ENG5-fwdwl/SampleApps/fw-download-tool/bin/fw-download-toolhostx86_64 -f ~/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003 -P 1-7 -t 1
Application version: 1.0.2509.0
INFO: QDL Port:
INFO: Device Path: /dev/cdc-wdm2
INFO: Device Port: 1-7
INFO: FW Path: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003
Target image Info:
Carrier :TMO
FW Version :01.14.02.00
Model ID :SWI9X50C
Package ID :003
PRI Version:002.003
SKU :9999999
Switching device into download mode for image switch …
Modem Needs FW
Modem Needs PRI
Waiting for modem to disconnect from the host …
Waiting for modem to come up in BOOT and HOLD mode …
QDL port found: /dev/ttyUSB0
Modem not coming up in BOOT and HOLD mode in 60 seconds. Please check parameters. Application terminates.

fwdwllog.txt (11.9 KB)

Does it help if you use mbim instead of rmnet in at!usbcomp?

From your test here, it can download firmware

I tried changing it to mbim mode and did not work with the qmi tool or the sierra wireless tool

$ sudo qmi-firmware-update --update --device-open-mbim -d 1199:9091 firmware/SWI9X50C_01.14.02.00.cwe firmware/SWI9X50C_01.14.02.00_TMO_002.003_003.nvu
loading device information before the update…
setting firmware preference:
firmware version: ‘01.14.02.00’
config version: ‘002.003_003’
carrier: ‘TMO’
rebooting in download mode…
error: error waiting for serial device in download mode: waiting for device at ‘/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7’ timed out

$ sudo ~/Downloads/MBPL_SDK_R46_ENG5-fwdwl/SampleApps/fw-download-tool/bin/fw-download-toolhostx86_64 -f ~/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003 -P 1-7 -t 1
[sudo] password for jacob:
Application version: 1.0.2509.0
INFO: QDL Port:
INFO: Device Path: /dev/cdc-wdm2
INFO: Device Port: 1-7
INFO: FW Path: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003
Target image Info:
Carrier :TMO
FW Version :01.14.02.00
Model ID :SWI9X50C
Package ID :003
PRI Version:002.003
SKU :9999999
Switching device into download mode for image switch …
Modem Needs FW
Modem Needs PRI
Waiting for modem to disconnect from the host …
Waiting for modem to come up in BOOT and HOLD mode …
Modem not coming up in BOOT and HOLD mode in 60 seconds. Please check parameters. Application terminates.

I don’t see you specifying the serial port /dev/ttyUSB0 like this

I get the same results, not getting past the step waiting for modem to come up in boot and hold mode
$ sudo ~/Downloads/MBPL_SDK_R46_ENG5-fwdwl/SampleApps/fw-download-tool/bin/fw-download-toolhostx86_64 -f ~/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003 -d /dev/ttyUSB0 -p /dev/cdc-wdm2 -t 1
Application version: 1.0.2509.0
INFO: QDL Port: /dev/ttyUSB0
INFO: Device Path: /dev/cdc-wdm2
INFO: Device Port: 0-0
INFO: FW Path: /home/jacob/Downloads/SWI9X50C_01.14.02.00_TMO_002.003_003
Target image Info:
Carrier :TMO
FW Version :01.14.02.00
Model ID :SWI9X50C
Package ID :003
PRI Version:002.003
SKU :9999999
Switching device into download mode for image switch …
Modem Needs FW
Modem Needs PRI
Waiting for modem to disconnect from the host …
Waiting for modem to come up in BOOT and HOLD mode …
Modem not coming up in BOOT and HOLD mode in 60 seconds. Please check parameters. Application terminates.

then did you see /dev/ttyUSB0 in dmesg for downloading firmware?
Strange that in the past, you can get this port…

This is dmesg after I switched AT!USBCOMP=1,1,1009 to change to MBIM mode
[1130255.311866] usb 1-7: new high-speed USB device number 98 using xhci_hcd
[1130255.435470] usb 1-7: config 1 has an invalid interface number: 4 but max is 3
[1130255.435473] usb 1-7: config 1 has no interface number 3
[1130255.436200] usb 1-7: New USB device found, idVendor=1199, idProduct=9091, bcdDevice= 0.06
[1130255.436201] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1130255.436202] usb 1-7: Product: Sierra Wireless EM7565 Qualcomm® Snapdragon™ X16 LTE-A
[1130255.436203] usb 1-7: Manufacturer: Sierra Wireless, Incorporated
[1130255.436204] usb 1-7: SerialNumber: UF22613043041052
[1130255.463518] cdc_mbim 1-7:1.0: cdc-wdm2: USB WDM device
[1130255.463627] cdc_mbim 1-7:1.0 wwan0: register ‘cdc_mbim’ at usb-0000:00:14.0-7, CDC MBIM, 26:f0:21:81:71:d4
[1130255.464548] qcserial 1-7:1.2: Qualcomm USB modem converter detected
[1130255.464582] usb 1-7: Qualcomm USB modem converter now attached to ttyUSB0

But during the firmware download, it doesn’t show any disconnection or any other messages

For normal boot up, module should enumerate both cdc-wdm port for MBIM and /dev/ttyUSB0 for DM port and /dev/ttyUSB1 for AT command port.

After "Switching device into download mode for image switch ", module should be reset and enumerate only one port /devttyUSB0 for downloading firmware.