Задать вопрос
@sidsukana

Возможна ли потеря данных по UART?

Опишу более подробно ситуацию.
Есть PC, который соединяется с Arduino Uno по USB(UART). Есть необходимость сделать общение между ними в виде пакетов (аналог общения по TCP).
Предположим есть структура пакета: заголовок из 2 байт (1 - размер данных, 1 - опкод), дальше данные размер которых в заголовке.
Подключение по серийнику с конфигурацией 9600 8N1 (8E1).
USB 1 метр)
Если не контролировать чтение пакета с помощью маркеров начала и конца, или с помощью хешсумм, может ли произойти потеря данных или искажение, что приведет к рассинхронизации чтения потока данных?
  • Вопрос задан
  • 1786 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@vilgeforce
Раздолбай и программист
Может произойти гораздо более другая ситуация: вы начнете обрабатывать пакет не с начала, а с середины и получите мусор вместо нормальных данных.
Ответ написан
@AlexanderKomarchouk
программист PHP, embedded atmega/stm32
Потеря данных при передаче по последовательным протоколам возможна. Если вам нужно преодолеть эту ситуацию, то обратите свое внимание на протокол Kermit.
В 90-х мы подключали ПК к UNIX серверу по RS-232, и с помощью одноименного пакета программ Kermit не только работали в терминале, но и передавали разные файлы (в том числе и бинарные) между системами объединенными линией из трех проводов.
Изучите исходники (узнаете для себя много полезного), упростите их до уровня применения в Arduino (либо возьмите за идею), и все у вас получится.
Ответ написан
Комментировать
@vanyamba-electronics
Данные передаются по USB-протоколу. В случае с виртуальным COM-портом протокол подразумевает повторную отправку пакета, если пакет принят с ошибкой.
Но они могут теряться на стороне Arduino, если обработчик принятых данных не будет успевать их обрабатывать за время между пакетами. Эту проблему легко решить, если компьютер после отправки пакета будет ожидать ответа от Arduino, что пакет был принят и обработан.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы