コマンドラインを使用してArduino Leonardoにコードをアップロードする

私はコンパイルされた.hexファイルをターミナルを使ってArduino Leonardoにアップロードしようとしています。 Arduino IDEを使用してサンプルコードをアップロードするとうまくいき、Arduino IDEからアップロードコマンドを取得しました

avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i

しかしそれを実行すると、私は次のエラーが出る

Connecting to programmer: .avrdude: Send: . [1b]
avrdude: Send: S [53] 
avrdude: Recv: . [15] 

avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding

どうしましたか?

3

3 答え

Leonardoの問題は、Unoなどのボードのようなシリアルポートを開いたときに自動的にリセットされないことです。

Arduino IDEには、ボードを手動でリセットするコードが含まれています(シリアルボードを1200ボーで開き、再度閉じます)。

基本的には、ボードをリセットしてブートローダに入る別の方法が必要です。これは、適切なタイミングでリセットボタンを押す(LEDがブートローダモードになったときにフェードインまたはフェードインする)か、またはコマンドラインユーティリティを使用して1200ボーでシリアルポートを開き、avrdudeを実行する直前にもう一度閉じるだけです。

私は今レオナルドに手を差し伸べることはありませんが、あなたはいくつか運があるかもしれません:

stty -F /dev/ttyACM0 ispeed 1200 ospeed 1200 && avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i
1
追加された
これは私のためには機能しません。
追加された 著者 alex strange,

いくつかの試行錯誤を試した後、私はLeonardoブートローダにアップロードする簡単なバイナリを構築しました。このバイナリは1200ボーでシリアルを開き、それを閉じてフラッシュに .hex を書き込むためにavrdudeバイナリをラップします。

Arduinoのコア CDC.cpp では、CDCがボーレート1200を待つだけでなく、CDCがDTR値をチェックしていることがわかります。 DTRが高くなると、CDCはブートローダにジャンプします。だから私はDTR値をクリアしました。私はUbuntu 16.04でこれを試しました。

https://github.com/vanbwodonk/leonardoUploader

この単純なコマンドだけを使用してください:

leonardoUploader /dev/ttyACM0 Blink.ino.hex

私はそれが他の人がこれを探しているのに役立ちます。

1
追加された

Windowsのソリューションについては、こちらをご覧ください:レオナルドをavrdudeでリセットするにはどうすればよいですか?私はavrdude呼び出しを自動化する単純なバットファイルラッパーを作った。 WMIでレオナルドCOMポートを識別し、このCOMポートをmodeコマンドで1200ボーにリセットし、ブートローダCOMポートを識別してavrdudeを呼び出します。

ファームウェアはfirmware.hexに置かれるはずですが、batファイルはコマンドラインから提供するように変更することができます。

私はコードをGitHubレポに入れました: Arduino Leonardoへのファームウェアアップロードを可能にするavrdudeのための単純なラッパーコマンドライン

0
追加された
これはリンクのみの回答であり、改訂または削除する必要があります。
追加された 著者 Thomas Myron,