Насколько надежен Arduino Uno Serial, через USB (ATmega16U2), требуется CRC?
У меня есть вопрос о надежности последовательной связи, в частности, нужно ли мне реализовывать CRC/контрольную сумму/ECC из-за ошибок передачи битов? Я
Однако я думаю, что общего ответа не существует, поскольку существуют различные способы реализации последовательной связи с чипом Arduino Uno Atmega328P.
- (a) Последовательная связь осуществляется между двумя чипами Atmega328P и использует довольно длинные провода
- (b) Последовательная связь осуществляется между двумя чипами Atmega328P с использованием довольно коротких проводов
- (c) Последовательная связь осуществляется между одним Atmega328P и ATmega16U2, который принимает и пересылает сигналы по протоколу USB (например, на ПК)
Мой вопрос касается ATmega16U2. Расстояние (длина провода/линии) на плате Arduino R3 составляет около 2 см/1" максимум, что, как я ожидаю, снизит вероятность искажения сигнала. Предполагая, что протокол USB, который далее используется для передачи сигнала, сам по себе обеспечивает ECC/CRC/контрольные суммы, я задаюсь вопросом, не будет ли излишним реализовывать CRC при приеме и отправке сообщений через последовательную связь в случае (c), хотя я, однако, ожидаю, что это будет более необходимо для (b) и почти наверняка необходимо для (c).
Кроме того, если это имеет значение для ответа на вопрос, мне было интересно, повлияет ли источник питания (т. е. если Arduino Uno питается от USB-порта напряжением ~4,5 В или, скорее, через внешний адаптер питания 12 В) на «повреждаемость» сигналов на последовательных линиях TX/RX?
1 ответ
Если вы используете соответствующую буферизацию сигнала 0/5 В по длинным проводам, случай A, обнаружение и исправление ошибок не требуется. RS232, RS485, ваши данные будут в порядке (могут передаваться на расстояние до тысяч футов).
Более короткие провода, от устройства Atmega к устройству Atmega, мне никогда не приходилось использовать, даже на скоростях 115200, случай B, случай C.
16U2 к ПК, это будет зависеть от качества кабеля USB. Дифференциальный сигнал +/-3 В (аналогичный уровням RS485) имеет довольно высокую скорость, около 4 Мбит/с, поэтому вам нужен хороший кабель с хорошим экранированием.
- Отправка последовательных данных в прерывании
- Последовательная связь ESP8266 с ATMega328P
- Ардуино как ISP с serial monitor для ATmega328
- ATmega328P-PU: программатор не отвечает
- Почему SoftwareSerial не работает как надо на Arduino Pro Mini 3v3?
- Почему последовательная связь не работает на atmega168/328p?
- 16-герцовая плата Uno R3 против платы Arduino Uno R3
- SoftwareSerial не будет читать всю напечатанную строку при вызове readString()