Может ли Arduino взаимодействовать с USB-устройствами без USB-хост-экрана?

usb

Ищу возможность подключения к Arduino Uno различных USB-устройств (в частности, геймпада и веб-камеры, но меня интересует общий случай). Возможно ли это без использования USB-хост-шилда, поскольку в Uno есть USB-порт и преобразователь USB-последовательный порт? Я мог бы использовать щит, но мне интересно, зачем он нужен.

На сайте Sparkfun указано следующее:

USB-хост-контроллер SparkFun содержит всю цифровую логику и аналоговые схемы, необходимые для реализации полноскоростного USB-периферийного/хост-контроллера с вашим Arduino.

Разве Arduino уже не содержит этого, просто нужно подходящее программное обеспечение (хотя, очевидно, проще использовать уже написанную библиотеку для Host Shield). Или есть аппаратные ограничения?

По данным Может ли USB-ключ Ethernet заменить экран Ethernet для Arduino? (ответ Маженко), теоретически это можно сделать с помощью Due, но не с Uno. В таком случае, происходит ли это потому, что Uno использует ATmega16U2 вместо FTDI FT232RL для связи через USB?

, 👍11

Обсуждение

Я не думаю, что это невозможно, USB - это своего рода последовательная шина с определенными протоколами, то есть маркировка устройств, разделяющая устройства на определенные временные диапазоны (некоторые похожие протоколы, например, один провод). Я думаю, что единственным ограничением является скорость, поэтому синхронизация всех команд и данных, специфичных для USB, вызывает проблемы., @General Chaos

@GeneralChaos Вы правы, это не «невозможно», но крайне непрактично. Существует программная реализация USB-устройства (VUSB), не требующая специального оборудования. В лучшем случае это сомнительно, а в лучшие времена почти не работает. Нет причин, по которым вы не могли бы написать эквивалент хоста - однако он никогда не мог работать на частоте выше 1,5 МГц USB 1.0 «Низкая скорость», поэтому никогда не мог общаться ни с чем, кроме простой клавиатуры или мыши. Такие вещи, как Ethernet или веб-камеры, совершенно невозможны без оборудования Host или OTG, которое Due встроено в основной чип., @Majenko


2 ответа


Лучший ответ:

18

Прежде всего, вам необходимо изучить основы работы USB.

В USB есть две основные «вещи»: хосты и устройства.

У вас есть один хост (обычно ваш компьютер) и множество устройств (таких как Arduino, принтеры, сканеры, веб-камеры, адаптеры Wi-Fi и т. д.).

Быть хостом означает знать, какие устройства вы собираетесь подключить к себе и как с ними взаимодействовать. Быть устройством — значит просто общаться с хостом по-своему.

Как видите, быть хостом гораздо сложнее, чем быть устройством.

Arduino — это устройства. Небольшие микросхемы интерфейса USB, которые они используют, имеют очень малое энергопотребление и могут быть только устройством, а не хостом.

Если вы хотите подключить устройство к чему-либо, оно должно быть хостом (примечание: здесь я намеренно игнорирую концентраторы).

В Arduino Due используется гораздо более мощный чип, способный выступать в роли хоста (используя так называемый режим On-The-Go).

Чтобы сделать это с чем-то менее мощным, чем Due, вам потребуется дополнительное оборудование, специально разработанное для использования в качестве USB-хоста, и именно здесь на помощь приходит USB-хост-щит. Он имеет чип, специально разработанный для использования в качестве USB-хоста. хост, чтобы вы могли подключить к нему устройство.

Ни один из чипов Uno не предназначен для работы в качестве хоста. У них просто нет сил.

,

4

Нет. USB строго различает роли хоста и устройства. Некоторые микросхемы имеют функциональные блоки, способные выполнять любую роль, но 8u2/16u2 не являются примером этого.

Типичные последовательные преобразователи USB, такие как FT232, CP210x, CH340, PL2303 и т. д., также являются строго устройствами и не могут быть хостами

Существуют недорогие микроконтроллеры с поддержкой хоста, такие как Kinetis KL25Z, но для их использования в самой дешевой форме вам потребуется другой программный подход (например, mbed, а не Arduino) и гораздо больше личных усилий. Teensy-LC похож на него, но вы платите больше за помощника по загрузке кода Arduino, чем за микроконтроллер, который запускает вашу программу.

,