4

Android デバイスから Arduino ボードへのアップロードを有効にするためのスケッチに取り組んでおり、rxtx (純粋な Java)を使用して PC/Arduino をテストするときに、 Duemilanove ( FTDIベース) およびArduino Uno ( ATmegaベース) で動作します。

ただし、setDTR/setRTS メソッドがまだ実装されていないため、USB-Android ライブラリを使用する場合は機能しません。

FTDI Android ドライバーは、setDTR/setRTS シグナルの送信を許可しますが、その後のデータの送信/読み取りに失敗します。

したがって、問題は Android USB API にあり、何が問題なのかわかりません..

DTR/RTS が切り替えられた後、FTDI ベースの Arduino ボードはどうなりますか?

デバイスがリセットされ、ブートローダー コマンド ( STK500 ) を 50 ~ 250 ミリ秒待機していると思います。私は正しいですか?

4

2 に答える 2

9

あなたは正しいです。その理由は、ブートローダーと呼ばれるものです。

最も必要最小限の状態では、Arduinos が構築されているマイクロコントローラー (以降、uC) は、SPI プロトコルの特定の実装であるインシステム プログラミング (ISP) メソッドを介してプログラムできます。これについて知っておく必要がある唯一のことは、これがシリアルまたは USB ではないということです。

AVR チップ (および Arduino ボード) をシリアル/USB 経由でプログラム可能にするために、ブートローダーと呼ばれるプログラムを (ISP 経由で) チップにロードします。ブートローダは、シリアル リンクを介してプログラム データを読み取り、フラッシュに書き込みます。ロードするプログラムがない場合、ブートローダーはロードされたプログラムに制御を与えます。したがって、ブートローダは、電源を入れるかリセットした後にのみアクティブにすることができます。その後、ロードしたプログラムを実行し、再びアクティブになることはありません。

ほとんどのブートローダは、リセット後にのみプログラミング データを探すように設定されています。その理由は、シリアル データの待機にはタイムアウトが伴うためです。アップロードされているプログラムがあり、送信されている場合はプログラムをロードします。Arduino がオンになるたびにブートローダがプログラミング データを探していた場合、Arduino は遅延してのみアクティブ化され、これは望ましくないと見なされていました。したがって、ブートローダーはリセット後にのみアクティブになります。

ユーザーが Arduino をプログラムする前に毎回リセット ピンを押す必要があり、さらに、リセット直後にシリアル データの送信を開始する (またはタイムアウト ウィンドウを見逃す可能性がある) ことをユーザーに強制するのは煩わしい場合があります。 Arduino の賢い人たちは、DTS 信号を使用してリセットをトリガーし、その後データを送信するというトリックを思い付きました。したがって、Arduino (古いものでない場合) は、DTS 信号の受信時にリセットするように設定されています。

于 2013-03-19T16:59:42.477 に答える
0

答えは、ボードがリセットされることです。回路図は、ボードをリセットする方法で作成されます (RTD/DTR は何らかの形でマイクロコントローラーのリセット ピンに配線されています)。

于 2013-05-17T05:06:01.660 に答える