マイクロコントローラーのプログラミング:JTAG、SPI、USBオーマイ!?



Programming Microcontrollers



解決:

工場から直接出荷されているarduinoのようなATMEGAマイクロコントローラーは、SPIまたはJTAGインターフェースを使用してのみプログラムできます。

SPIはSerialPeripheral Interfaceの略で、マイクロコントローラーが相互に、または外界と通信するための方法です。 3線を使用して通信するため、3線とも呼ばれます。チップをプログラムするには、USBからコマンドを読み取ってSPIラインを駆動してチップをプログラムする特別なプログラマーが必要です。人気のあるものは、AdafruitのUSBTinyISPのようです。 SPIプログラミングの非常に優れた入門書はSparkFunにあります。 Atmel AVRチップをプログラミングするための最も人気のあるアプリケーションは、avrdude(cmd line)、ponyprog(新しいプログラマーでは動作しません)、場合によってはAVR Studio(プログラマーがサポートしている場合)です。 SPIプログラミングの利点は、工場から直接Atmelチップをプログラミングできるため、プロジェクトでArduinoが常に必要になるとは限らないことです。



SPIが「単なる別の」シリアルプロトコルである場合、JTAGはマイクロコントローラをプログラムおよびデバッグするために特別に設計されたプロトコルです。すべてのAtmelmicroがJTAGをサポートしているわけではありませんが、Arduinoで使用されているものはサポートしています。 JTAGプロトコルは、「インサーキットエミュレーション」やデバッグなどの優れた機能に使用できます。つまり、実際の実行中にマイクロコントローラー内のプログラムの状態を確認できます。これを行うには、特別なプログラマーが必要です。別の質問に対する私の答えを見ました。

USBを使用してチップをプログラムするには、まずSPIまたはJTAGを使用して「ブートローダー」でチップをプログラムする必要があります。ブートローダーがロードされると、システムはUSB-シリアルコンバーターを使用して任意のPCからプログラム可能になります。欠点は、ブートローダーがメモリスペースを占有し、この方法では、実行中にチップの状態を確認できないことです。




利用可能なさまざまなプログラミング方法に飛び込みたいと思いますが、他の誰かがすでに持っています。ここは ディーンカメラ AVRFreaksに関するのチュートリアル、 AVRプログラミング方法:

AVRマイクロコントローラーをプログラムする方法はたくさんあります。多くの人が一度に違う質問をするので、ここで概要を説明して、質問にすばやく効率的に答えられるようにしたいと思いました。方法を間違えたり、間違えたりした場合はご容赦ください。

方法1:システムプログラミング(ISP)

による支援: AVRの大多数(以下の投稿を参照)
サポートされているプログラマー: AVRISP MKI / II、JTAG MKII、STK500、STK600、ドラゴン、AVRISPクローン、AVR910プログラマー、AVRONE



システムプログラミングでは、おそらくAVRライン全体のフラッシュ、EEPROM、ヒューズ、ロックバイトをプログラミングする最も一般的な方法です。 ISPは非常に高いクロックレートでAVRをプログラムでき(ターゲットAVRが高周波数で実行されており、プログラマーがそれをサポートしていると仮定)、ほとんどすべてのAVR愛好家に最適な方法です。コンピュータのパラレルポートに接続する単純な日曜大工のドングルに加えて、市場には非常に多くのAVRISPクローンとAVR910プログラマーがあります。

最近の新しいドングルの設計では、コンピューターのシリアルポートを使用する場合がありますが、事例証拠によると、この方法は 非常に 技術的な制限のために遅い。

ISPは、ターゲットAVRがISPクロックの少なくとも4倍のクロックレートで実行されていることを要求します。これはよくある落とし穴であり、AVRを初めて使用する多くの人にとって混乱の原因となります。

方法2:JTAG

による支援: MKIおよびMKIIデバイスのサポートについては、AVRStudioツールのヘルプを参照してください
サポートされているプログラマー: JTAG-ICE、JTAG-ICE MKII、Dragon、JTAG-ICEクローン、AVRONE、STK600(プログラミングのみ)

技術的には、JTAGはデバッグシステムであり、プログラミングメソッドではありません。それでも、JTAGインターフェースはそれをサポートするAVRのプログラミングを可能にします。

JTAGは、回路内で実行されているときにサポートされているAVRのステータスを操作および検査できるシステム内デバッグツールです。 JTAGを使用すると、ユーザーはいつでも実行、AVRの内部レジスタの操作などを停止できます。

ATMELの公式JTAG-ICEユニットは、JTAG-ICE MKIIに取って代わられました。これは、AVR範囲のDebugWireデバッグプロトコル全体でより新しく、より広くサポートされているほか、ISP方式によるプログラミングもサポートしています(上記を参照)。

JTAG-ICEクローンは低価格で入手できますが、ほんの一握りのAVRとの互換性が限られているため、その有用性が制限されます。これに関係なく、AVRがJTAGインターフェースをサポートしている場合、JTAG-ICEは非常に優れた効果的なデバッグ方法およびプログラマーのままです。

方法3:DebugWire

による支援: 多くの小さなAVR
サポートされているプログラマー: JTAG-ICE MKII、ドラゴン、AVRONE

繰り返しますが、DebugWireはプログラミングインターフェイスではなくデバッグですが、サポートされているAVRにプログラムをロードするために使用できます。 dWインターフェイスはすべての通信に単一のAVRピン(/ RESETライン)を使用するため、ピン数の少ないAVRデバイスに最適です。

方法4:ブートローダー

による支援: 最新のAVR
サポートされているプログラマー: 該当なし

ここでも、技術的にはプログラミング方法ではありません。ブートローダーは、通常のフラッシュのユーザー設定可能な予約済みセクションにある小さなAVRプログラムです。ブートローダーは、新しいAVRで利用可能なフラッシュ自己修正機能を利用して、外部ソースからロードされたプログラムデータを介してAVRがそれ自体をプログラムできるようにします。ブートローダーは任意の場所(外部データフラッシュやSDカードなど)からデータを取得できますが、最も一般的なタイプのブートローダーはAVRのRS-232(シリアル)ポートを介してPCと通信します。

ブートローダーは、フラッシュスペースを消費し(AVRのアプリケーションで使用可能なフラッシュのサイズを制限する)、AVRのヒューズビットを変更できないという制限があります。

ブートローダーはインターネット上でダウンロードできるように広く入手できますが、「鶏が先か卵が先か」という問題があります。そもそもブートローダーでプログラムするには、ここにリストされている別のタイプのプログラマーが必要です。これは通常、単純なパラレルポートドングル(ISPのセクションを参照)を構築するか、ブートローダーがプリロードされたAVR(AVRButterflyボードなど)を購入することで解決されます。

方法5:高電圧並列プログラミング(HVPP)

による支援: ほとんどの非TINYAVR(例外を除く)
サポートされているプログラマー: STK500、STK600、ドラゴン、自作ドングル、AVRONE

高電圧並列プログラミングは、セットアップが面倒なため、めったに使用されないプログラミング方法です。それにもかかわらず、HVPPプログラミングは、ヒューズビットが別のプログラミング方法で誤って構成されたAVRを「復活」させるために一般的に使用されます。

STK500とDragonの両方がHVPPをサポートします。 HVPPの間、ターゲットの/ RESETピンは12Vの異常に高い値に上げられ、内部の並列プログラミング回路に接続されます。 / RESETピンは、このレベルまで安全に上げることができるAVR(HVPPでサポートされているAVR上)の唯一のピンです。

このようなオンラインプランを使用して、独自のHVPPドングルを作成できます。

方法6:高電圧シリアルプログラミング(HVSP)

による支援: 多くの小さなAVR(例外を除く)
サポートされているプログラマー: STK500、STK600、ドラゴン、自作ドングル、AVRONE

HVSPはHVPPに似ていますが、データ転送が並列ではなく直列に実行される点が異なります。これは、HVPPに十分なピンがない多くのTINYシリーズAVRで使用される代替プログラミング方法です。

方法7:PDI

による支援: XMEGA AVR
サポートされているプログラマー: STK600、AVRONE、JTAG MKII、Dragon、AVRISP MKII

PDIは、AVRのXMEGAライン用のdebugWireプロトコルに基づく新しいプログラミングインターフェースです。現在、他の8ビットAVRマイクロコントローラーでは使用されていません。

方法8:TPI

による支援: 6ピンTINYAVR(ATTINY10など)
サポートされているプログラマー: STK600、ドラゴン、AVRISP MKII

TPIは、6ピンATTINY10のように、ピンが制限された新しいTINYラインのAVR用の非常に小さなプログラミングインターフェイスです。 dWと同様に、TPIは通信インターフェイスの一部としてデバイスの/ RESETラインを使用しますが、類似性はそこで終わります。パイントサイズのTINYAVRにはオンチップのデバッグ回路がないため、TPIプロトコルは半二重プロトコルで3ピンの新しいプログラミングインターフェイスを使用します。デバイスのRSTDSBピンが設定されている場合、プログラミングのために/ RESETラインを+ 12Vに上げる必要があるため、これは現在、新しいSTK600プログラミングボードでのみサポートされています。

ボーナスFAQセクション!

  1. どちらが最良の方法ですか?
    普遍的な「最良の」方法はありません。 ISPプログラミングは単純で非常に人気がありますが、上記のすべての方法が機能します。 2つの高電圧プログラミングモード(デバイスに適用可能な方)は、ヒューズが正しく構成されていないAVRの修復を可能にするため、最も機能が豊富です。ただし、これらの方法は設定が面倒なので、ほとんどのユーザーがISPを使用する理由です。

  2. パラレルポートドングルを作りました。 AVRStudioで使用できますか?
    そうではないと思います。 AVRStudioは、送信する通信プロトコルを解読するために、「ダム」ドングルとインターフェースすることはできません。スマートプログラミングデバイス(マイクロコントローラー自体を含む)が必要です。マイクロコントローラーのない単純なドングルは、それ自体が「ビットバン」(つまり、コンピューターを介してドングルを介してシミュレートされた適切な信号)である必要があります。

  3. それで、私のドングルは役に立たないのですか?
    いいえ。サードパーティのプログラミングソフトウェアツールを使用して、自家製のドングルを使用してプログラミングすることはできます。 AVRDudeは、よく知られている無料のコマンドラインユーティリティであり、WinAVRパッケージに含まれています。

  4. プログラマーにAVRStudioを使用させたい場合、どのようなオプションがありますか?
    AVRStudioでサポートされているプロトコルを使用するプログラマーを選択してください。これは、単純な「AVR910」プロトコル(非推奨)またはSTK500 / AVRISPで使用されるプロトコルのカスタム実装の場合があります。これらのプログラマーはマイクロコントローラーを必要とし、キャッチ22の状況につながることに注意してください。これは、購入時にプログラマーのAVRを適切なファームウェアで事前にプログラムするか、AVRをブートローダーで事前にプログラムすることで解決できます。

  5. はい、ブートローダーを使用したいと思います。そもそもどうやってそこに入れるの?!
    AVRでブートローダーを使用するには、最初にブートローダーをプログラムする必要があります。既存のプログラマーがいない場合(最初のプログラミングには単純なダムドングルでも十分です)、代わりに、で事前にプログラムされたAVRを購入できます。いくつかのサプライヤーからのブートローダー。
    AtmelはButterflyデモボードも製造しており、そのMEGA169AVRにはAVR-Studio互換のブートローダーがプリロードされています。

  6. ヘルプ! ISPを使用しているときに、ヒューズをいじってAVRを破壊しました。 最も一般的な間違いは、クロック選択ヒューズを無効な設定に変更することです。 AVRのXTAL1ピンに外部クロックを配置してみて、それが役立つかどうかを確認してください。
    それができない場合は、可能であれば高電圧方式の1つを使用してください。これらは、高電圧方式がプログラミングのためにAVRに独自のクロックを提供するため、クロックソースに関連するものを含め、構成の誤りを修正します。

  7. プログラマーとどのようにインターフェースしますか?
    プログラマーとのインターフェースに使用するソフトウェアは、使用しているプログラマーのタイプによって異なります。
    単純な「ダム」ドングルには、PonyProgやAVRDudeなどのサードパーティソフトウェアが必要です。これらはコマンドラインまたはGUIツールである可能性があります-Webを見て回れば、ニーズに合わせて1つを調整できます。
    AVR910プロトコルに基づくプログラマーとブートローダーはAVRStudio内で使用できます。 [ツール]メニューから[AVRProg]オプションを選択して、プログラマーとインターフェイスするためのGUI画面を開きます。別の方法として、AVRDudeなどのサードパーティツールもAVR910と互換性があります。
    公式ツールは、特にデバッグバリアント(JTAG / Dragon / etc)の場合、AVRStudioに緊密に統合されています。 AVRStudioツールメニューから、「プログラムAVR ...」サブメニューを選択し、「接続」項目をクリックします。新しいウィンドウから、ツールとその接続インターフェイスを選択し、[OK]をクリックします。
    ダムドングルやAVR910プログラマーの場合と同様に、公式ツールはサードパーティのプログラミングソフトウェアでも使用できます。

(C)Dean Camera、2009年。無断転載を禁じます。事前の明示的な許可なしに、AVRFreaks.net以外のWebサイトで複製することはできません。

再現 もちろん、事前の明示的な許可!


議論にもう1つ付け加えたいと思います。

SPIは、チップの非常に一般的なインターフェイスです。 3線式への言及は、チップの選択ピンを使用しないSPIのモードです。

I2Cは、チップの数に関係なく2線のみを使用するため、インターフェイスの主なコンテストです。SPIは、インターフェイスごとに別のワイヤを必要としますが、速度は遅くなります。

教えるとき、私はインターフェースについて教えることを最も重要なタスクの1つと考えています。

私の情報を拡張したい人のために利用可能なコミュニティウィキ。