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