Host DFU (ESP32) failing with written length mismatch — worked previously on the same card

Has anyone run into this?

Host DFU on a NOTE-NBGLWX with a Starnote starts the download, fails about a second in, and reports written length mismatch to Notehub. Around 15 consecutive attempts, all the same.

The part I can’t explain is that it worked on this same card and board a few days ago — a 739 KB host image on 31 August, and a 934 KB Notecard firmware update on 7 August. Nothing changed on our side between those and the failures.

What I’ve ruled out so far:

  • Payload size — fails identically at 30 KB and at 745 KB
  • Payload content — fails for two unrelated image types
  • Link — fails on Wi-Fi at −45 dBm and on cellular
  • Supply — voltage is stable under load
  • Card statecard.restart and several card.dfu configurations make no difference

Card firmware is 11.3.1.17696. As far as I can tell this fails while the card is fetching the image, before my host reads any chunks — I’m at 512-byte dfu.get chunks, so this isn’t the chunk-size timing issue, though do correct me if I’ve misread where it’s failing.

I found Intermittent host ODFU failure: cannot allocate 8192 bytes {memory}, though that’s outboard DFU and we’re pulling the image with dfu.get instead. Is written length mismatch coming from the same place, or is it a separate path? And is there anything useful I should be capturing while it’s in this state?

Hi @satlog.io and welcome to the Blues community!

This is definitely not a common (nor expected) error and it would be great if we could get a trace log from this Notecard if at all possible. We have some instructions here.

Thanks,
Rob

Unfortunately our aux and USB traces on the board are not exposed without soldering new headers on, what we see if the immediate failure (1 second in).

When we send card.trace: mode:on it responds stop: true and nothing further, presumably the trace logs are sent to the aux interface we don’t have.

Is there a way to clear any cache or storage that might be full, or see if it is?


  "device_uid": "dev:862063070134692",
  "current": {
    "version": "0.1.0.107",
    "organization": "Satello AS",
    "product": "satlog-modem",
    "built": "Sep  3 2026 10:57:47"
  },
  "status": {
    "requested_version": "satlog-modem-0.2.0.94$20260901181250.bin",
    "current_version": "0.1.0.107",
    "initiated": "2026-09-03T15:02:36Z",
    "updates": [
      {
        "status": "host clearing a failed download",
        "phase": "completed",
        "datetime": "2026-09-03T15:34:00Z",
        "description": "completed"
      },
      {
        "status": "written length mismatch",
        "phase": "error",
        "datetime": "2026-09-03T15:04:19Z",
        "description": "error"
      },
      {
        "status": "download started",
        "phase": "download_started",
        "datetime": "2026-09-03T15:04:18Z",
        "description": "download started"
      },
      {
        "status": "awaiting connection to begin update",
        "phase": "pending",
        "datetime": "2026-09-03T15:02:36Z",
        "description": "pending sync"
      }
    ]
  }
}

And here’s the raw exchange we do have:

I (6452) [modem]: >[{"req":"card.version"}]
I (7552) [modem]: #[]
I (21552) [modem]: ![reply timeout]
I (21652) [modem]: >[{"req":"card.version"}]
I (22152) [modem]: <[{"version":"notecard-11.3.1.17696","device":"dev:862063070134692","name":"Blues Wireless Notecard","sku":"NOTE-NBGLWX","ordering_code":"FF3YT1C0AYBT","board":"5.13","wifi":true,"cell":true,"gps":true,"ntn":true,"body":{"org":"Blues Wireless","product":"Notecard","target":"u5","version":"notecard-u5-11.3.1","ver_major":11,"ver_minor":3,"ver_patch":1,"ver_build":17696,"built":"Jun 11 2026 16:25:45"}}]
I (22152) [modem]: >[{"req":"card.transport","method":"wifi-cell-ntn"}]
I (22352) [modem]: <[{"method":"wifi-cell-ntn"}]
I (22352) [modem]: >[{"req":"card.trace","mode":"on"}]
I (22452) [modem]: <[{"stop":true}]
I (22452) [modem]: >[{"req":"dfu.status","version":"{\"org\":\"Satello AS\",\"product\":\"satlog-modem\",\"version\":\"0.1.0.107\",\"ver_major\":0,\"ver_minor\":1,\"ver_patch\":0,\"ver_build\":107,\"built\":\"Sep  3 2026 10:57:47\"}"}]
I (23052) [modem]: <[{"status":"host clearing a failed download","mode":"completed","on":true}]
I (23052) [modem]: >[{"req":"card.location.mode","mode":"periodic","seconds":300}]
I (23252) [modem]: <[{"seconds":300,"mode":"periodic","journey":true}]
I (23252) [modem]: >[{"req":"hub.set","mode":"periodic","outbound":10,"inbound":15}]
I (23352) [modem]: <[{}]
I (23352) [modem]: >[{"req":"card.wifi","ssid":"AlohaNet","password":"<redacted>"}]
I (23552) [modem]: <[{"secure":true,"version":"WFM200.3.16.0","ssid":"AlohaNet"}]
I (23552) [modem]: >[{"req":"card.dfu","name":"esp32","mode":"aux"}]
I (23752) [modem]: <[{"mode":"aux","name":"esp32"}]
I (23752) [modem]: >[{"req":"hub.status"}]
I (23952) [modem]: <[{"status":"waiting for wireless service {wait-service} {connecting}"}]
I (23952) [modem]: >[{"req":"card.wireless"}]
I (24352) [modem]: <[{"status":"{network-up}","mode":"auto","count":4,"net":{"imei":"38:5C:FB:E9:DA:60","modem":"WFM200.3.16.0","ssid":"AlohaNet","bssid":"74:AC:B9:4E:4C:D8","rat":"wifi-2.4","rssi":-51,"bars":4,"ip":"192.168.2.187","gateway":"192.168.2.1","cid":6,"updated":1788447558}}]
I (24552) [modem]: >[{"req":"note.add","file":"satlog.qo","payload":"A2cLAAA="}]
I (24752) [modem]: <[{"total":1}]
I (24752) [modem]: >[{"req":"hub.sync"}]
I (24852) [modem]: <[{}]
I (30562) [modem]: >[{"req":"dfu.status"}]
I (30762) [modem]: <[{"status":"host clearing a failed download","mode":"completed","on":true}]
I (30762) [modem]: ![no image ready]

Hi @satlog.io,

Are you able to swap out the Notecard you are using with a different one, just to see if that clears the issue?

And to be clear when you said:

NOTE-NBGLWX with a Starnote

I assume you are only using the Notecard for Skylo and you don’t have that also paired with another Starnote?

Rob

That’s right, I have the Notecard for Skylo starter kit, using the Skylo Notecard on my own ESP32 host board.

Unfortunately I do not have another Notecard. Is there a factory reset function I should try?