Управляющие символы Ascii SOH, DLE, STX, ETX: Как экранировать двоичные данные через UART?

Я хочу простой и легкий способ для двух основных 8-битных MCU общаться друг с другом через 8-битное соединение UART, посылая как символы ASCII в виде 8-битных значений, так и двоичные данные в виде 8-битных значений.

Я бы предпочел не заново изобретать колесо, поэтому мне интересно, будет ли работать некоторая реализация ASCII, используя стандартные символы управления ASCII.

Проблема: либо я не правильно понимаю, либо не способен делать то, что хочу.

На странице Википедии об управляющих символах написано, что пакет может быть отправлен следующим образом:

  1. - выход канала данных и начало заголовка
  2. Данные курса
  3. - экранирование канала данных и начало текста
  4. <полезная нагрузка>
  5. - экранирование канала данных и конец текста

Но что, если полезной нагрузкой являются двоичные данные, содержащие два последовательных байта, эквивалентных DLE и ETX? как избежать этих байтов?

Линия связи может быть разорвана и восстановлена, поэтому принимающий MCU должен иметь возможность начать прием среднего пакета и иметь простой способ сообщить, когда начался следующий пакет, поэтому он может игнорировать данные до конца этого частичного пакета.,

Проверка ошибок будет происходить на более высоком уровне, чтобы убедиться, что полученный пакет действителен - если только стандарты ASCII не могут решить эту проблему тоже

2 ответа

Я понимаю, что это старый вопрос, но я подумал, что должен предложить последовательный интернет-протокол (SLIP), который определен в RFC 1055. Это очень простой протокол.

Поскольку вы собираетесь передавать двоичные данные вместе с текстовыми сообщениями, вам действительно нужно убедиться, что получатель не перепутает управляющие байты с содержимым полезной нагрузки. Один из способов сделать это - закодировать данные полезной нагрузки так, чтобы на выходе не появлялся ни один из специальных символов. Если накладные расходы не являются проблемой, тогда будет достаточно простейшей кодировки, такой как Base16. В противном случае вы можете захотеть взглянуть на кодировки без побега, которые были специально разработаны для удаления определенных символов из закодированных данных.

Другие вопросы по тегам