Какой чип USB-UART обеспечивает самую высокую скорость передачи данных с платами Arduino?
Проверяя интернет-магазины на предмет адаптера USB/TTL, я наткнулся на широкий ассортимент продукции, и мне сложно выбрать ту, которая достигла бы самой высокой скорости передачи данных. Я сравнивал технические характеристики чипов, которые я видел до сих пор, чтобы понять, какие скорости передачи данных поддерживаются:
- FT232R (FTDI): от 183 до 3 Мбод, включая 250k, 500k и 1M, 128 RX / 256 TX FIFO
- PL2303 (Prolific): от 75 до 1,2 Мбод, не включая 250k, 500k и 1M, 256 RX / 256 TX FIFO
- CP2102 (Silicon Labs): от 300 до 921600 бод, включая 250k и 500k, 576 RX / 640 TX FIFO
- CH340G (WCH): от 50 до 2M бод, не включая 250k, 500k и 1M, неизвестный размер FIFO
Как объяснялось здесь, 500k, 1M и 2M особенно важны, поскольку это самые высокие скорости передачи данных, поддерживаемые кристаллами 16 МГц. Более того, передача данных становится ограниченной ЦП выше 500k, поэтому реальные скорости передачи данных практически одинаковы для всех трех скоростей передачи данных.
Правильно ли я предполагаю, что для получения максимальной скорости передачи данных мне, по сути, придется держаться подальше от PL2303 и предпочесть адаптеры FT232R, а два других чипа будут посередине? Или есть другие факторы, которые я не учел, но которые могут повлиять на мой выбор?
1 ответ
Лучший ответ:
Вот мой опыт использования вышеуказанных чипов за последние два года:
FT232R — самый быстрый, хорошо работает с любой скоростью передачи данных. Адаптеры UART с ним иногда дороже альтернатив.
PL2303 хорош, если вы не планируете работать быстрее 115200. Кроме того, у него самый сильный опорный сигнал 3,3 В (доступный на некоторых адаптерах как выход 3,3 В), который можно использовать как источник питания 3,3 В 20 мА. Другие чипы откажутся работать, если вы будете потреблять больше 5 мА от опорного сигнала 3,3 В.
В настоящее время Prolific борется с клонами, делая свои обновленные драйверы несовместимыми с неоригинальными чипами, поэтому, если ваш адаптер не работает в Windows с кодом 10, взгляните на эту страницу.
CP2102, который выглядит отлично в теории, у меня не заработал (в Windows 10 с драйвером v10.1.3). Массовая передача данных на скорости 115200 в некоторых случаях была в 4 раза медленнее по сравнению с другими чипами.
CH340G имеет схематичный драйвер для Windows, но в остальном работает довольно хорошо и часто является самым дешевым вариантом из доступных. К сожалению, ему не хватает промежуточных скоростей передачи данных, и иногда бывает сложно заставить работать UART-соединение на скорости 2 Мбит/с. Клоны Arduino, на которых установлен этот чип, работают на скорости 2 Мбит/с без проблем (по крайней мере, те, которые я видел).
- Arduino Mega Loopback Test с несколькими портами TX/RX
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Использование последовательных контактов TX/ RX для связи по USB
- Ардуино не может подключиться к порту (arduino nano rp2040)
- Нужен пример того, как отправлять КОМАНДЫ AT на модуль SIm7000E GPS+LTE из ESP32 и читать эти ответы в последовательном мониторе
- Невозможно загрузить скетч в Lolin S3 Pro (ESP32-S3)
- Серийный номер аппаратного/программного обеспечения для HC-05
- Последовательные контакты Arduino Hardware с RS485
Если вам действительно нужна высокая скорость передачи данных, то вам следует использовать Arduino, которая изначально поддерживает USB, чтобы можно было полностью обойти мост., @Ignacio Vazquez-Abrams
@IgnacioVazquez-Abrams, например, 32u4 поддерживает USB, @Dat Ha
@IgnacioVazquez-Abrams Очевидно, вопрос не имеет смысла для плат с собственной поддержкой USB. Если бы я использовал Atmega32u4, зачем бы мне покупать адаптер UART?, @Dmitry Grigoryev
При более высоких скоростях передачи данных качество соединения между мостом UART и основным MCU становится фактором. У меня была надежная связь между FT232 и PIC32 на скорости 3 Мбод с обоими чипами на одной плате и правильно проложенными трассами. С отдельными платами мне трудно добиться надежной связи на скорости 2 Мбод, а 1 Мбод — это предел., @Majenko
Для высокой пропускной способности UART на самом деле не лучшая технология. Как упоминалось ранее, вам действительно нужно использовать прямой USB, если это вообще возможно. Все дело в выборе правильного чипа для построения вашего проекта, а не просто в выборе "стандартного" варианта., @Majenko
@Majenko *С отдельными платами мне сложно добиться надежной связи на скорости 2 Мбод* - это очень важный момент, по моему мнению, это означает, что CP2102 может быть быстрее, чем CH340G в этом случае. Что касается вашего второго комментария, я согласен, что UART не лучший вариант для высокой пропускной способности, но когда у вас есть выбор между увеличением скорости передачи данных и переносом проекта на плату с собственной поддержкой USB, хороший чип UART может сэкономить вам много времени., @Dmitry Grigoryev
Я полагаю, что еще один параметр, который следует учитывать, — это количество внутренних буферов в этих устройствах. Чтобы достичь более высокой пропускной способности, вам придется оптимизировать код Arduino HardwareSerial (для более высокой скорости передачи данных) и найти более быстрые методы преобразования (например, dtoa). Вот некоторые из трюков, которые я проделал в Cosa, чтобы достичь >90% эффективной пропускной способности для 2 Мбит. Более подробную информацию см. на форуме https://forum.arduino.cc/index.php?topic=150299.555, @Mikael Patel
@MikaelPatel Я добавил размеры FIFO в свой вопрос. Они сильно влияют на пропускную способность на практике?, @Dmitry Grigoryev
@DmitryGrigoryev Спасибо за добавление размера FIFO. На самом деле важно понимать, как текут данные. Сигнализация/протокол USB не является каждым символом и имеет свою собственную «скорость передачи». Буферизация позволяет пакетировать пакеты и сокращать накладные расходы на сигнализацию (в восходящем направлении), а также помогает выровнять скорость передачи (в нисходящем направлении)., @Mikael Patel