Over-the-air firmware updates fail on low-bandwidth links with timeout errors

Firmware updates pushed via the Firmware Management module in iod-23 are consistently failing for devices connected over cellular networks with limited bandwidth. Updates work fine on WiFi or wired connections, but cellular devices timeout after downloading 40-60% of the firmware image. The firmware files are around 8-12MB, and cellular links typically provide 200-500 kbps throughput.

Error from device logs:


Firmware download failed: connection timeout
Bytes received: 5242880 / 10485760
Retry attempt 1 of 3 failed

We need to implement chunked firmware download with proper retry policy configuration for OTA updates over cellular networks. The current implementation seems to attempt downloading the entire firmware file in one HTTP request, which isn’t feasible over unreliable low-bandwidth connections. Has anyone successfully deployed firmware updates to cellular-connected devices and dealt with these bandwidth constraints?

For cellular devices, also consider implementing adaptive chunk sizing based on real-time network conditions. Start with larger chunks (512KB) and reduce to smaller sizes (128KB or even 64KB) if you detect packet loss or slow transfer rates. This optimizes download time while maintaining reliability.

Don’t forget to configure appropriate retry policies. For cellular networks, use exponential backoff with jitter to avoid overwhelming the network when multiple devices retry simultaneously. Also set reasonable timeout values - 30 seconds per chunk is usually sufficient for 256KB chunks over cellular.

How do we enable chunked download mode in the Firmware Management module? Is this a server-side configuration or does the device agent need to support it as well?