ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Четверг
30 июня
1152138
Argon (06.12.2021 21:33, просмотров: 12013)
Кто-нить подскажите дельную мысль... Надо организовать логический уровень протокола обмена между двумя девайсами по UART. Да, это почти студенческий вопрос, но в последнее время не хочется изобретать велосипеды. Нет ли чего-то стандартизованно-формализованного? 

Вкратце как-то так:

1. Обычно один девайс бывает мастером, т.е. отправляет запросы второму. Но могут быть экстренные ситуации, когда второй без запроса отправляет данные.

2. Нужен детект обрыва связи, т.е. один пингует другого. Видимо, без разницы кто кого, ибо пингуемый пусть отвечает.

3. Пакеты данных могут быть произвольной длины, возможно, с разбиением на подпакеты. Ну, скажем, общий объем посылки от 20 байт до 100Кб.
4. Возможно, нужно будет предусмотреть запрос повтора неверно принятых данных (или их части/подпакета). А может, это я излишне усложняю. Оба девайса связаны по TTL UART и проблем вроде быть не должно, но см. следующий пункт.

5. Один из девайсов изредка подвержен лагам, что теоретически может привести к задержкам в середине передачи пакета ну и соответственно разрыву приема пакета принимающей стороной.


Изначально надеялся использовать полнодуплексную связь, но в системе мастер-слейв, видимо, это не очень годится. А если годится, то пока не могу сообразить как.

В общем, может, есть какое-то стандартное решение?

Да, еще: хотелось бы передавать данные в бинарном виде, без всяких преобразований в ASCII и т.п. А если с преобразованиями - лучше/правильнее, хотелось бы знать почему.

Ответы