ATTINY202 にプログラムを書き込むために、 PCnのUSBからUSBからシリアル変換のボードを介して ATTINY202にブートローダーを書き込見ましたが、 下記のエラーが出ました。
avrdude: jtagmkII_getsync(): bad response to sign-on command: Unknown JTAG ICE mkII result code 0x01 Failed to burn bootloader: uploading error: exit status 1
考えられる原因を教えて欲しい。
ChatGPT:
このエラーの原因として考えられる点をいくつか挙げます。
1. AVRDUDEの設定ミス
avrdudeで-c jtagmkIIのように指定している場合、ATtiny202はJTAGではなくUPDI (Unified Program and Debug Interface) を使用するため、適切なプログラマを指定する必要があります。- 解決策:
-c jtagmkIIの代わりに-c serialupdiを使用してください。
2. プログラマ(USBシリアル変換モジュール)の設定ミス
- ATtiny202への書き込みには、一般的に UPDI を使用するため、USBシリアル変換モジュールを適切に接続する必要があります。
- 必要な接続
- TX(PC側) → 1kΩ抵抗 → ATtiny202のUPDIピン(PIN 10)
- GND(PC側) → GND(ATtiny202)
- VCC(3.3Vまたは5V) → ATtiny202のVCC
- 解決策: 接続を再確認し、特に1kΩ抵抗を使用しているかどうかチェックしてください。
3. 電源供給の問題
- ATtiny202が十分な電力を受け取っていない可能性があります。
- 解決策: 安定した3.3Vまたは5Vを供給し、USBシリアル変換モジュールの出力電圧と一致しているか確認してください。
4. 適切なボーレート設定
avrdudeのオプションでボーレートの指定が適切でないと、通信が正しく行えません。- 解決策:
-b 115200など適切なボーレートを試してください。
5. ATtinyの動作状態
- ATtiny202がすでにロックされている、または間違った設定で動作している場合、書き込みができないことがあります。
- 解決策:
avrdudeで-Fオプションを試して強制的に書き込むか、リセット後に再試行してください。
6. Arduino IDEの設定ミス
- 「ツール」メニューから以下を正しく設定しているか確認してください。
- ボード: ATtiny202
- プログラマ: 「jtag2updi(UPDIを使用)」を選択
まとめ
まずは接続を再確認し、avrdude のオプションを適切に設定して試してください。それでも問題が解決しない場合は、どのUSBシリアル変換モジュールを使用しているか、具体的な設定内容を教えてください。
あなた:
Circuit Design Explanation
もう少し詳しく説明します。 開発ツールにはArduino IDEを使用。 Arduino IDEにmegaTinyCoreをインストール。
シリアル変換ボードはCH340というチップを使ったボードを使用。
シリアル変換ボードからATTINY202への回路には良く使用されている回路で、 TXからRXへの向きにショットキーダイオードを接続しRXから470Ohmを通して ATTINY202のPIN6のUPDIに接続。
Arduino IDEからブートローダーの書き込みに際して、ロジックアナライザでUPDIピンを確認しましたが、書き込みの信号は送られているようです。
ロジアナにはUPDIのデコード機能がないためこの時の波形は観測できるが、書き込み中の
情報は分からない。
ChatGPT:
現在の回路と状況を整理すると、以下の点が確認できます。
- 使用環境
- 開発ツール: Arduino IDE
- 追加コア: megaTinyCore
- シリアル変換ボード: CH340搭載ボード
- 回路構成
- TX → ショットキーダイオード → RX
- RX → 470Ω抵抗 → ATtiny202のPIN6 (UPDI)
- 状況
- Arduino IDEでブートローダー書き込みを実行
- UPDIピンに信号は送られている(ロジックアナライザで確認)
- しかし、書き込みが完了せず
Unknown JTAG ICE mkII result code 0x01のエラーが発生
考えられる問題点と対策
1. プルアップ抵抗の確認
- UPDI通信では 4.7kΩ~10kΩ程度のプルアップ抵抗 をUPDIピン(PIN6)に追加することが推奨される。
- 対策: PIN6 (UPDI) に 4.7kΩ~10kΩのプルアップ抵抗 をVCCに接続して試す。
2. ボーレートの調整
- CH340は高ボーレートでの通信が不安定になることがある。
- 対策: Arduino IDEの「ツール」→「ボード設定」→「UPDIクロックレート」を
115200または57600に変更して試す。
3. 電源供給の確認
- CH340搭載のシリアル変換ボードは電流供給が不安定なことがある。
- 対策: 外部電源(安定した5Vや3.3V)をATtiny202に供給し、CH340ボードとはGNDを共通にする。
4. megaTinyCoreのバージョン確認
- 古いバージョンではUPDI書き込みが正常に動作しない場合がある。
- 対策: Arduino IDEの「ボードマネージャー」で megaTinyCoreの最新版 にアップデートする。
5. Arduino IDEの設定ミス
- Arduino IDEの「ツール」メニューの設定が適切か再確認。
- ボード: ATtiny202
- プログラマ:
jtag2updi (UPDI)を選択 - シリアルポート: CH340が認識されているポートを選択
- チップ:
ATtiny202 - クロック:
20MHz Internalまたは16MHz Internal
6. ブートローダーの強制書き込み
-Fオプションを使うと強制的に書き込めることがある。- 対策: ターミナルで以下のコマンドを試す(Arduino IDEのログから
avrdudeのコマンドを取得して適宜修正)。 shコピーする編集するavrdude -c serialupdi -p attiny202 -P /dev/ttyUSB0 -b 115200 -F -U flash:w:bootloader.hex:i-Fはエラーを無視して強制的に書き込むオプション。
追加確認事項
- 他のATtiny202チップでも同じ現象が起きるか?
- 可能であれば、別のUSB-シリアル変換モジュール(CP2102やFT232RL)でも試す。
これらの対策を試して、状況が改善するか確認してください。
あなた:
確認事項は下記。 megaTinyCoreは最新の2.6.10がインストールされている。 ボード: ATtiny202 プログラマ: jtag2updi (UPDI) を選択 シリアルポート: CH340が認識されているポートを確認。 チップ: ATtiny202 クロック: 20MHz Internal VCCから10kOhmでUPDIに接続。 他のATTiny202でも確認。 この状況でも同じエラーです。
ChatGPT:
設定やハードウェアの確認は問題なさそうですね。考えられる追加の原因として、以下の点を試してみてください。
1. CH340のドライバを再インストール
- CH340のドライバが正しく動作していない可能性があります。
- 対策: CH340の最新ドライバをインストールし直してみてください。
- Windowsの場合: 公式ドライバ(外部サイト)
- macOSの場合:
brew install --cask wch-ch340
2. CH340のボーレートを変更
- CH340は高ボーレートで不安定になることがあります。
- 対策:115200 → 57600 に下げて試してみる。
- Arduino IDEの「ツール」→「シリアルポートのボーレート」を変更。
3. UPDIのプルアップ抵抗を変更
- 10kΩを使用しているが、環境によっては 4.7kΩ の方が安定する場合がある。
- 対策: 10kΩ → 4.7kΩに変更 して試す。
4. ショットキーダイオードの見直し
- 使用しているショットキーダイオードの種類によっては、UPDI信号が弱くなることがある。
- 対策: 1N4148(汎用ダイオード) などに変更して試してみる。
5. 別のシリアル変換モジュールで試す
- CH340が原因の可能性を排除するために、 CP2102やFT232RL を使って試してみる。
- 対策: 別のUSB-シリアル変換モジュールでUPDI書き込みを試す。
6. UPDIの波形を詳しく確認
- ロジックアナライザでUPDIの波形を確認して、信号が明確に送信されているかチェック。
- 対策: 他のマイコン(例えばATtiny414など)で動作するか試してみる。
7. avrdude で直接書き込む
avrdudeのコマンドを手動で実行して、詳細なエラーを確認する。- 対策: ターミナルで以下を試す(ポートは適宜変更)。 shコピーする編集する
avrdude -c serialupdi -p attiny202 -P COMx -b 57600 -F -U flash:w:bootloader.hex:iCOMxはCH340のポート番号に置き換えてください。-Fは強制書き込みオプション。
8. ATtiny202の状態確認
- ATtiny202の設定がロックされていないかを確認。
- 対策:
avrdudeでヒューズ設定を確認する。 shコピーする編集するavrdude -c serialupdi -p attiny202 -P COMx -b 57600 -U hfuse:r:-:hhfuseの値が異常でないかチェック。
9. Arduino IDEの再インストール
- まれにArduino IDEの設定が壊れていることがある。
- 対策: Arduino IDEを一度アンインストールし、再インストールする。
まとめ
試す順番:
- CH340のドライバを再インストール
- ボーレートを
57600に変更 - プルアップ抵抗を
4.7kΩに変更 - ショットキーダイオードを
1N4148に交換 - 別のシリアル変換モジュールを試す
avrdudeを手動で実行して詳細エラーを確認- ヒューズ設定をチェック
- Arduino IDEを再インストール
これらを試してもダメなら、さらに詳しいデバッグが必要かもしれません。
あなた:
Arduino IDE の設定 “jtag2updi”では正常に書き込みができない。 “jtag2updi”を下記に変更で正常終了した。 “SerialUPDI 23040 baud” “SerialUPDI – SLOW: 57400 baud” Lチカプログラムの動作まで確認できました。 いろいろとありがとう。
ChatGPT:
無事に書き込みと動作確認ができたようで何よりです!🎉
やはりボーレートの設定が影響していたようですね。
今回の解決策:
- “SerialUPDI 23040 baud” または “SerialUPDI – SLOW: 57400 baud” に設定変更
- “jtag2updi” では書き込みできなかった