Como a comunicação serial assíncrona está amplamente difundida entre os dispositivos eletrônicos até hoje em dia, acredito que muitos de nós já encontramos essa pergunta periodicamente. Considere um dispositivo eletrônico De um computador PCconectado à linha serial (RS-232 ou similar) e necessário para trocar informações continuamente . Ou seja, PCestá enviando um quadro de comando cada X mse Destá respondendo com quadro de relatório / telemetria de status cada Y ms(o relatório pode ser enviado como resposta a solicitações ou de forma independente - não importa realmente aqui). Os quadros de comunicação podem conter quaisquer dados binários arbitrários . Supondo que os quadros de comunicação sejam pacotes de comprimento fixo.
O problema:
Como o protocolo é contínuo, o lado receptor pode perder a sincronização ou simplesmente "ingressar" no meio de um quadro enviado em andamento; portanto, não saberá onde está o início do quadro (SOF). Se os dados tiverem um significado diferente, com base em sua posição em relação ao SOF, os dados recebidos serão corrompidos, potencialmente para sempre.
A solução necessária
Esquema confiável de delimitação / sincronização para detectar o SOF com pouco tempo de recuperação (isto é, não deve demorar mais do que, digamos, 1 quadro para ressincronizar).
As técnicas existentes que conheço (e utilizo algumas) de:
1) Cabeçalho / soma de verificação - SOF como valor predefinido de bytes. Soma de verificação no final do quadro.
- Prós: Simples.
- Contras: Não confiável. Tempo de recuperação desconhecido.
2) Byte stuffing:
- Prós: recuperação rápida e confiável, pode ser usada com qualquer hardware
- Contras: Não é adequado para comunicação baseada em quadro de tamanho fixo
3) marcação do 9º bit - adicione cada byte com um bit adicional, enquanto SOF marcado com 1e bytes de dados são marcados com 0:
- Prós: Recuperação confiável e rápida
- Contras: Requer suporte de hardware. Não é suportado diretamente pela maioria do
PChardware e software.
4) Marcação do 8º bit - tipo de emulação dos itens acima, enquanto utiliza o 8º bit em vez do 9º, deixando apenas 7 bits para cada palavra de dados.
- Prós: recuperação rápida e confiável, pode ser usada com qualquer hardware.
- Contras: Requer um esquema de codificação / decodificação de / para a representação convencional de 8 bits para / da representação de 7 bits. Um pouco desperdício.
5) Baseado em tempo limite - assuma o SOF como o primeiro byte vindo após algum tempo ocioso definido.
- Prós: Sem sobrecarga de dados, simples.
- Contras: Não é tão confiável. Não funcionará bem com sistemas de tempo ruim como, por exemplo, Windows PC. Sobrecarga potencial de sobrecarga.
Pergunta: Quais são as outras possíveis técnicas / soluções para resolver o problema? Você pode apontar para os contras na lista acima, que podem ser facilmente contornados, removendo-os? Como você (ou você) projetou seu protocolo de sistemas?