※ 当ページには【広告/PR】を含む場合があります。
2021/02/26
[Atmel-ICE on Linux] Debianからavrdudeを使ってブレッドボード上でAtmega328pのプログラムを書き込む
そこで少し今更感のあるネタになりますが、新品未使用のATmega328Pマイコンを買って最初にやるべきことにブートローダーを準備することが挙げられます。またArduinoも一枚あたりの単価はそれほど安価ではないので、誤ってマイコンをショートさせて焼いたときの復旧方法としてブートローダーの書き込み方は覚えておきたいものです。ウェブ検索でArduino ブートローダー 書き込み
などで検索してもかなりの方が詳しく解説しているので、新規性のある内容では無いのですが、次のステップで行う話にも絡むため、一度このブログでも手順を取り上げておきます。
Atmel-ICE MCU AVR SAM Xmega プログラマー デバッガー Arduino Uno Rev3 ATmega328 マイコンボード A000066 Atmel AT AVR ISP mk2 MKII ATMEL インシステムプログラマー USB AVRISP XPII デバッガー Arduino AVR ISP SIELD ATmega328P ブートローダ書込 HiLetgo FTDI FT232RL 3.3V 5.5V USB to TTL シリアル コンバーター 2個セット ELEGOO Arduino用UNO R3スターターキット これ1冊でできる!Arduinoではじめる電子工作 超入門 改訂第4版 ブートローダー?
そもそもArduinoのブートローダーというのは、Arduino IDEのスケッチプログラムからターゲットのマイコンにプログラムを書き込んでくれるArduino開発では必須のユーティリティツールです。デフォルトのArduino製品には既にブートローダーがプリインストールしてあるために、パソコンにUSBを繋ぐだけでシリアル通信からプログラムが書き込みできるのも、全てはブートローダーのおかげというわけです。そして、新品未使用のディスクリートなマイコンを購入して使う場合には、当然ブートローダーは入っていないのですので、そのままUSB-シリアル変換でパソコンに繋いだとしても、Arduino IDEからプログラムを書き込みすることができません。ではこのブートローダーをどうやって初期状態のマイコンに書き込むのか、というお話を以下で進めていきます。なお、公式リファレンス: From Arduino to a Microcontroller on a Breadboard - Arduinoに載っている内容でおおよその流れが進みます。
Atmel-ICE MCU AVR SAM Xmega プログラマー デバッガー Arduino Uno Rev3 ATmega328 マイコンボード A000066 Atmel AT AVR ISP mk2 MKII ATMEL インシステムプログラマー USB AVRISP XPII デバッガー Arduino AVR ISP SIELD ATmega328P ブートローダ書込 HiLetgo FTDI FT232RL 3.3V 5.5V USB to TTL シリアル コンバーター 2個セット ELEGOO Arduino用UNO R3スターターキット これ1冊でできる!Arduinoではじめる電子工作 超入門 改訂第4版 ブートローダー書き込み専用機の準備
今回の話ではATmega328Pに限ったブートローダー書き込み手順を説明しますが、市場に出回っているArduinoに搭載されてるマイコンも色々と種類が異なりますので、本記事でArduinoというともっともベーシックなArduino Uno Rev3ということにさせて頂いております。Uno以外でもブートローダーの書き込みが行いたい方はこちらのサイトに色々なArduinoモデルの書き込み装置用設定のバリエーションが記載されているのでご参照ください。さて、まっさらなマイコンにブートローダーを初期書き込みするためには、ブートローダー専用の書込用デバイスを準備することになります。これは市販されて製品化されている物もありますが、Arduino1台あればこの書込用デバイスは自作することが可能なのです😍。ということで、ひとまず手持ちのArduino1台をブートローダー書き込み専用機として利用してみたいと思います。'Arduino ISP'を書き込む
ブートローダー書き込み専用機を作るためには、Arduino ISP
というプログラムをArduinoに書き込む必要があります。パソコンとArduinoを接続し、Arduino IDEを起動します。以下の図のように[スケッチ例] > [Arduino ISP]
を開くと、Arduino ISPのスケッチが表示されるのでArduino側に書き込みます。これでブートローダー書き込み専用機になりましたので、一旦パソコンとの接続を切っておきます。
Atmel-ICE MCU AVR SAM Xmega プログラマー デバッガー Arduino Uno Rev3 ATmega328 マイコンボード A000066 Atmel AT AVR ISP mk2 MKII ATMEL インシステムプログラマー USB AVRISP XPII デバッガー Arduino AVR ISP SIELD ATmega328P ブートローダ書込 HiLetgo FTDI FT232RL 3.3V 5.5V USB to TTL シリアル コンバーター 2個セット ELEGOO Arduino用UNO R3スターターキット これ1冊でできる!Arduinoではじめる電子工作 超入門 改訂第4版 サラのATmega328Pをブートローダーで初期化
ここから主題のお話です。外部の水晶振動子を使って書き込む方式でやってみますので、最低限以下の部品が必要になるようです。ブートローダー書き込み用に配線
まずブートローダー - ATmega328P
を正しく接続する必要があります。ここでは以下のように公式のチュートリアルで説明されているように結線してみます。なお公式のチュートリアル内では触れられていなかったようですが、書き込みに失敗することもあるらしいので念の為に自動リセット回路の無効化をするために、RESET-GND間
に10~22[μF]のコンデンサを入れておくとより安心のようです。ちなみに16MHzの振動素子は手元にコンデンサー内蔵タイプが残っていたのでこちらを使いました。この場合22pFの積層コンデンサが不要になります。念押しでATmega328Pのピン配置図を載せておきますが、配線が間違っていないか書き込みを行う前にしっかり確認してください。余談 ~ ICSP
Arduinoシリーズには、ボードのに6ピンのオスヘッダの島があるものがあります。これはICSP(In-Circuit Serial Programming)
と呼ばれるもので、マイコンなどプログラム可能なデバイスを基板に実装した状態で、プログラムを書き込むことを意味しています。より一般にはISP(In-System Programming)
とも呼ばれ、Arduino ISP
というプログラムはArduino IDEからマイコンにプログラムを描き込ませるための役割を持っています。AVRマイコンのICSPヘッダアサインメントは以下のように取り決められるのが通例です。図中の5ピンのRESET端子だけは取扱注意で、Lowレベルの際にICSPモードがアクティブになります。Highの場合にICSPモードをアクティブにしたい場合にはこことは別のポートを使うことになります。よってArduino Uno R3では、以下の2つのパターンで配線をした場合はICSPとしては等価になります。図の参照先: https://ht-deko.com/arduino/bootloader.html
今回は正攻法の公式チュートリアルでの接続方法を試しましたが、ICSPヘッダをボード上に持っているモデルの場合ICSPを使った方がピンの指し間違いが少なくなるので、ICSPヘッダがあるのならこちらを積極的に使うことを推奨します。なお、今回の書き込み装置からターゲットのマイコンへの供給電圧は5Vです。場合によっては書込装置側が5Vだけれど、ターゲット側マイコンの公称電圧が3.3Vだった、どうしよう...というケースもあるかもしれませんが、この時に何も考えずに書き込んでしまうと、マイコンの内部トレラント電流以上が流れてこんがり焼けて壊れる恐れがあり危険です。ブートローダーを書き込む前には必ず書き込み装置とターゲット電圧が合っているかを確認してください。ATmega328Pにブートローダーを書き込む
上記まででブートローダー書き込み装置側(Arduino)とブレッドボード側(ATmega328P)の接続の準備が整いましたので、いよいよブートローダーの書き込みです。ここでArduinoとPCをUSB接続します。なお書き込みターゲットのATmega328PにもArduino側から5V電源が供給されます。まずは[ツール] > [ボード]
で、ターゲットマイコンへ焼き込みたいボードタイプを指定します。ここではUnoの複製を行いたいので、Unoを指定します。次に[ツール] > [シリアルポート]
で書込装置のシリアルポートを指定します。[ツール] > [書込装置]
のタイプをArduino as ISP
に指定します。見ての通りで市販の書き込み装置の種類が色々とあるようですので、適切な項目を選択できるようになっています。最後に[ブートローダーを書き込む]
でブートローダーを書き込みます。書き込みが終わったら、Arduino側のUSBを抜いて、電源供給を止めて一丁上がりです。では本題だったなんだか壊れたっぽい挙動のArduinoUnoからマイコンを剥ぎ取ります。なんだか固着して固く動かないときがありますが、ピンセットを使ってマイコンの底を押し上げる感じで慎重にソケットから引き抜きます。ブートローダーを書き込んだマイコンを向きに注意してソケットに入れ替えます。あとは、ArduinoIDEの[スケッチ例] > [1. Basic] > [Blink]
のスケッチを書き込めるかやってみてビルドインLEDがチカチカしていたら完了です。
Atmel-ICE MCU AVR SAM Xmega プログラマー デバッガー Arduino Uno Rev3 ATmega328 マイコンボード A000066 Atmel AT AVR ISP mk2 MKII ATMEL インシステムプログラマー USB AVRISP XPII デバッガー Arduino AVR ISP SIELD ATmega328P ブートローダ書込 HiLetgo FTDI FT232RL 3.3V 5.5V USB to TTL シリアル コンバーター 2個セット ELEGOO Arduino用UNO R3スターターキット これ1冊でできる!Arduinoではじめる電子工作 超入門 改訂第4版 まとめ
今回はArduinoIDEを用いたスタンダードなやり方でサラのATmega328P(-PU)にブートローダーを書き込むまでの手順をおさらいしました。参考サイト
ブートローダーを書き込む方法