<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[DLMS Image Transfer (Class 18) Block Size Optimization & Verification Failure in OTA Updates]]></title><description><![CDATA[<h3>Firmware Upgrade (OTA) Engineering Notes</h3>
<p dir="auto">When performing Over-The-Air (OTA) firmware upgrades on NB-IoT / Cellular smart meters using COSEM Class 18 (Image Transfer), we encountered two major challenges:</p>
<ol>
<li><strong>Block Size Throttling</strong>: Negotiating a block size larger than 512 bytes on high-latency cellular connections causes packet fragmentation and retransmissions.</li>
<li><strong>Image Verification Failure</strong>: Calling method <code>image_verify</code> (Method 3) returned <code>temporary-failure</code> or <code>hardware-fault</code>.</li>
</ol>
<h4>Recommended Block Size by Media</h4>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="text-align:left">Communication Media</th>
<th style="text-align:left">Optimal Block Size</th>
<th style="text-align:left">Max Window Size</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Optical Probe / Serial</td>
<td style="text-align:left">512 - 1024 bytes</td>
<td style="text-align:left">1</td>
</tr>
<tr>
<td style="text-align:left">RS-485 Multi-drop</td>
<td style="text-align:left">256 - 512 bytes</td>
<td style="text-align:left">1</td>
</tr>
<tr>
<td style="text-align:left">NB-IoT / LTE-M</td>
<td style="text-align:left">192 - 256 bytes</td>
<td style="text-align:left">1</td>
</tr>
<tr>
<td style="text-align:left">Ethernet / TCP-IP</td>
<td style="text-align:left">1024 - 2048 bytes</td>
<td style="text-align:left">4</td>
</tr>
</tbody>
</table>
<h4>Verification Root Cause</h4>
<p dir="auto">In Class 18, before invoking <code>image_verify</code>, the client must check attribute 7 (<code>image_to_verify_image_signature</code>). If your build system prepends a proprietary header to the raw binary file that is not part of the meter's cryptographic hash signature, the on-chip bootloader hash check will fail.</p>
]]></description><link>https://dlms.sharur.org/topic/28/dlms-image-transfer-class-18-block-size-optimization-verification-failure-in-ota-updates</link><generator>RSS for Node</generator><lastBuildDate>Fri, 16 Oct 2026 19:49:14 GMT</lastBuildDate><atom:link href="https://dlms.sharur.org/topic/28.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Aug 2026 12:35:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLMS Image Transfer (Class 18) Block Size Optimization & Verification Failure in OTA Updates on Sat, 22 Aug 2026 12:35:48 GMT]]></title><description><![CDATA[<p dir="auto">We implemented block-level resume in our Head-End System. For a 500 KB firmware image with 256-byte blocks (2000 blocks), resuming dropped packets reduced total OTA upgrade bandwidth by 78% on cellular meters.</p>
]]></description><link>https://dlms.sharur.org/post/63</link><guid isPermaLink="true">https://dlms.sharur.org/post/63</guid><dc:creator><![CDATA[marcus_vance]]></dc:creator><pubDate>Sat, 22 Aug 2026 12:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to DLMS Image Transfer (Class 18) Block Size Optimization & Verification Failure in OTA Updates on Sat, 22 Aug 2026 12:35:48 GMT]]></title><description><![CDATA[<p dir="auto">To ensure robust Image Transfer over lossy networks, always query attribute 6 (<code>image_transfer_status</code>) and attribute 4 (<code>image_transferred_blocks_indicator</code>) before verifying.</p>
<p dir="auto">If any bits in the bit-string are <code>0</code> (indicating missing blocks), use <code>image_block_transfer</code> to resend only the missing block indices rather than restarting the entire firmware transfer from block 0.</p>
]]></description><link>https://dlms.sharur.org/post/62</link><guid isPermaLink="true">https://dlms.sharur.org/post/62</guid><dc:creator><![CDATA[alex_turner]]></dc:creator><pubDate>Sat, 22 Aug 2026 12:35:48 GMT</pubDate></item></channel></rss>