アプリケーションノート 3262

8051ベースのマイクロコントローラのインシステムプログラミング

筆者: Kevin Self

要約: インシステムプログラミングは組込み型システムを物理的な代替メモリに逆アセンブルすることなくシステムファームウェアをアップグレードすることができる価値のある機能です。マキシムの大部分の8051ベースのマイクロコントローラは安価なRS-232シリアルインタフェースを経由し、わずかなロジックゲートを使ってPCまたはラップトップから再プログラミングすることができます。起動されると、インシステムプログラミングの機能が、検出されたボーレートに自動速度調整を行い、コマンド駆動型のROMベースのブートストラップローダの実行を開始します。無料のPCベースのマイクロコントローラのツールキットプログラミングユーティリティがマキシムから入手可能です。インシステムプログラム可能な組込み型の設計は出荷直前に一般製品をソフトウェアでカスタマイズすることが可能です。この機能は、また、既存のアプリケーションを逆アセンブルすることなく、アップグレードすることを可能とすることによってライフサイクルコストを削減します。DS5002FPおよびDS5250のようなセキュアマイクロコントローラは、この機能を使って顧客の専用ソフトウェアコードをアプリケーションにロードするために使うことができて、それが自動的に暗号化されるので、権限を持たないアクセスから保護されます。

はじめに

マキシムの8051をベースとしたマイクロコントローラファミリの多くは、一般に利用可能なRS-232シリアルインタフェース経由でインシステムプログラミングをサポートします。インシステムプログラミングは組込みシステムを物理的な代替メモリに逆アセンブルすることなくプログラムまたはデータメモリをモディファイすることができることを意味します。使い易いことと多様性が大きな特長であることに加えて、この機能はいかなる組込み型の設計においても次に示す多様な特長を備えています:
  • ハードウェアを工場で組み立ててストックし出荷直前にソフトウェアカスタマイズすることを可能とする。
  • ソフウェア更新必要時、現場でユニットを逆アセンブルする高いコストを削減することができる。
  • 物理的にアクセスすることが不可能である場所においてソフトウェアのアップグレードを可能とする。
  • 専用のコンフィギュレーションおよびステータスレジスタにアクセスする。
  • メモリの暗号化を行うセキュアマイクロコントローラにソフトウェアをローディングすることを可能とする。
この機能を内蔵した製品には次のものがあります:
セキュアマイクロコントローラモジュール:DS2250、DS2250T、DS2251T、DS2252T、 DS5000、DS5000T
セキュアマイクロプロセッサ:DS5000FP、DS5001FP、DS5002FP、DS5002FPM
高速セキュアマイクロプロセッサ:DS5240、DS5250
ネットワーク用マイクロプロセッサ:DS80C400
超高速フラッシュマイクロコントローラ:DS89C420、DS89C430、DS89C440、DS89C450
ブートストラップローダは1つ以上のデバイスの端子を規定された状態にすることによって呼び出されます。アクティブにされると、デバイスはローダ用のソフトウェアの実行をデバイス内部の専用ROMから開始します。キャリッジリターン文字を検出すると、シリアルポートは自動速度調整機能を実行し、自身の速度をホストのボーレートに合わせます。ホスト(通常はPC)とターゲット間の通信はほとんどのPCに見られるRS-232インタフェース経由で行われ、高価な特別のハードウェアを必要としません。ブートローダで使われるプロトコルは単純であり、関連するステータス情報とファイル転送処理ンを持つ1個以上のASCII文字コマンドから構成されます。通信はマキシムからの無料マイクロコントローラツールキット通信ソフトウェアまたは他のシリアル通信用ツールを使って実行することができます。

これらのデバイスの大部分は、また、インアプリケーションプログラミングをサポートし、アプリケーションソフトウェアの制御下で、デバイスがそのプログラムメモリを変更することを可能とします。このようにして、設計は、その主機能を実行しつつ、同時にソフトウェアの更新を可能とします。詳細に関しては、個々の製品のデータシートまたはユーザーズガイドに掲載されています。

このドキュメントは個々のデバイスのデータシートおよび/またはユーザガイドに用意された情報を補足することが目的です。このアプリケーションノートを確認しながら、必要に応じてこれらのドキュメントを参照してください。

物理的接続

ブートストラップローダは表1に示すように1個以上の端子を定められた状態にすることによって呼び出されます。この時点で、アプリケーションソフトウェアの実行は終了され、プログラム制御は内部ブートストラップROMに移ります。ブートストラップローダの起動に関連した誤りがあるかどうかは、必ず該当する正誤表をチェックしてください。

表1. ブートストラップローダの起動入力
DEVICE RST PSEN EA PROG P1.7 P2.7 AND P2.6
DS2250(T) 1 0 N/A N/A N/A Unconnected or logic 1
DS5000(T)
DS5000FP
DS2251T N/A N/A N/A 0 N/A Unconnected or logic 1
DS2252T
DS5001FP
DS5002FP/FPM
DS5240
DS5250
DS80C400 N/A N/A N/A N/A 1 N/A
DS89C420 1 0 0 N/A N/A N/A
DS89C430
DS89C440
DS89C450

ブートローダを呼び出すための物理的接続と方法はデバイスファミリによってわずかに異なりますが、同じ基本要素を含んでいます。PCに接続する場合、図示されるようにホストとターゲットマイクロコントローラ間の通信と制御信号のインタフェースを取るためにRS-232のCMOSへのレベル変換が必要です。どんなRS-232トランスレータの同等品でも、図示されたものと代替することが可能です。以下に示す図はマイクロコントローラのDTR信号をロード/ランモードの選択用に使用します。

設計によっては、トライステート出力を備えるバスバッファを使用します。DTRがアクティブ(ロー状態)の場合、バッファのターンオンが許可され、ブートローダを起動する複数の信号を駆動します。このバスバッファは、回路図の中では、「HC/AC125」と一般的な名称としています。その理由は74HC125、54HC125、74AC125、74LS125などのどのようなロジックファミリでも良いからです。これらのデバイスは汎用であり、Motorola、 Fairchild Semiconductor、東芝、ST Microelectronics、およびその他多くの汎用ロジックの製造業者から入手できるはずです。

その他のデバイスの場合は、1個の信号のみでブートローダを起動します。従ってこのバッファを必要としません。このケースでは、DTR信号をターゲットのマイクロコントローラの端子に直接、接続して、ブートローダを起動することができます。

図1. 物理的接続、DS89C420/430/440/450をベースとした設計
図1. 物理的接続、DS89C430/DS89C450をベースとした設計

図2. 物理的接続、DS5240/50及びDS5001/2FPをベースとした設計
図2. 物理的接続、DS5250およびDS5001/DS5002FPをベースとした設計

図3. 物理的接続、DS5000をベースとした設計
図3. 物理的接続、DS5000をベースとした設計

ブートローダはタイムベースとしてXTAL1/XTAL2端子に接続されたクロック源を用います。水晶振動子が使われている場合は、それはデバイスのデータシートに記載された推奨(基本モードの共振、パラレルATカット、負荷容量の大きさなど)に適合しなければなりません。ブートローダは自動速度調整の測定を内部タイマに依存するため、水晶がブートローダに適合するためには周波数レンジに関して幾つかの制限があります。ブートローダに適合するクロック周波数レンジに関しては、個々のデバイスのユーザガイドを参照してください。

ソフトウェア

ブートローダが起動された後、マイクロコントローラはシリアルポートをポーリングして、8ビットデータ、パリティなし、1ストップビット(8-N-1)で表されるキャリッジリターン(0Dh)文字を探索します。ブートストラップローダのソフトウェアはその文字の中のハイとローのスペースの長さを測定して、ホストシステムのボーレートを決定します。この自動速度調整機能はブートローダが固定のボーレートに制限されることなく、多数のホストシステムと通信することができます。

ブートストラップローダがいったん、呼び出され、ボーレートが計算されると、デバイスはデバイスの識別用の登録用フラグ(Sign-on banner)を送信します。その後、デバイスはプロンプト文字を表示してコマンドを待機します。この場合も、コマンドセットはデバイスファミリ間で異なりますが、それらは、普通は1つのASCII文字であり、Load、verify、およびerase memoryコマンドに使われる文字を必ず含みます。コマンドリストは個々のデバイスのユーザガイドをご覧ください。

ブートストラップローダインタフェースは単純なので、PCとターゲットのマイクロコントローラとの間の通信を行うために幾つかの方法が許されます。最も簡単な方法はマキシムのマイクロコントローラツールキット(MTK2)を使うことです。MTK2はマキシムのマイクロコントローラの大部分のROM/ブートストラップローダと通信を行うPCユーティリティです。それは高度な性能を備えたフロントエンドであり、ターゲットを構築し、コードのアップロードとダウンロードを行い、特別な機能を構築します。

ユーザはメインウィンドウを使って、ターゲットコントローラへ直接、コマンドをタイプインすることができます。ターゲットローダによってサポートされている多くのコマンドはMTK2のメインウィンドウを使って、直接入力することが可能です。特別な通信プロトコルを必要とするファイルに関連するコマンドが特別にサポートされています。

図4. マイクロコントローラツールキット(MTK2)
図4. マイクロコントローラツールキット(MTK2)

もしターゲットコントローラがDS5000FP、DS5001FP、DS5002FP、またはDS80C400に基づいたものであれば、通信はProcomm PlusまたはHyperterminalのような簡単なターミナルエミュレータを使うことも、もちろん可能です。マキシムの他の8051ベースのマイクロコントローラは、プロトコルアウェア(protocol-aware)アプリケーションを必要とするインタラクティブローディングプロトコルを使います。

通信の問題をデバッグする

以下に示す内容はブートストラップローダ経由でマイクロコントローラと通信を行う場合に起こる最も一般的な問題のリストです。

クロック周波数が間違っている

間違った周波数のクロックでデバイスを動作させると、ボーレートの自動速度調整機能が働かない可能性があります。動作が保証されている周波数はユーザガイドによってチェックしてください。もし、周波数依存の問題が疑われる場合は、ブートローダに関する問題は11.0592MHzのクロックを使ってデバッグすることを強く推奨します。この周波数は標準的なマイクロコントローラの動作周波数であり、ほとんど全ての標準ボーレートを発生します。

他のアプリケーションがCOMポートに干渉している

バックグランドのアプリケーションがPCの選択されたCOMポートを意図的に、または意図せず干渉している可能性があります。競合する可能性があるソースはタスクマネジャーをチェックしてください。

選択した動作周波数に対してPCのボーレートが速すぎる

遅い動作周波数(5MHz以下)では、デバイスは高速のボーレートに自動速度調整することができないか、またはそのバッファをオーバランさせることなく、処理することができないかもしれません。ボーレートを下げて、試してみてください。

マイクロコントローラが動作しない

観測された障害がブートローダに関することではなく、マイクロコントローラ自身である可能性があります。以下に述べることは、システムレベルの問題をトラブルシュートするための診断用のチェックリストです。
  • デバイスの全ての電源端子に正しい電圧が供給されていますか?基板上のトレースではなく、正確に電圧を読み取るためにマイクロコントローラの実際の端子の電圧をチェックしてください。
  • アクティブローEA端子がロー状態になっている場合は、アドレス端子がトグル(オン/オフ)しますか?多くのデバイスではアクティブローEAをローにすると、デバイスは外部アクセスモードとなり、そのため、デバイスは命令を外部バスから取ってきて実行するようになります。デバイスが正しいアドレスを発生しているかどうかは、すぐには分かりませんが、アドレスバスが動作していることは、マイクロコントローラが動作状態にあることを示します。
  • あるデバイスではALE端子は初期状態ではトグルするようになっています。それはアクティブですか?それは期待する周波数と合っていますか?大部分のデバイスでは、ALE信号は発振周波数の分周で発振します。
  • デバイスは十分なデカップリングコンデンサを備えていますか?大部分のマキシムのマイクロコントローラは、従来製品よりも高速の内部クロック速度で動作します。ドロップイン設計またはアップグレードは性能の向上に適合させるために、余分にコンデンサを必要とする可能性があります。

マイクロコントローラの旧ツールキット

あなたはマイクロコントローラツールキットソフトウェアの最新版を使用していますか?

最新のマイクロコントローラツールキットのプログラミングソフトウェアをダウンロードしてください。

正誤表の状態

関連する正誤表があるかを該当する正誤表シートでチェックしましたか?非常に稀なことですが、デバイスの改版により過去に発行された仕様と異なるブートストラップローダとなっている可能性があります。

ケーブルが長すぎる

ホストコンピュータとターゲットコンピュータとの間のケーブルが長すぎると、信号品質が悪化する可能性があります。どのくらい長いケーブルまで問題がないかの一般的ルールはありませんが、シールドケーブルを使用するか、モータやテスラコイルのようなノイズ源から遠ざけることは、効果があるはずです。長いケーブルの影響はボーレートを遅くすることによって緩和されます。