ArduinoはUSBホストシールドなしでUSBデバイスとインターフェースできますか?

さまざまなUSBデバイスをArduinoUno(具体的には、ゲームパッドとWebカメラ)に接続したいと思っていますが、一般的なケースに興味があります。 )。 UnoにはUSBポートとUSB-シリアルコンバーターがあるので、これはUSBホストシールドを使用せずに可能ですか?シールドを使用することはできますが、必要かどうか/なぜ必要か知りたいです。

SparkfunのWebサイトには、次のように記載されています。

SparkFun USBホストシールドには、ArduinoでフルスピードUSB周辺機器/ホストコントローラーを実装するために必要なすべてのデジタルロジックとアナログ回路が含まれています。

Arduinoにはまだこれが含まれておらず、適切なソフトウェアが必要です(ただし、ホストシールド用にすでに作成されたライブラリを使用する方が明らかに簡単です)。またはハードウェアの制限がありますか?

arduinoのイーサネットシールドの代わりにイーサネットUSBドングルを使用できますか?(Majenkoの回答)、理論的にはDueで実行できますが、Unoでは実行できません。 。その場合、これはUnoがUSB通信にFTDI FT232RLの代わりにATmega16U2を使用しているためですか?

コメント

  • 私は'不可能だとは思いませんが、USBは特定のプロトコル、つまり分割デバイスを特定の時間範囲にタグ付けするデバイス(1本のワイヤーのようないくつかの同様のプロトコル)を備えたある種のシリアルバスです。唯一の制限は速度だと思います。したがって、USB固有のすべてのコマンドとデータを同期すると、問題が発生します。
  • @GeneralChaos You 'そうです。 'は"不可能"ではありませんが、非常に実用的ではありません。 '特別なハードウェアを必要としないUSBデバイス(VUSB)のソフトウェア実装があります。 'はせいぜい気まぐれで、最高の時間にはほとんど機能しません。 '同等のホストを作成できなかった理由はありませんが、1.5MHz以上のUSB1.0では動作しません"低速"なので、単純なキーボードまたはマウス以外とは通信できませんでした。 Dueがメインチップに組み込んだホストまたはOTGハードウェアがなければ、イーサネットやWebカメラのようなものは完全に不可能です。

回答

まず最初に、USBの仕組みの基本を学ぶ必要があります。

USBには、ホストとデバイスという2つの主要な「もの」があります。

1つのホスト(通常はコンピューター)と多くのデバイス(Arduino、プリンター、スキャナー、Webカメラ、WiFiドングルなど)。

ホストになるには、接続するデバイスを知る必要があります。そしてそれらと通信する方法。デバイスであるということは、独自の方法でホストと通信することを意味します。

ご覧のとおり、デバイスであるよりもホストである方がはるかに複雑な仕事です。

Arduinoはデバイスです。 。彼らが使用する小さなUSBインターフェースチップは非常に低電力であり、デバイスのみであり、ホストではありません。

デバイスを何かに接続する場合は、ホストである必要があります(注:私は意図的にここではハブを無視します)。

Arduino Dueははるかに強力なチップを使用しており、ホストになることができます(On-The-Goモードと呼ばれるものを使用)。

Dueよりも強力でないものには、USBホスト用に特別に設計された追加のハードウェアが必要です。これがUSBホストシールドの出番です。デバイスを接続できるように、USBホスト用に特別に設計されたチップが搭載されています。

Unoのどのチップもホストとして設計されていません。

回答

いいえ。USBはホストとデバイスの役割を厳密に区別します。いくつかのチップどちらの役割も実行できる機能ブロックがありますが、8u2 / 16u2はこの例ではありません。

FT232、CP210x、CH340、PL2303などの一般的なUSBシリアルコンバータも厳密にデバイスであり、ホスト

Kinetis KL25Zのような安価なホスト対応MCUがありますが、それらを最も安価な形式で使用するには、別のソフトウェアアプローチ(たとえば、Arduinoではなくmbed)とより多くの個人的な努力が必要になります。 Teensy-LCは関連していますが、プログラム自体を実行するMCUよりもArduinoコードローディングヘルパーの方が高額です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です