AVRマイクロコントローラー用のUSBブートローダー

この記事では、例としてObjective Development usbasploaderブートローダーを使用して 、ATmega32マイクロコントローラー用のUSBブートローダーを迅速に起動する方法について説明します。



USBブートローダーテクノロジーは、デバイス内のソフトウェア( ファームウェア )を交換するための特別なプログラマーを必要とせず、USBを介してコンピューターに接続するという1つの可能性を提供します。 コンピューターとUSBはどこにでもあるので、プログラマーを携帯する必要はもうありません。 ブレッドボードにブートローダーが装備されている場合、プログラマーの購入やその製造にかかる時間を節約できます。これは初心者にとって重要です。



AVR用に多くのブートローダーが作成されています-[ 1 ]を参照してください。 この記事では、非常に人気のあるUSBaspプログラマーと互換性があるため、usbasploader [ 2 ]を選択しました。 これにより、一般的なプログラム([3]を参照)avrdude、eXtreme Burner-AVR、Khazama AVR Programmer、さらにはBASCOM-AVRプログラミング環境(BASCOM-AVRプログラミングシステム)を使用して、LinuxとWindowsの両方のファームウェアをアップグレードできます-別の記事に値する小さな奇跡)。 さらに、usbasploaderにはすべてのソースが付属しており、十分に文書化されており、ユーザーのニーズに簡単に適合します(これについては後で説明します)。



usbasploaderブートローダーは非常に簡単に動作します-USBに接続すると、USBaspプログラマのふりをします。 したがって、それをサポートするすべてのプログラムは、USBaspプログラマーを使用しているかのように、デバイスのファームウェアを上書きします。 ブートローダーは、マイクロコントローラーのプログラムのフラッシュメモリの上位アドレスにあり、ユーザープログラムを下位アドレス(通常はアドレス0から開始)に書き込みます。つまり、マイクロコントローラーがフラッシュされると、ブートローダーは上書きされません。 記録が終了すると、ブートローダーはユーザープログラムに制御を渡します。 次に、 ATmega32を例として使用して、これがATmegaマイクロコントローラーでどのように機能するかについて詳しく説明します。



ATmega32の場合、usbasploaderはアドレス7000hからフラッシュに配置されるようにコンパイルされます(ATmega32プログラムのメモリアドレスは0000h..7FFFhであり、コマンドアドレスは2バイトの倍数である、つまり、コマンドアドレスは0000h..37FFhの範囲にあることを思い出してください) 。 ユーザープログラムの場合、空き領域0000h..6FFFh(28672バイト)が残ります。 usbasploaderローダーは、プログラムメモリの上位アドレスにあるアドレスから開始する機能に組み込まれたATmega32マイクロコントローラーを使用します(ジャンパーによって選択されたいくつかの固定アドレスが利用可能です-ヒューズ、[ 4 ]を参照)。 電源投入時およびリセット時に常に制御を0x7000アドレスに転送するには、BOOTSZ0およびBOOTSZ1をジャンパー(ヒューズ、ヒューズビット)を対応する状態(4000hバイトまたは2048ワードのプログラムコードがブートローダーに割り当てる必要があります)にプログラムするとともにBOOTRSTジャンパーをプログラムする必要があります。 この後、コードはリセットまたはオンになると、アドレス0からではなく、AVRコマンドのワードのアドレス3800hから、またはフラッシュバイトのアドレス7000hから開始します(AVRコマンドの最小サイズは2バイトであることを思い出してください)。



リセット後に制御を受け取ったusbasploaderコードは、そのアクティベーションの状態、つまりUSBaspプログラマーとして動作を開始する信号をチェックします。 通常、このような信号は地面への脚の閉鎖です。 ブレッドボードには、 PB5マイクロコントローラーATmega32をそのような脚として選択しました 。 このレグは同時にコネクタへのMOSI信号出力なので、U1 ISPコネクタのピン4と6の間のPB5ログジャンパにログを送信すると非常に便利です。 0.そのため、usbasploaderコードはポートPB5のレベルをチェックし、ログがあるかどうかを確認します。 0(U1 ISPコネクターのレッグ4と6の間のジャンパーが取り付けられている)、その後USBaspプログラマーとして作業を開始します。 つまり、ジャンパーが取り付けられていると、電源がオンになるとブートローダーがアクティブになり、コンピューターに接続されている場合、USBasp USBデバイスがコンピューターに表示されます。 電源投入時にジャンパーがない場合(同時に、マイクロコントローラーによってPB5でログ1が読み取られる)、usbasploaderは直ちに制御をユーザープログラムに転送します(アドレス0に)。 簡単な起動アルゴリズムを次に示します。



usbasploaderでは、ブートローダーの動作を変更することができます。このため、3つの機能(非常にシンプルで、bootloaderconfig.hファイルにあります)を編集するだけで十分です-bootLoaderInitbootLoaderConditionbootLoaderExit 。 機能の割り当ては、名前からほとんど明らかです。 bootLoaderInit関数は、ブートローダーのアクティブ化条件を追跡できる環境を構成することを目的としています。

static inline void bootLoaderInit( void ) <br>{<br> DDRB |= (1 << PB0); // <br> // PB5 (MOSI, 4 U1 ISP) pull-up <br> PORTB |= (1 << PB5)|(1 << PB0); <br>}









コードは非常にシンプルです-プルアップ内部プルアップ抵抗器をPB5フットに接続するだけです-これにより、U1 ISPコネクターのピン4と6の間のジャンパーの存在を判断し、ブレッドボードの赤いLEDを点灯させることができます。 bootLoaderCondition関数は、ピン4と6の間にジャンパーがあるかどうかを確認するように設計されています。

static inline uint8_t bootLoaderCondition() <br>{<br> if (!(PINB & (1 << PB5))) <br> {<br> return 1;<br> } <br> else <br> {<br> // no boot loader <br> return 0;<br> }<br>}







ジャンパーがオンの場合、PB5レッグはログとして読み取られます。 0、およびbootLoaderCondition関数は1を返します(これはブートローダーが機能していることを意味します)。 ジャンパーがない場合、関数は0を返します。これは、ブートローダーが非アクティブであることを意味します(制御はすぐにアドレス0-ユーザープログラムに転送されます)。 bootLoaderExit関数は何もしません。赤のレイアウトLEDを消すだけです。

static inline void bootLoaderExit( void ) <br>{<br> PORTB &= ~(1 << PB0); // <br>}









上記のbootLoaderInit、bootLoaderCondition、bootLoaderExit関数のコードは例と見なすことができます。ニーズに合わせて変更することができ、変更する必要があります。その後、usbasploaderは希望どおりに機能します。 結論として、Windowsプラットフォームでの手順でプロセスを説明します(AVRStudioとWinAVRが既にインストールされていると想定されます。そうでない場合は、リンク[ 6 ]を使用してインストールする方法の指示をお読みください)。



[ usbasploaderをプロジェクトに埋め込む方法 ]



1 USBaspLoader.2009-03-20.zipなど、usbasploaderの最新バージョン([ 2 ]を参照)をダウンロードする必要があります。 AVR-USB-MEGA16ブレッドボードをお持ちの場合、リンク[ 5 ]からオプションをダウンロードすることをお勧めします-すべて準備が整っているので、ステップ2、3、4をスキップできます。 便利なフォルダーに解凍します。



2 。 Makefileの設定を編集します。 そこで変更する必要があります:

a)F_CPUの定義は、マイクロコントローラーが動作する周波数(Hz)です。 周波数は、12、15、16、16.5および20 MHzです。

b)ご使用のタイプのマイクロコントローラーのDEVICEの定義。

c)usbasploader BOOTLOADER_ADDRESSコードダウンロードのアドレス(16進形式、バイト単位)。

d)(Makefileからチップをフラッシュしない場合はオプション)FUSEOPTおよびLOCKOPTの定義とAVRDUDEの定義を確認し、必要に応じて調整します。



。 bootloaderconfig.hを編集します。 そこで確認し、必要に応じて変更する必要があります。

a)USB_CFG_IOPORTNAMEマクロは、USB D-およびD +信号が接続されるポートの名前の文字です。

b)マクロUSB_CFG_DMINUS_BITおよびUSB_CFG_DPLUS_BITは、D-およびD +信号が接続されるポート番号です。 D +信号はINT0割り込みレッグに接続する必要があります。

c)機能コードbootLoaderInit、bootLoaderExitおよびマクロbootLoaderCondition。



4 。 makeと入力してプロジェクトを再コンパイルします。 コマンドラインに次のようなものが表示されます。



画像



コンパイルが正常に完了したら、プロジェクトのルートフォルダーにあるmain.binおよびmain.hexファイルを取得します-usbasploaderの既製ファームウェア。 ちなみに、hexfilesフォルダには、水晶の異なる周波数用の水晶ATmega8、ATmega88、ATmega168用のコンパイル済みファームウェアバージョンが既にいくつかあります。



5 。 プログラマを使用してusbasploaderコードをチップにフラッシュし、ヒューズを正しくインストールする必要があります。 この操作の意味は、usbasploaderコードを上位メモリ領域(アドレスBOOTLOADER_ADDRESS)に配置し、電源がリセットまたはオンになったときにブートローダーコードが実行されるようにヒューズを設定することです(これについては既に書いています)。 ヒューズの詳細については、リンク[ 4 ]およびマイクロコントローラーのデータシートを参照してください。 たとえば、ATmega32マイクロコントローラーの場合、ヒューズは次のように取り付ける必要があります。

低ヒューズバイト :0x CF

HIGH FUSE BYTE :0x D8 (0x98でJTAGデバッグを有効にすることもできます)

LOCKOPT BYTE :0x EF



AVR-USB-MEGA16開発ボードはusbasploaderとヒューズが既にフラッシュされた状態で購入できるため、手順1、2、3、4、5を実行する必要はありません。



6 。 ファームウェアブレッドボードをUSB経由でコンピューターに接続する必要があります。 彼らが何も混乱しなかった場合、レイアウトはシステムで新しいデバイスとして定義され、Windowsシステムはドライバーを要求します。 ドライバーはページ[ 2 ]からダウンロードするか、リンク[ 5 ]からアーカイブから取得できます。 Linuxの場合、ドライバーは必要ありません。



。 USBaspプログラマーで動作するプログラムの1つが必要です(リンク[3]を参照)。 Linuxユーザーにはavrdudeが適していますが、Windowsユーザーには非常に幅広い選択肢があります。 非常にシンプルで便利なインターフェイスを備えたKhazama AVR Programmerをお勧めします。



画像



画像



[ AVR-USB-MEGA16およびKhazama AVRプログラマーブレッドボードの例を使用してusbasploaderブートローダーを操作する方法 ]



1 U1 ISPコネクタの脚4と6の間にジャンパを配置します。

画像



2 。 ブレッドボードをUSB経由でコンピューターに接続します。 ブレッドボードの赤いLEDが点灯し、WindowsシステムでUSBaspプログラマーが検出されます。



。 Khazama AVR Programmerを起動します。 設定で、チップのメモリをクリアするオプションを削除します(コマンド->プログラムオプション->チップの消去をオフにします)。 ドロップダウンリストからチップを選択します。 ファームウェアhexファイルをダウンロードします(メニューの[ファイル]-> [フラッシュファイルをバッファにロード]を使用)。 大きな自動プログラムボタンを押して、プログラミングを開始します。 クリスタルは数秒で非常に高速にプログラムされます。

画像

プログラミングが完了すると、赤色のLEDが消灯し、プログラムはアドレス0(書き留めたばかり)から実行を開始します。



4 。 U1 ISPコネクターの脚4と6の間のジャンパーを取り外します。

画像



UPD100711別のUSBブートローダー BootloadHID に関する記事を書きました 。 ソースコードと作業スタイルは、USBASPloaderに非常に似ています。 コンピューターに特別なプログラムが必要な点が異なりますが、ブートローダーセクションのサイズの要件が緩和されるため、より若いチップ(ATmega8以降)への統合が容易になります。



[ リンク ]



1 AVRマイクロコントローラーのブートローダー

2Usbasploaderホームページ

。 USBaspプログラマーと連携するプログラムは、 AVRDUDEBASCOM-AVRKhazama AVR ProgrammereXtreme Burner-AVRです。

4AtmelAVR®ヒューズ電卓-AVRのジャンパー電卓。

5usbasploaderの私のバージョンは、ATmega32マイクロコントローラーを備えたAVR-USB-MEGA16ブレッドボードに閉じ込められています(クォーツ12 MHz、16 MHzのソースおよびコンパイル済みオプションを備えたAVRStudioのプロジェクト)。

6USBデバイスの開発-AVR USB(V-USB)およびlibusbライブラリの使用を開始する方法

XOR暗号化を使用したUSBaspブートローダー



All Articles