<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bootloader STM32 - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/bootloader-stm32/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Wed, 10 Dec 2025 12:44:43 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>bootloader STM32 - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como Funcionam os Fuse Bits (Option Bytes) nos Microcontroladores STM32: Parametrização e Segurança do Firmware</title>
		<link>https://mcu.tec.br/microcontroladores/stm32/como-funcionam-os-fuse-bits-option-bytes-nos-microcontroladores-stm32-parametrizacao-e-seguranca-do-firmware/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-funcionam-os-fuse-bits-option-bytes-nos-microcontroladores-stm32-parametrizacao-e-seguranca-do-firmware</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Sat, 13 Dec 2025 12:44:21 +0000</pubDate>
				<category><![CDATA[STM32]]></category>
		<category><![CDATA[bootloader STM32]]></category>
		<category><![CDATA[BOR]]></category>
		<category><![CDATA[fuse bits]]></category>
		<category><![CDATA[option bytes]]></category>
		<category><![CDATA[parametrização de microcontroladores]]></category>
		<category><![CDATA[PCROP]]></category>
		<category><![CDATA[proteção contra cópia]]></category>
		<category><![CDATA[proteção de firmware]]></category>
		<category><![CDATA[RDP]]></category>
		<category><![CDATA[segurança embarcada]]></category>
		<category><![CDATA[st-flash]]></category>
		<category><![CDATA[stm32]]></category>
		<category><![CDATA[STM32CubeProgrammer]]></category>
		<category><![CDATA[TrustZone]]></category>
		<category><![CDATA[watchdog]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=986</guid>

					<description><![CDATA[<p>Os microcontroladores STM32 utilizam Option Bytes como um sistema equivalente aos fuse bits tradicionais, permitindo configurar parâmetros essenciais de operação e segurança do firmware. Esses recursos controlam proteção de leitura, modos de boot, watchdogs, níveis de BROWN-OUT, TrustZone e outras funções críticas. Este artigo explica de forma didática o papel de cada Option Byte, seus usos práticos, como configurá-los com o STM32CubeProgrammer e como gravá-los via st-flash, garantindo maior segurança, confiabilidade e proteção intelectual em projetos embarcados.</p>
<p>The post <a href="https://mcu.tec.br/microcontroladores/stm32/como-funcionam-os-fuse-bits-option-bytes-nos-microcontroladores-stm32-parametrizacao-e-seguranca-do-firmware/">Como Funcionam os Fuse Bits (Option Bytes) nos Microcontroladores STM32: Parametrização e Segurança do Firmware</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading"><strong>1. Introdução ao Sistema de Fuse Bits em STM32</strong></h2>



<p class="wp-block-paragraph">Em microcontroladores AVR e PIC, o termo <strong>fuse bits</strong> refere-se a configurações permanentes que controlam parâmetros do chip, como fontes de clock e mecanismos de proteção.<br>Nos <strong>STM32</strong>, o equivalente funcional são os <strong>Option Bytes</strong>, valores gravados em áreas especiais da <strong>Flash</strong> ou do <strong>Flash System Memory</strong>, usados para definir comportamento de boot, níveis de proteção, watchdog, brown-out e recursos de segurança.</p>



<p class="wp-block-paragraph">Embora não sejam chamados literalmente de fuse bits, sua função é <strong>idêntica</strong>:<br>configurar <strong>parametrização estrutural</strong> e <strong>segurança do firmware</strong>, alterando características que o software comum <strong>não pode modificar livremente</strong>.</p>



<p class="wp-block-paragraph">Essas opções são fundamentais em projetos profissionais porque permitem:</p>



<ul class="wp-block-list">
<li>proteger a propriedade intelectual do firmware,</li>



<li>impedir gravações não autorizadas,</li>



<li>definir mecanismos de boot seguro,</li>



<li>reforçar a confiabilidade do sistema.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>2. Estrutura dos Option Bytes nos STM32</strong></h3>



<p class="wp-block-paragraph">Os Option Bytes variam levemente entre famílias (F1, F4, G0, L0, H7 etc.), mas a estrutura típica inclui:</p>



<h4 class="wp-block-heading"><strong>2.1 RDP – Readout Protection Level (Proteção de Leitura)</strong></h4>



<p class="wp-block-paragraph">Controla a <strong>proteção contra cópia do firmware</strong>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Nível</th><th>Significado</th></tr></thead><tbody><tr><td><strong>RDP Level 0</strong></td><td>Sem proteção. Pode ler e gravar a flash normalmente.</td></tr><tr><td><strong>RDP Level 1</strong></td><td>Impede leitura da Flash via debugger. Gravação ainda permitida, mas leitura é bloqueada.</td></tr><tr><td><strong>RDP Level 2</strong></td><td>Proteção total e irreversível. Impede leitura e impede retorno ao nível 0.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Uso:</strong><br>Aplicado em produtos comerciais onde há risco de pirataria. A maior parte dos fabricantes usa <strong>Level 1</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>2.2 BOR – Brown-Out Reset (Níveis de Reset por Queda de Tensão)</strong></h4>



<p class="wp-block-paragraph">Configura o limite de tensão abaixo do qual o MCU deve reiniciar para evitar corrupção.</p>



<p class="wp-block-paragraph">Níveis típicos: <strong>OFF, 2.1V, 2.4V, 2.7V</strong>.</p>



<p class="wp-block-paragraph"><strong>Função:</strong><br>Evita operação instável quando a fonte cai momentaneamente.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>2.3 nBOOT0, nBOOT1 e BOOT_LOCK</strong></h4>



<p class="wp-block-paragraph">Controlam a lógica de boot:</p>



<ul class="wp-block-list">
<li><strong>nBOOT0 / nBOOT1:</strong> Selecionam se o MCU irá iniciar pela Flash, SRAM ou System Memory (bootloader da ST).</li>



<li><strong>BOOT_LOCK:</strong> Impede alterações nos bits de boot para fortalecer a segurança.</li>
</ul>



<p class="wp-block-paragraph"><strong>Uso comum:</strong><br>Permitir que o dispositivo inicialize sempre pela Flash e não aceite boot por RAM para evitar ataques.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>2.4 WWDG_SW e IWDG_SW (Watchdog em Hardware ou Software)</strong></h4>



<p class="wp-block-paragraph">Determinam se o watchdog é controlado:</p>



<ul class="wp-block-list">
<li><strong>por software</strong>, ou</li>



<li><strong>apenas por hardware</strong>, impedindo que o firmware o desative.</li>
</ul>



<p class="wp-block-paragraph"><strong>Uso:</strong><br>Aplicado em sistemas críticos onde segurança funcional exige watchdog sempre ativo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>2.5 IWDG_STOP e IWDG_STDBY</strong></h4>



<p class="wp-block-paragraph">Definem se o <strong>Independent Watchdog</strong> deve continuar funcionando nos modos:</p>



<ul class="wp-block-list">
<li>STOP</li>



<li>STANDBY</li>
</ul>



<p class="wp-block-paragraph"><strong>Uso:</strong><br>Sistemas que não podem “congelar” a supervisão durante redução de consumo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>2.6 nRST_STOP e nRST_STDBY</strong></h4>



<p class="wp-block-paragraph">Controlam se a saída de reset deve ser acionada ao sair de STOP/STANDBY.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>2.7 PCROP (Proprietary Code Protection)</strong></h4>



<p class="wp-block-paragraph">Protege áreas específicas da Flash contra:</p>



<ul class="wp-block-list">
<li>leitura externa,</li>



<li>escrita,</li>



<li>apagamento.</li>
</ul>



<p class="wp-block-paragraph"><strong>Uso:</strong><br>Indicado quando há uma “biblioteca” proprietária dentro do firmware.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>2.8 Security Bit / TZEN (em MCUs com TrustZone)</strong></h3>



<p class="wp-block-paragraph">Em STM32L5, U5 e H5:</p>



<ul class="wp-block-list">
<li><strong>TZEN = TrustZone Enable</strong><br>Ativa a arquitetura segura (Secure/Non-Secure).</li>
</ul>



<p class="wp-block-paragraph"><strong>Uso:</strong><br>Gerenciamento de zonas seguras, criptografia, updates protegidos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading"><strong>3. Ferramentas para Configuração dos Option Bytes</strong></h1>



<h3 class="wp-block-heading"><strong>3.1 STM32CubeProgrammer (Método Oficial)</strong></h3>



<p class="wp-block-paragraph">Ferramenta gráfica da ST que permite:</p>



<ul class="wp-block-list">
<li>ler Option Bytes,</li>



<li>alterar valores,</li>



<li>editar níveis de RDP,</li>



<li>configurar BOR, watchdog, PCROP, TrustZone,</li>



<li>gravar firmware via SWD, JTAG, UART, USB DFU.</li>
</ul>



<p class="wp-block-paragraph">Interface intuitiva com abas dedicadas a cada Option Byte.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>3.2 ST-Link Utility (antiga, mas ainda usada)</strong></h3>



<p class="wp-block-paragraph">Ferramenta clássica para MCUs STM32F e STM32L.<br>Permite edição direta dos Option Bytes com rapidez.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading"><strong>4. Gravando o Firmware e Option Bytes via st-flash (CLI)</strong></h1>



<p class="wp-block-paragraph">A ferramenta <strong>st-flash</strong>, parte do pacote <strong>stlink</strong>, permite gravação via linha de comando.</p>



<h3 class="wp-block-heading"><strong>4.1 Gravando firmware</strong></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>st-flash write firmware.bin 0x08000000
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">st</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">flash</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">write</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">firmware</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">bin</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0x08000000</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><strong>4.2 Lendo Option Bytes</strong></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>st-flash read option_bytes.bin 0x1FFF7800 256
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">st</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">flash</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">read</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">option_bytes</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">bin</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0x1FFF7800</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">256</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><strong>4.3 Gravando Option Bytes</strong></h3>



<p class="wp-block-paragraph">Os Option Bytes ficam em endereços especiais dependendo da família.<br>Após atualizar os OBs, o chip <strong>reinicia automaticamente</strong>, aplicando as novas configurações.</p>



<p class="wp-block-paragraph">st-flash também informa erros comuns como:</p>



<ul class="wp-block-list">
<li>tentativa de gravar OBs protegidos,</li>



<li>violação de RDP,</li>



<li>incompatibilidade com certos níveis de segurança.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading"><strong>5. Considerações de Segurança e Boas Práticas</strong></h1>



<ol class="wp-block-list">
<li><strong>Nunca aplique RDP Level 2 antes dos testes finais.</strong><br>É irreversível.</li>



<li><strong>Ative BOR em sistemas alimentados por baterias ou fontes ruidosas.</strong></li>



<li><strong>Habilite watchdog por hardware em sistemas críticos.</strong></li>



<li><strong>Use PCROP para proteger bibliotecas ou algoritmos proprietários.</strong></li>



<li><strong>Em MCUs com TrustZone, habilite TZEN apenas com particionamento seguro já definido.</strong></li>



<li><strong>Documente todos os Option Bytes usados no projeto.</strong><br>Isso evita perda de configurações em futuras versões.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading"><strong>6. Conclusão</strong></h1>



<p class="wp-block-paragraph">O sistema de “fuse bits”, representado pelos <strong>Option Bytes</strong>, é um dos pilares de segurança e parametrização nos microcontroladores STM32. Ele define desde o comportamento básico de boot até proteções avançadas como RDP, PCROP e TrustZone.<br>A correta configuração desses parâmetros, aliada a ferramentas como <strong>STM32CubeProgrammer</strong>, <strong>ST-Link Utility</strong> e <strong>st-flash</strong>, garante firmware seguro, protegido contra cópia, e aumenta a confiabilidade do sistema embarcado.</p><p>The post <a href="https://mcu.tec.br/microcontroladores/stm32/como-funcionam-os-fuse-bits-option-bytes-nos-microcontroladores-stm32-parametrizacao-e-seguranca-do-firmware/">Como Funcionam os Fuse Bits (Option Bytes) nos Microcontroladores STM32: Parametrização e Segurança do Firmware</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">986</post-id>	</item>
	</channel>
</rss>
