<?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>protocolos seriais - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/protocolos-seriais/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Tue, 06 Jan 2026 23:04:34 +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>protocolos seriais - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Protocolos auto-sincronizáveis em sistemas embarcados</title>
		<link>https://mcu.tec.br/protoclos/uart-serial/protocolos-auto-sincronizaveis-em-sistemas-embarcados/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=protocolos-auto-sincronizaveis-em-sistemas-embarcados</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Sat, 17 Jan 2026 10:20:00 +0000</pubDate>
				<category><![CDATA[UART (Serial)]]></category>
		<category><![CDATA[CBOR]]></category>
		<category><![CDATA[COBS]]></category>
		<category><![CDATA[comunicação serial robusta]]></category>
		<category><![CDATA[framing serial]]></category>
		<category><![CDATA[protocolos auto-sincronizáveis]]></category>
		<category><![CDATA[protocolos binários]]></category>
		<category><![CDATA[protocolos seriais]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[SLIP]]></category>
		<category><![CDATA[UART embarcado]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=1108</guid>

					<description><![CDATA[<p>Entenda como funcionam os protocolos auto-sincronizáveis SLIP, COBS e CBOR em sistemas embarcados. Veja exemplos em C, comparações técnicas, boas e más escolhas de engenharia e descubra como projetar comunicações seriais robustas para UART, SPI e IoT.</p>
<p>The post <a href="https://mcu.tec.br/protoclos/uart-serial/protocolos-auto-sincronizaveis-em-sistemas-embarcados/">Protocolos auto-sincronizáveis em sistemas embarcados</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="root-eb-toc-3810l wp-block-essential-blocks-table-of-contents"><div class="eb-parent-wrapper eb-parent-eb-toc-3810l "><div class="eb-toc-container eb-toc-3810l  eb-toc-is-not-sticky eb-toc-not-collapsible eb-toc-initially-not-collapsed eb-toc-scrollToTop style-1 list-style-none" data-scroll-top="false" data-scroll-top-icon="fas fa-angle-up" data-collapsible="false" data-sticky-hide-mobile="false" data-sticky="false" data-scroll-target="scroll_to_toc" data-copy-link="false" data-editor-type="" data-hide-desktop="false" data-hide-tab="false" data-hide-mobile="false" data-itemcollapsed="false" data-highlight-scroll="false"><div class="eb-toc-header"><h2 class="eb-toc-title">Table of Contents</h2></div><div class="eb-toc-wrapper " data-headers="[{&quot;level&quot;:3,&quot;content&quot;:&quot;Conceito, motiva\u00e7\u00e3o e panorama geral&quot;,&quot;text&quot;:&quot;Conceito, motiva\u00e7\u00e3o e panorama geral&quot;,&quot;link&quot;:&quot;eb-table-content-0&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;O que significa \u201cauto-sincroniza\u00e7\u00e3o\u201d na pr\u00e1tica&quot;,&quot;text&quot;:&quot;O que significa \u201cauto-sincroniza\u00e7\u00e3o\u201d na pr\u00e1tica&quot;,&quot;link&quot;:&quot;eb-table-content-1&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Vis\u00e3o geral dos protocolos que vamos estudar&quot;,&quot;text&quot;:&quot;Vis\u00e3o geral dos protocolos que vamos estudar&quot;,&quot;link&quot;:&quot;eb-table-content-2&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Boas e m\u00e1s decis\u00f5es logo no in\u00edcio&quot;,&quot;text&quot;:&quot;Boas e m\u00e1s decis\u00f5es logo no in\u00edcio&quot;,&quot;link&quot;:&quot;eb-table-content-3&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;SLIP (Serial Line Internet Protocol): simplicidade que cobra seu pre\u00e7o&quot;,&quot;text&quot;:&quot;SLIP (Serial Line Internet Protocol): simplicidade que cobra seu pre\u00e7o&quot;,&quot;link&quot;:&quot;eb-table-content-4&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Como o SLIP funciona (byte a byte)&quot;,&quot;text&quot;:&quot;Como o SLIP funciona (byte a byte)&quot;,&quot;link&quot;:&quot;como-o-slip-funciona-byte-a-byte&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Exemplo conceitual de framing SLIP&quot;,&quot;text&quot;:&quot;Exemplo conceitual de framing SLIP&quot;,&quot;link&quot;:&quot;exemplo-conceitual-de-framing-slip&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Implementa\u00e7\u00e3o did\u00e1tica \u2014 Encoder SLIP em C&quot;,&quot;text&quot;:&quot;Implementa\u00e7\u00e3o did\u00e1tica \u2014 Encoder SLIP em C&quot;,&quot;link&quot;:&quot;eb-table-content-7&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Decoder SLIP (lado cr\u00edtico)&quot;,&quot;text&quot;:&quot;Decoder SLIP (lado cr\u00edtico)&quot;,&quot;link&quot;:&quot;eb-table-content-8&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Onde o SLIP \u00e9 uma boa escolha&quot;,&quot;text&quot;:&quot;Onde o SLIP \u00e9 uma boa escolha&quot;,&quot;link&quot;:&quot;eb-table-content-9&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Onde o SLIP \u00e9 uma m\u00e1 escolha (e por qu\u00ea)&quot;,&quot;text&quot;:&quot;Onde o SLIP \u00e9 uma m\u00e1 escolha (e por qu\u00ea)&quot;,&quot;link&quot;:&quot;eb-table-content-10&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;text&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;link&quot;:&quot;eb-table-content-11&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;COBS (Consistent Overhead Byte Stuffing): framing determin\u00edstico e recupera\u00e7\u00e3o real&quot;,&quot;text&quot;:&quot;COBS (Consistent Overhead Byte Stuffing): framing determin\u00edstico e recupera\u00e7\u00e3o real&quot;,&quot;link&quot;:&quot;eb-table-content-12&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Ideia central do COBS&quot;,&quot;text&quot;:&quot;Ideia central do COBS&quot;,&quot;link&quot;:&quot;ideia-central-do-cobs&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Exemplo conceitual&quot;,&quot;text&quot;:&quot;Exemplo conceitual&quot;,&quot;link&quot;:&quot;exemplo-conceitual&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Encoder COBS \u2014 implementa\u00e7\u00e3o did\u00e1tica em C&quot;,&quot;text&quot;:&quot;Encoder COBS \u2014 implementa\u00e7\u00e3o did\u00e1tica em C&quot;,&quot;link&quot;:&quot;eb-table-content-15&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Decoder COBS \u2014 recupera\u00e7\u00e3o previs\u00edvel&quot;,&quot;text&quot;:&quot;Decoder COBS \u2014 recupera\u00e7\u00e3o previs\u00edvel&quot;,&quot;link&quot;:&quot;eb-table-content-16&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Por que COBS \u00e9 realmente auto-sincroniz\u00e1vel&quot;,&quot;text&quot;:&quot;Por que COBS \u00e9 realmente auto-sincroniz\u00e1vel&quot;,&quot;link&quot;:&quot;eb-table-content-17&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Boas e m\u00e1s escolhas com COBS&quot;,&quot;text&quot;:&quot;Boas e m\u00e1s escolhas com COBS&quot;,&quot;link&quot;:&quot;eb-table-content-18&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Compara\u00e7\u00e3o direta: SLIP \u00d7 COBS&quot;,&quot;text&quot;:&quot;Compara\u00e7\u00e3o direta: SLIP \u00d7 COBS&quot;,&quot;link&quot;:&quot;eb-table-content-19&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;text&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;link&quot;:&quot;eb-table-content-20&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;CBOR (Concise Binary Object Representation): sem\u00e2ntica bin\u00e1ria n\u00e3o \u00e9 framing&quot;,&quot;text&quot;:&quot;CBOR (Concise Binary Object Representation): sem\u00e2ntica bin\u00e1ria n\u00e3o \u00e9 framing&quot;,&quot;link&quot;:&quot;eb-table-content-21&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;O que o CBOR realmente define&quot;,&quot;text&quot;:&quot;O que o CBOR realmente define&quot;,&quot;link&quot;:&quot;o-que-o-cbor-realmente-define&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Exemplo conceitual: CBOR vs JSON&quot;,&quot;text&quot;:&quot;Exemplo conceitual: CBOR vs JSON&quot;,&quot;link&quot;:&quot;exemplo-conceitual-cbor-vs-json&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Erro cl\u00e1ssico: \u201cvou ler CBOR direto da UART\u201d&quot;,&quot;text&quot;:&quot;Erro cl\u00e1ssico: \u201cvou ler CBOR direto da UART\u201d&quot;,&quot;link&quot;:&quot;eb-table-content-24&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Uso correto: CBOR como payload, COBS como transporte&quot;,&quot;text&quot;:&quot;Uso correto: CBOR como payload, COBS como transporte&quot;,&quot;link&quot;:&quot;uso-correto-cbor-como-payload-cobs-como-transporte&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Exemplo did\u00e1tico \u2014 gerando CBOR (C)&quot;,&quot;text&quot;:&quot;Exemplo did\u00e1tico \u2014 gerando CBOR (C)&quot;,&quot;link&quot;:&quot;eb-table-content-26&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Encapsulando CBOR com COBS&quot;,&quot;text&quot;:&quot;Encapsulando CBOR com COBS&quot;,&quot;link&quot;:&quot;encapsulando-cbor-com-cobs&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Boas e m\u00e1s escolhas com CBOR&quot;,&quot;text&quot;:&quot;Boas e m\u00e1s escolhas com CBOR&quot;,&quot;link&quot;:&quot;eb-table-content-28&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Compara\u00e7\u00e3o direta: COBS \u00d7 CBOR&quot;,&quot;text&quot;:&quot;Compara\u00e7\u00e3o direta: COBS \u00d7 CBOR&quot;,&quot;link&quot;:&quot;eb-table-content-29&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;text&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;link&quot;:&quot;eb-table-content-30&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;Compara\u00e7\u00e3o geral, decis\u00f5es de projeto e checklist de boas pr\u00e1ticas&quot;,&quot;text&quot;:&quot;Compara\u00e7\u00e3o geral, decis\u00f5es de projeto e checklist de boas pr\u00e1ticas&quot;,&quot;link&quot;:&quot;eb-table-content-31&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Compara\u00e7\u00e3o t\u00e9cnica consolidada&quot;,&quot;text&quot;:&quot;Compara\u00e7\u00e3o t\u00e9cnica consolidada&quot;,&quot;link&quot;:&quot;eb-table-content-32&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Arquiteturas t\u00edpicas (boas escolhas)&quot;,&quot;text&quot;:&quot;Arquiteturas t\u00edpicas (boas escolhas)&quot;,&quot;link&quot;:&quot;eb-table-content-33&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;M\u00e1s decis\u00f5es cl\u00e1ssicas (e por que falham)&quot;,&quot;text&quot;:&quot;M\u00e1s decis\u00f5es cl\u00e1ssicas (e por que falham)&quot;,&quot;link&quot;:&quot;eb-table-content-34&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Checklist de boas pr\u00e1ticas (engenharia de firmware)&quot;,&quot;text&quot;:&quot;Checklist de boas pr\u00e1ticas (engenharia de firmware)&quot;,&quot;link&quot;:&quot;eb-table-content-35&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Regra pr\u00e1tica para n\u00e3o errar&quot;,&quot;text&quot;:&quot;Regra pr\u00e1tica para n\u00e3o errar&quot;,&quot;link&quot;:&quot;eb-table-content-36&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Conclus\u00e3o do artigo&quot;,&quot;text&quot;:&quot;Conclus\u00e3o do artigo&quot;,&quot;link&quot;:&quot;eb-table-content-37&quot;}]" data-visible="[true,true,true,true,true,true]" data-delete-headers="[{&quot;label&quot;:&quot;Conceito, motiva\u00e7\u00e3o e panorama geral&quot;,&quot;value&quot;:&quot;conceito-motiva\u00e7\u00e3o-e-panorama-geral&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;O que significa \u201cauto-sincroniza\u00e7\u00e3o\u201d na pr\u00e1tica&quot;,&quot;value&quot;:&quot;o-que-significa-auto-sincroniza\u00e7\u00e3o-na-pr\u00e1tica&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Vis\u00e3o geral dos protocolos que vamos estudar&quot;,&quot;value&quot;:&quot;vis\u00e3o-geral-dos-protocolos-que-vamos-estudar&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Boas e m\u00e1s decis\u00f5es logo no in\u00edcio&quot;,&quot;value&quot;:&quot;boas-e-m\u00e1s-decis\u00f5es-logo-no-in\u00edcio&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;SLIP (Serial Line Internet Protocol): simplicidade que cobra seu pre\u00e7o&quot;,&quot;value&quot;:&quot;slip-serial-line-internet-protocol-simplicidade-que-cobra-seu-pre\u00e7o&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Como o SLIP funciona (byte a byte)&quot;,&quot;value&quot;:&quot;como-o-slip-funciona-byte-a-byte&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Exemplo conceitual de framing SLIP&quot;,&quot;value&quot;:&quot;exemplo-conceitual-de-framing-slip&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Implementa\u00e7\u00e3o did\u00e1tica \u2014 Encoder SLIP em C&quot;,&quot;value&quot;:&quot;implementa\u00e7\u00e3o-did\u00e1tica-encoder-slip-em-c&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Decoder SLIP (lado cr\u00edtico)&quot;,&quot;value&quot;:&quot;decoder-slip-lado-cr\u00edtico&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Onde o SLIP \u00e9 uma boa escolha&quot;,&quot;value&quot;:&quot;onde-o-slip-\u00e9-uma-boa-escolha&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Onde o SLIP \u00e9 uma m\u00e1 escolha (e por qu\u00ea)&quot;,&quot;value&quot;:&quot;onde-o-slip-\u00e9-uma-m\u00e1-escolha-e-por-qu\u00ea&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;value&quot;:&quot;conclus\u00e3o-parcial&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;COBS (Consistent Overhead Byte Stuffing): framing determin\u00edstico e recupera\u00e7\u00e3o real&quot;,&quot;value&quot;:&quot;cobs-consistent-overhead-byte-stuffing-framing-determin\u00edstico-e-recupera\u00e7\u00e3o-real&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Ideia central do COBS&quot;,&quot;value&quot;:&quot;ideia-central-do-cobs&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Exemplo conceitual&quot;,&quot;value&quot;:&quot;exemplo-conceitual&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Encoder COBS \u2014 implementa\u00e7\u00e3o did\u00e1tica em C&quot;,&quot;value&quot;:&quot;encoder-cobs-implementa\u00e7\u00e3o-did\u00e1tica-em-c&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Decoder COBS \u2014 recupera\u00e7\u00e3o previs\u00edvel&quot;,&quot;value&quot;:&quot;decoder-cobs-recupera\u00e7\u00e3o-previs\u00edvel&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Por que COBS \u00e9 realmente auto-sincroniz\u00e1vel&quot;,&quot;value&quot;:&quot;por-que-cobs-\u00e9-realmente-auto-sincroniz\u00e1vel&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Boas e m\u00e1s escolhas com COBS&quot;,&quot;value&quot;:&quot;boas-e-m\u00e1s-escolhas-com-cobs&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Compara\u00e7\u00e3o direta: SLIP \u00d7 COBS&quot;,&quot;value&quot;:&quot;compara\u00e7\u00e3o-direta-slip-\u00d7-cobs&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;value&quot;:&quot;conclus\u00e3o-parcial&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;CBOR (Concise Binary Object Representation): sem\u00e2ntica bin\u00e1ria n\u00e3o \u00e9 framing&quot;,&quot;value&quot;:&quot;cbor-concise-binary-object-representation-sem\u00e2ntica-bin\u00e1ria-n\u00e3o-\u00e9-framing&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;O que o CBOR realmente define&quot;,&quot;value&quot;:&quot;o-que-o-cbor-realmente-define&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Exemplo conceitual: CBOR vs JSON&quot;,&quot;value&quot;:&quot;exemplo-conceitual-cbor-vs-json&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Erro cl\u00e1ssico: \u201cvou ler CBOR direto da UART\u201d&quot;,&quot;value&quot;:&quot;erro-cl\u00e1ssico-vou-ler-cbor-direto-da-uart&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Uso correto: CBOR como payload, COBS como transporte&quot;,&quot;value&quot;:&quot;uso-correto-cbor-como-payload-cobs-como-transporte&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Exemplo did\u00e1tico \u2014 gerando CBOR (C)&quot;,&quot;value&quot;:&quot;exemplo-did\u00e1tico-gerando-cbor-c&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Encapsulando CBOR com COBS&quot;,&quot;value&quot;:&quot;encapsulando-cbor-com-cobs&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Boas e m\u00e1s escolhas com CBOR&quot;,&quot;value&quot;:&quot;boas-e-m\u00e1s-escolhas-com-cbor&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Compara\u00e7\u00e3o direta: COBS \u00d7 CBOR&quot;,&quot;value&quot;:&quot;compara\u00e7\u00e3o-direta-cobs-\u00d7-cbor&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Conclus\u00e3o parcial&quot;,&quot;value&quot;:&quot;conclus\u00e3o-parcial&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Compara\u00e7\u00e3o geral, decis\u00f5es de projeto e checklist de boas pr\u00e1ticas&quot;,&quot;value&quot;:&quot;compara\u00e7\u00e3o-geral-decis\u00f5es-de-projeto-e-checklist-de-boas-pr\u00e1ticas&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Compara\u00e7\u00e3o t\u00e9cnica consolidada&quot;,&quot;value&quot;:&quot;compara\u00e7\u00e3o-t\u00e9cnica-consolidada&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Arquiteturas t\u00edpicas (boas escolhas)&quot;,&quot;value&quot;:&quot;arquiteturas-t\u00edpicas-boas-escolhas&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;M\u00e1s decis\u00f5es cl\u00e1ssicas (e por que falham)&quot;,&quot;value&quot;:&quot;m\u00e1s-decis\u00f5es-cl\u00e1ssicas-e-por-que-falham&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Checklist de boas pr\u00e1ticas (engenharia de firmware)&quot;,&quot;value&quot;:&quot;checklist-de-boas-pr\u00e1ticas-engenharia-de-firmware&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Regra pr\u00e1tica para n\u00e3o errar&quot;,&quot;value&quot;:&quot;regra-pr\u00e1tica-para-n\u00e3o-errar&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Conclus\u00e3o do artigo&quot;,&quot;value&quot;:&quot;conclus\u00e3o-do-artigo&quot;,&quot;isDelete&quot;:false}]" data-smooth="true" data-top-offset=""><div class="eb-toc__list-wrap"><ul class="eb-toc__list"><li><a href="#eb-table-content-0">Conceito, motivação e panorama geral</a><li><a href="#eb-table-content-1">O que significa “auto-sincronização” na prática</a><li><a href="#eb-table-content-2">Visão geral dos protocolos que vamos estudar</a><li><a href="#eb-table-content-3">Boas e más decisões logo no início</a><li><a href="#eb-table-content-4">SLIP (Serial Line Internet Protocol): simplicidade que cobra seu preço</a><ul class="eb-toc__list"><li><a href="#como-o-slip-funciona-byte-a-byte">Como o SLIP funciona (byte a byte)</a><li><a href="#exemplo-conceitual-de-framing-slip">Exemplo conceitual de framing SLIP</a><li><a href="#eb-table-content-7">Implementação didática — Encoder SLIP em C</a><li><a href="#eb-table-content-8">Decoder SLIP (lado crítico)</a><li><a href="#eb-table-content-9">Onde o SLIP é uma boa escolha</a><li><a href="#eb-table-content-10">Onde o SLIP é uma má escolha (e por quê)</a><li><a href="#eb-table-content-11">Conclusão parcial</a></li></ul><li><a href="#eb-table-content-12">COBS (Consistent Overhead Byte Stuffing): framing determinístico e recuperação real</a><ul class="eb-toc__list"><li><a href="#ideia-central-do-cobs">Ideia central do COBS</a><li><a href="#exemplo-conceitual">Exemplo conceitual</a><li><a href="#eb-table-content-15">Encoder COBS — implementação didática em C</a><li><a href="#eb-table-content-16">Decoder COBS — recuperação previsível</a><li><a href="#eb-table-content-17">Por que COBS é realmente auto-sincronizável</a><li><a href="#eb-table-content-18">Boas e más escolhas com COBS</a><li><a href="#eb-table-content-19">Comparação direta: SLIP × COBS</a><li><a href="#eb-table-content-20">Conclusão parcial</a></li></ul><li><a href="#eb-table-content-21">CBOR (Concise Binary Object Representation): semântica binária não é framing</a><ul class="eb-toc__list"><li><a href="#o-que-o-cbor-realmente-define">O que o CBOR realmente define</a><li><a href="#exemplo-conceitual-cbor-vs-json">Exemplo conceitual: CBOR vs JSON</a><li><a href="#eb-table-content-24">Erro clássico: “vou ler CBOR direto da UART”</a><li><a href="#uso-correto-cbor-como-payload-cobs-como-transporte">Uso correto: CBOR como payload, COBS como transporte</a><li><a href="#eb-table-content-26">Exemplo didático — gerando CBOR (C)</a><li><a href="#encapsulando-cbor-com-cobs">Encapsulando CBOR com COBS</a><li><a href="#eb-table-content-28">Boas e más escolhas com CBOR</a><li><a href="#eb-table-content-29">Comparação direta: COBS × CBOR</a><li><a href="#eb-table-content-30">Conclusão parcial</a></li></ul><li><a href="#eb-table-content-31">Comparação geral, decisões de projeto e checklist de boas práticas</a><ul class="eb-toc__list"><li><a href="#eb-table-content-32">Comparação técnica consolidada</a><li><a href="#eb-table-content-33">Arquiteturas típicas (boas escolhas)</a><li><a href="#eb-table-content-34">Más decisões clássicas (e por que falham)</a><li><a href="#eb-table-content-35">Checklist de boas práticas (engenharia de firmware)</a><li><a href="#eb-table-content-36">Regra prática para não errar</a><li><a href="#eb-table-content-37">Conclusão do artigo</a></li></ul></ul></div></div></div></div></div>


<h3 class="wp-block-heading"><strong>Conceito, motivação e panorama geral</strong></h3>



<p class="wp-block-paragraph">Em sistemas embarcados reais, <strong>dados seriais não chegam “limpos”</strong>. Há ruído elétrico, bytes perdidos, reinicializações assíncronas, buffers cheios e tarefas concorrentes. Protocolos <strong>auto-sincronizáveis</strong> surgem exatamente para resolver esse cenário: eles permitem <strong>recuperar o alinhamento do fluxo</strong> mesmo quando o receptor começa a ler no meio de um pacote, sem depender de resets globais ou estados externos.</p>



<p class="wp-block-paragraph">Um protocolo é auto-sincronizável quando o receptor consegue, <strong>observando apenas o fluxo de bytes</strong>, reencontrar limites válidos de mensagem após erros. Isso contrasta com abordagens frágeis como “leia N bytes e confie”, que falham assim que um único byte se perde. Em UART, SPI em modo streaming, CDC-ACM, ou qualquer link byte-oriented, essa propriedade <strong>define se o sistema se recupera sozinho ou trava silenciosamente</strong>.</p>



<p class="wp-block-paragraph">Nesta série, vamos analisar três abordagens amplamente usadas — <strong>SLIP</strong>, <strong>COBS</strong> e <strong>CBOR</strong> — não como “formatos bonitos”, mas como <strong>decisões de engenharia</strong>. Vamos discutir <strong>o que cada uma garante</strong>, <strong>o que não garante</strong>, <strong>onde usar</strong>, <strong>onde evitar</strong>, e <strong>como implementar corretamente</strong> em firmware de produção.</p>



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



<h3 class="wp-block-heading">O que significa “auto-sincronização” na prática</h3>



<p class="wp-block-paragraph">Do ponto de vista do firmware, auto-sincronização implica três capacidades essenciais:</p>



<ol class="wp-block-list">
<li><strong>Delimitação inequívoca</strong><br>O receptor precisa identificar onde uma mensagem começa e termina, mesmo após bytes inválidos.</li>



<li><strong>Recuperação após erro</strong><br>Um erro local (byte perdido, extra, corrompido) <strong>não pode invalidar todo o fluxo</strong>.</li>



<li><strong>Parsing incremental (streaming)</strong><br>O protocolo deve permitir processamento byte-a-byte, sem exigir buffers gigantes ou leituras bloqueantes.</li>
</ol>



<p class="wp-block-paragraph">SLIP, COBS e CBOR resolvem esses pontos de formas <strong>fundamentalmente diferentes</strong>, e entender essas diferenças é o que separa firmware de laboratório de firmware industrial.</p>



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



<h3 class="wp-block-heading">Visão geral dos protocolos que vamos estudar</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Protocolo</th><th>Natureza</th><th>Resolve framing</th><th>Auto-sincroniza</th><th>Detecta erro</th><th>Uso típico</th></tr></thead><tbody><tr><td><strong>SLIP</strong></td><td>Delimitador + escape</td><td>Parcial</td><td>Fraca</td><td>Não</td><td>Debug simples, legado</td></tr><tr><td><strong>COBS</strong></td><td>Codificação de comprimento</td><td>Forte</td><td>Forte</td><td>Não</td><td>UART robusta, SPI streaming</td></tr><tr><td><strong>CBOR</strong></td><td>Serialização binária estruturada</td><td>Não (sozinho)</td><td>Parcial</td><td>Opcional</td><td>RPC, IoT, payload semântico</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Um erro comum é tratar <strong>CBOR como protocolo de transporte</strong> — ele <strong>não é</strong>. CBOR define <strong>como os dados são codificados</strong>, não <strong>como são enquadrados</strong> no fluxo. Por isso, em sistemas bem projetados, CBOR quase sempre aparece <strong>sobre</strong> COBS ou outro método de framing.</p>



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



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Boas e más decisões logo no início</h3>



<p class="wp-block-paragraph"><strong>Boas escolhas</strong></p>



<ul class="wp-block-list">
<li>Pensar em framing <strong>antes</strong> de escrever o parser</li>



<li>Separar claramente: <em>transporte</em> × <em>serialização</em></li>



<li>Assumir que bytes <strong>serão perdidos</strong> em algum momento</li>
</ul>



<p class="wp-block-paragraph"><strong>Más escolhas</strong></p>



<ul class="wp-block-list">
<li>Usar <code>scanf()</code> ou parsing por strings</li>



<li>Depender de timeouts para “adivinhar” fim de pacote</li>



<li>Achar que CRC substitui framing (não substitui)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/><p>The post <a href="https://mcu.tec.br/protoclos/uart-serial/protocolos-auto-sincronizaveis-em-sistemas-embarcados/">Protocolos auto-sincronizáveis em sistemas embarcados</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1108</post-id>	</item>
	</channel>
</rss>
