Updating EM7565 on openwrt

So here I’m necromancing this post for whoever might be stuck trying to upgrade a Sierra EM7455 Modem.

So I got an old Dell DW5811e card, which i first made recognize as a Sierra MC card using the following AT commands:

Using picocom to connect to the serial port of the modem
# picocom -b 19200 /dev/ttyUSB2

run these commands

AT!ENTERCND="A710"
AT!USBPID=9071,9070
AT!USBVID=1199
AT!USBPRODUCT="EM7455"
AT!PRIID="9904802","001.001","Generic-Laptop"
AT!RESET

Now the modem identifies as a non OEM Sierra EM7455 modem.

i’ve then tried to upgrade the firmware with the automatic solution, being:

deviceid=`lsusb | grep -i -E '1199:9071|1199:9079|413C:81B6' | awk '{print $6}'`
echo $deviceid
qmi-firmware-update --update -d "$deviceid" SWI9X30C_02.38.00.00.cwe SWI9X30C_02.38.00.00_GENERIC_002.082_000.nvu -L upgrade.log --ignore-mm-runtime-check

This did not work, giving me a error: unsupported download protocol error.
In the logs, I got [qfu-updater] qdl device creation failed: unexpected response received in dload sdp: 0x13
Since the modem has 3 serial ports, I probably didn’t talk to the one accepting upgrades.

That’s the tricky part, when the modem gets rebooted in download mode, there should only be one serial port (something like /dev/ttyUSB0) and no /dev/cdc-wdm0 device.
That actually happens, but qmi-firmware-update just waits for too long, and the modem reverts to non download mode. The firmware update them complains it can’t find sahara protocol, which is the update protocol…

I ended up making a manual update with 2 ssh sessions:
The first terminal shows which devices are up every second:

watch -n 1 "ls /dev/{cdc-*,ttyUSB*}"

On the second terminal, i ran the following:

qmicli -d /dev/cdc-wdm0 -p --dms-set-firmware-preference="firmware-version=02.38.00.00,config-version=002.082_000,carrier=Generic"
qmicli -d /dev/cdc-wdm0 --dms-set-operating-mode=offline
qmicli -d /dev/cdc-wdm0 --dms-set-operating-mode=reset

Now I just had to wait (about 45 seconds or so) until my first terminal showed me that only /dev/ttyUSB0 existed, than I could run the actual firmware update with:

qmi-firmware-update -t "/dev/ttyUSB0" -L upgrade.log --ignore-mm-runtime-check -U SWI9X30C_02.38.00.00.cwe SWI9X30C_02.38.00.00_GENERIC_002.082_000.nvu

FW download went well with


downloading cwe image: SWI9X30C_02.38.00.00.cwe (64.3 MB)...
finalizing download... (may take more than one minute, be patient)
successfully downloaded in 57.90s (1.1 MB/s)
downloading cwe image: SWI9X30C_02.38.00.00_GENERIC_002.082_000.nvu (23.9 kB)...
finalizing download... (may take more than one minute, be patient)
successfully downloaded in 0.08s (298.1 kB/s)
rebooting in normal mode...
firmware update operation finished successfully

For an unknown reason, I had to do the update twice on my modem for it to work, eg:

 qmicli --device=/dev/cdc-wdm0 --dms-swi-get-current-firmware
[/dev/cdc-wdm0] Successfully retrieved current firmware:
        Model: EM7455B
        Boot version: SWI9X30C_02.38.00.00
        AMSS version: SWI9X30C_02.38.00.00
        SKU ID: 1102565
        Package ID: unknown
        Carrier ID: 1
        Config version: 002.017_000

Hope this helps someone :wink:

1 Like