Мне было интересно, как создать безопасный протокол связи UART / USB. Мне это нужно для связи между микроконтроллером и ПК. У меня есть ~ 10 команд и я решил использовать 10 отдельных команд подтверждения для каждой из них.
Обмен должен идти так:
- ПК посылает команду пробуждения через UART
- µC распознает, что ПК подключен, и отправляет свою команду на ПК, например.
0x01
- ПК делает то, что ему было предложено (некоторые аппаратные средства), и отвечает,
~0x01
когда это делается (я опускаю число, чтобы создать большее «расстояние» между двумя числами) - µC знает, что оно отправлено
0x01
и ожидает~0x01
от ПК. Если что-то не~0x01
возвращается, микроконтроллер узнает, что что-то пошло не так, и отправит новый запрос или сообщение об ошибке.
Случай, когда микроконтроллер отправляет 0x01
, ПК понимает 0x02
и отправляет ~0x02
обратно, но микроконтроллер считывает ~0x01
из-за некоторого шума, это было бы довольно плохо.
Насколько это безопасно с точки зрения передачи или как я могу сделать это более безопасным?
microcontroller
c
embedded
uart
JavaForStarters
источник
источник
Ответы:
Я думаю, что вы должны определить более длинные команды, включая, возможно, контрольную сумму или CRC и ждать ACK / NACK или условия ошибки.
Вы можете взять примеры из простых протоколов, таких как TFTP ( RFC 1350 )
источник
Для безопасного общения вы должны рассмотреть все возможные потоки в вашей линии связи. Поэтому вам необходимо определить, доступна ли система извне (сторонние системы, например, беспроводные)
В целом вы должны думать о следующих темах:
Стандартные меры против нитей:
источник