ATTINY202 にプログラムを書き込む

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:

現在の回路と状況を整理すると、以下の点が確認できます。

  1. 使用環境
    • 開発ツール: Arduino IDE
    • 追加コア: megaTinyCore
    • シリアル変換ボード: CH340搭載ボード
  2. 回路構成
    • TX → ショットキーダイオード → RX
    • RX → 470Ω抵抗 → ATtiny202のPIN6 (UPDI)
  3. 状況
    • 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:i
    • COMx はCH340のポート番号に置き換えてください。
    • -F は強制書き込みオプション。

8. ATtiny202の状態確認

  • ATtiny202の設定がロックされていないかを確認。
  • 対策:avrdude でヒューズ設定を確認する。 shコピーする編集するavrdude -c serialupdi -p attiny202 -P COMx -b 57600 -U hfuse:r:-:h
    • hfuse の値が異常でないかチェック。

9. Arduino IDEの再インストール

  • まれにArduino IDEの設定が壊れていることがある。
  • 対策: Arduino IDEを一度アンインストールし、再インストールする。

まとめ

試す順番:

  1. CH340のドライバを再インストール
  2. ボーレートを 57600 に変更
  3. プルアップ抵抗を 4.7kΩ に変更
  4. ショットキーダイオードを 1N4148 に交換
  5. 別のシリアル変換モジュールを試す
  6. avrdude を手動で実行して詳細エラーを確認
  7. ヒューズ設定をチェック
  8. Arduino IDEを再インストール

これらを試してもダメなら、さらに詳しいデバッグが必要かもしれません。

あなた:

Arduino IDE の設定 “jtag2updi”では正常に書き込みができない。 “jtag2updi”を下記に変更で正常終了した。 “SerialUPDI 23040 baud” “SerialUPDI – SLOW: 57400 baud” Lチカプログラムの動作まで確認できました。 いろいろとありがとう。

ChatGPT:

無事に書き込みと動作確認ができたようで何よりです!🎉
やはりボーレートの設定が影響していたようですね。

今回の解決策:

  • “SerialUPDI 23040 baud” または “SerialUPDI – SLOW: 57400 baud” に設定変更
  • “jtag2updi” では書き込みできなかった

外部サイトへのリンク

ATtiny202をPlatformIO経由で扱うための環境設定