Comments
Description
Transcript
AN-724 - Analog Devices
AN-724 アプリケーション・ノート ADUC702X シリアル・ダウンロード・プロトコル Aude Richard 著 はじめに 内蔵ローダはデバイスの UART を設定して、特定のシリアル・ダ ウンロード・プロトコルを使ってホスト・マシンと交信して、デー タのフラッシュ/EE メモリ・スペースへのダウンロードを管理しま す。ダウンロードするプログラム・データのフォーマットでは、リ トル・エンディアンを使用する必要があります。 シリアル・ダウ ンロード・モードは、デバイスの標準電源定格内(2.7 V~3.6 V)で 動作させる必要があります。特定のプログラミング用高電圧は、 チップ内で発生するため不要です。図 1 に、評価ボードでシリア ル・ダウンロード・モードを開始させる方法を示します。 MicroConverter®製品ファミリーの重要な機能は、コードを内蔵の フラッシュ/EE プログラム・メモリへイン・サーキットでダウン ロードするデバイスの機能です。イン・サーキットでのコードのダ ウンロードは、デバイスの UART シリアル・ポートを使用して行 われるため、一般にシリアル・ダウンロードと呼ばれています。シ リアル・ダウンロード機能を使うと、ターゲット・システムに部品 を直接ハンダ付けした状態で再書込みできるため、外付けのデバイ ス書込器が不要になります。また、シリアル・ダウンロード機能を 使うと、現場でのシステム・アップグレードも可能になります。必 要なものは、MicroConverter に対するシリアル・ポート・アクセス だけです。これは、メーカーがデバイスを交換することなく、現場 でシステム・ファームウェアをアップグレードできることを意味し ます。 また、アナログ・デバイセズは QuickStartTM 開発ツールとして、 Windows®プログラム(C:\ADuC702x\Download\ ARMWSD.exe)も提 供しています。このプログラムを使うと、ユーザーはコードを PC シリアル・ポート COM1、COM 2、COM 3、または COM 4 から MicroConverter へダウンロードすることができます。ただし、ホス ト・マシンがこのアプリケーション・ノートで説明するシリアル・ ダウンロード・プロトコルに準拠する限り、任意のマスター・ホス ト・マシン(PC、マイクロコントローラ、または DSP)から MicroConverter へダウンロードできることに注意してください。 すべての MicroConverter デバイスは、パワーオン時または外部リ セット信号入力時の特定のピン設定を使って、シリアル・ダウン ロード・モードに設定することができます。ADuC702x ファミリー の MicroConverter の場合、抵抗(1 kΩ )を介して P0.0 入力ピンをロー レベルに接続します。パワーオン時またはハード・リセット入力時 にデバイスがこの状態がを検出すると、デバイスはシリアル・ダウ ンロード・モードになります。このモードで、内蔵の常駐ローダ・ ルーチンが起動されます。 (B) PUSH S2 S3 S2 (RESET = 1) (SERIAL DOWNLOAD = 1) (C) PUSH S3 S3 S2 (RESET = 1) (SERIAL DOWNLOAD = 0) (D) RELEASE S3 S3 S2 (RESET = 1) (SERIAL DOWNLOAD = 0) S3 S2 (RESET = 0) (SERIAL DOWNLOAD = 0) (E) RELEASE S2 S3 S2 (RESET = 1) (SERIAL DOWNLOAD = 1) 04844-001 (A) S3 AND S2 RELEASED 図 1.MicroConverter のシリアル・ダウンロード・モード設定 Rev. B 本 社/〒105-6891 東京都港区海岸 1-16-1 ニューピア竹芝サウスタワービル 電話 03(5402)8200 大阪営業所/〒532-0003 大阪府大阪市淀川区宮原 3-5-36 新大阪 MT ビル 2 号 電話 06(6350)6868 AN-724 このアプリケーション・ノートでは、MicroConverter シリアル・ダ ウンロード・プロトコルについて説明し、エンド・ユーザーがこの プロトコル(組込み型ホストと組込み型 MicroConverter との間)を理 解して、エンド・ターゲット・システムに実装できるようにします。 紛らわしさを避けるため、 用語「ホスト」は、データを MicroConverter へダウンロードするホスト・マシン(PC、マイクロコントローラ、 または DSP)を意味するものと定義します。用語「ローダ」は、 MicroConverter に内蔵のシリアル・ダウンロード・ファームウェア を意味するものと定義します。 MicroConverter ローダの実行 ADuC702x MicroConverter 上のローダは、抵抗 (代表値 1 kΩ のプル ダウン)を介してシリアル・ダウンロード P0.0 ピンをロー・レベル に接続してデバイスをリセット (デバイス自体の RESET 入力ピン をトグル、または電源のオン/オフによりデバイスをリセット)する ことにより起動されます。 物理インターフェース ローダは起動されると、ホストから同期用のバック・スペース(BS = 0x08)文字が送信されてくるのを待ちます。ローダはこの文字のタ イミングを計測して、その結果を使って、MicroConverter の UART シリアル・ポートを、送信または受信、ホストと同じボー・レート、 8 データ・ビット、パリティなしに設定します。ボー・レートは、 600 bps~115200 bps の範囲である必要があります。ローダはバッ ク・スペースを受信すると、直ちに次に示す 24 バイト ID データ・ パケットを送信します。 15 バイト = 製品識別マーク 3 バイト = ハードウェアとファームウェアのバージョン番号 次のフィールドは、データ 1 (コマンド機能)を含む合計データ・バ イト数です。最小データ・バイト数は 5 で、これはコマンド機能と アドレスに該当します。最大許容データ・バイト数は 255 で、これ はコマンド機能、4 バイト・アドレス、250 バイトのデータに該当 します。 コマンド機能フィールド(データ 1) コマンド機能フィールドは、データ・パケットの機能を指定します。 5 個の有効コマンド機能の内の 1 つを指定します。5 個のコマンド 機能は、5 文字の ASCII 文字(E、W、V、P、または R)の内の 1 文 字で指定されます。データ・パケット・コマンド機能の一覧を表 2 に示します。 アドレス・フィールド(データ 2~データ 5) アドレス・フィールドには、32 ビットのアドレス、h、u、m、l が 含まれ、MSB が h ロケーションに、LSB が l ロケーションに配置さ れます。 データ・バイト・フィールド(データ 6~データ 255) ユーザー・コードがバイト単位でダウンロードされ検証されます。 データ・バイト・フィールドには、最大 250 のデータ・バイトが含 まれます。 データは通常 Intel®拡張 16 バイト・レコード・フォーマット(この アプリケーション・ノートの終わりに記載する(Intel 拡張 16 進 フォーマット・セクションを参照)から分解されて、ホストにより ローダへ送信する前に、表 2.に説明するデータ・パケットの一部と して再組立されます。 チェックサム・フィールド 4 バイト = 予約済み データ・パケットのチェックサムがこのフィールドに書き込まれま す。バイト数フィールドの 16 進値と、データ 1~データ 255(存在 するだけの数)のフィールドの 16 進値の和から、2 の補数チェック サムが計算されます。チェックサムは、この和の 2 の補数値になり ます。したがって、データ・バイト数からチェックサムまでのすべ てのバイトの和の LSB は 0 である必要があります。これは、数学 的に次のように表されます。 2 バイト = ライン・フィードとキャリッジ・リターン “ADuC702x” IS THE PRODUCT ID データ・バイト数フィールド “–62” CORRESPONDS TO THE MEMORY SIZE MODEL “ADuC702x<space><space><space>-62<space>I31<space><space><space><space><\n><\r>” 255 CS = 0x00 − (データ・バイト数 + 04844-002 “I31” MEANS A SILICON REV. I AND A VERSION 3 LOADER. “1” IS THE LOADER’S VERSION REVISION NUMBER. データ・バイト N) N 1 別の表現では、開始 ID を除くすべてのバイトの 8 ビット和は、00h になります。 図 2.ID データ・パケット データ・トランスポート・パケット・フォーマットの定義 コマンドの確認 UART の設定が終わると、データ転送が開始できます。一般的な通 信データ・トランスポート・パケット・フォーマットを表 1 に示し ます。 ローダ・ルーチンは、各データ・パケットに対して BEL (0x07)を否 定応答として、または ACK (0x06)を肯定応答として発行します。 パケット開始 ID フィールド 最初のフィールドはパケット開始 ID フィールドで、2 個の開始文 字(0x07 と 0x0E)が含まれます。これらのバイトは固定で、ローダ が有効なデータ・パケットの開始を検出する際に使います。 ローダが不正なチェックサムまたは無効なアドレスを受信したと き、ローダは BEL を送信します。古いデータ(未消去)の重ね書きで 新しいデータをダウンロードしても、ローダは警告を発しません。 PC インタフェース側は、コードがダウンロードされるすべてのロ ケーションが消去されることに注意する必要があります。 表 1. データ・トランスポート・パケットのフォーマット Start ID 0x07 Rev. B 0x0E No. of Data Bytes Data 1 CMD Data 2 to Data 5 (Address: h, u, m, l) Data x (x = 6 to 255) Checksum 5 to 255 E, W, V, P, or R h, u, m, l xx CS -2- AN-724 表 2.データ・パケット・コマンドの機能 Command Functions Command Byte in Data 1 Field Loader Positive Acknowledge Loader Negative Acknowledge Erase Page Write Verify Protect Run (Jump to User Code) E (0x45) W (0x57) V (0x56) P (0x50) R (0x52) ACK (0x06) ACK (0x06) ACK (0x06) ACK (0x06) ACK (0x06) BEL (0x07) BEL (0x07) BEL (0x07) BEL (0x07) BEL (0x07) 表 3.フラッシュ/EE メモリ消去コマンド Start ID 0x07 0x0E No. of Data Bytes Data 1 CMD Data 2 to Data 5 (Address: h, u, m, l) Data 6 (pages) Checksum 6 E (0x45) h, u, m, l x pages (1 to 124) CS 表 4.フラッシュ/EE メモリ・プログラム・コマンド Start ID 0x07 0x0E No. of Data Bytes Data 1 CMD Data 2 to Data 5 (Address: h, u, m, l) Data x (x = 1 to 250) Checksum 5+x (6 to 255) W (0x57) h, u, m, l Data bytes CS 表 5. 検証コマンド、ビット変更 Original Bits Transmitted Bits Restored Bits 7 6 5 4 3 2 1 0 4 3 2 1 0 7 6 5 7 6 5 4 3 2 1 0 消去コマンド 検証コマンド 消去コマンドを使うと、ユーザはデータ 2~データ 5 で指定される 特定のページのフラッシュ/EE を消去することができます。アドレ スは、ページの開始に丸め処理されます。このコマンドには消去す るページ数も含まれます。アドレスが 0x00000000 で、かつページ 数が 0x00 の場合、ローダはこのコマンドをマス消去コマンドと解 釈して、ユーザー・コード・スペース全体とフラッシュ/EE 保護を 消去します。消去コマンドのデータ・パケットを表 3 に示します。 検証コマンドは、表 5 に示すようにほとんど書込みコマンドと同じ です。コマンド・フィールドは V (0x56)ですが、エラー検出のチャ ンスを増やすために、データ・バイトが変更されています。ローレ ベルの 5 ビットがハイ側へ 5 ビット・シフトされ、ハイレベルの 3 ビットがロー側へ 3 ビット・シフトされます。 書込みコマンド 書込みコマンドには、データ・バイト数(5 + x)、コマンド、書き込 む先頭データ・バイトのアドレス、書き込むデータ・バイトが含ま れます。バイトは、フラッシュ/EE に書き込まれます。チェックサ ムが不正または受信したアドレスが範囲外の場合、ローダは BEL を送信します。ホストがローダから BEL を受信すると、ダウンロー ド・プロセスが停止されて、ダウンロード・シーケンス全体が再起 動されます。 Rev. B ローダが正しいビット・シーケンスに戻した後に、その値をフラッ シュ内の値と比較します。比較結果が正しく、かつチェックサムが 正しい場合は、ACK (0x06)が返されます。その他の場合には、BEL (0x07)が返されます。 -3- AN-724 フラッシュ/EE メモリ保護コマンド このコマンドを使うとき、次の 3 ステップ・シーケンスに従います。 1. コマンドを開始します。タイプは 0x00 である必要があり、 「huml」は任意の値にします。 2. 保護対象ページ・グループのアドレスを送信します。各ペー ジ・グループに対してこのステップを繰り返します。タイプ を 0x0F にします。 3. 「huml」内でキーを送信し、タイプを 0x01 にします。FEEADR に値「hu」を、FEEDAT に値「ml」を、それぞれ設定します。 キーが必要ない場合は、「huml」を 0xFFFFFFFF にします。 たとえば、ページ 0~ページ 7 を書込みから保護する場合は、読み 出し保護を設定して、キー0x12345678 を使います。次のコマンド を送信します。 1. シーケンス開始: 0x07 0x0E 0x06 0x50 0xXXXXXXXX 0x00 CS 2. 保護: 0x07 0x0E 0x06 0x50 0x00000000 0x0F CS (ページ 0~ページ 3) 0x07 0x0E 0x06 0x50 0x00000200 0x0F CS (ページ 4~ページ 7) 0x07 0x0E 0x06 0x50 0x0000F800 0x0F CS (読み出し保護) 3. キーおよびシーケンス終了: 0x07 0x0E 0x06 0x50 0x12345678 0x01 CS 保護コマンドはローダのレビジョン 0 以後のバージョンのみで使 用可能なことに注意してください。レビジョン 0 では、FEEADR = ml かつ FEEDAT = ml です。ローダのそれより後バージョンでは、 FEEADR = hu です。 このプロトコルでは、フラッシュ/EE メモリを非保護にすることは できません。保護を解除するときは、マス消去コマンドを使います。 リモート実行コマンド ホストがすべてのデータ・パケットをローダへ送信した後、ホスト は最後のパケットを送信して、ローダにコードの実行を開始させる ことができます。 2 種類のリモート実行があります。 ソフトウェア・リセット(h、u、m、l = 0x1) ユーザー・コードへのジャンプ(h、u、m、l = 0x0) 表 8 に、リモート実行またはリセットの例を示します。ソフトウェ ア・リセットによりすべてのペリフェラルがリセットされるため、 ソフトウェア・リセットの実行が推奨されます。 表 6.フラッシュ/EE メモリ検証コマンド Start ID 0x07 0x0E No. of Data Bytes Data 1 CMD Data 2 to Data 5 (Address: h, u, m, l) Data x (x = 1 to 250) Checksum 5+x (6 to 255) V (0x56) h, u, m, l Modified data bytes CS No. of Data Bytes Data 1 CMD Data 2 to Data 5 (Address: h, u, m, l) Data 6 Checksum 0x06 P (0x50) h, u, m, l Type CS 表 7.フラッシュ/EE メモリ保護コマンド Start ID 0x07 0x0E 表 8.リモート実行コマンド Packet ID No. of Data Bytes Data 1 CMD Data 2 to Data 5 (Address: h, u, m, l) Checksum 0x07 0x05 R (0x52) h, u, m, l = 0x1 0xA8 Rev. B 0x0E -4- AN-724 Intel 拡張 16 進フォーマット Intel 拡張 16 進フォーマットは、表示可能 ASCII または印字可能 フォーマットのマシン言語を保存する規格です。Hex 8 フォーマッ トに似ていますが、Intel 拡張リニア・アドレス・レコードは、デー タ・アドレスの上位 16 ビットも設定する出力である点が異なりま す。各データ・レコードはコロンで始まり、その後ろに 8 文字のプ レフィックスが続き、2 文字のチェックサムで終わります。各レ コードのフォーマットは次の通りです。 ドの絶対メモリ・アドレスに影響を与えます。拡張セグメント・ア ドレス・レコードはコロン開始文字 (:)で始まり、その後ろにバイ ト・カウント (02)、アドレス (0000)、レコード・タイプ (02)、セグ メント・ベース・アドレスのビット 4~ビット 19 で表した 4 文字 の 16 進値、2 文字のチェックサムが続きます。たとえば、 :02 0000 02 1000 55 開始セグメント・アドレス・レコード :BBAAAATTHHHH....HHHCC ここで、 BB は、2 桁の 16 進バイト・カウントで、行に表示されるデータ・ バイト数を表します。 AAAA は、4 桁の 16 進アドレスで、データ・レコードの開始アド レスを表します。 TT は、次に示す 2 桁のレコード・タイプです。 レコード・タイプ 03 (開始セグメント・アドレス・レコード)は、 オブジェクト・ファイルの実行開始セグメント・ベース・アドレス のビット 4~ビット 19 を指定します。たとえば、 :02 0000 03 0000 55 拡張リニア・アドレス・レコード レコード・タイプ 04 (拡張リニア・アドレス・レコード)は、ディ ステネーション・アドレスのビット 16~ビット 31 です。オブジェ クト・ファイル内の任意の場所に登場することができ、変更される まで、ファイル内のすべての後続データ・レコードの絶対メモリ・ アドレスに影響を与えます。拡張リニア・アドレス・レコードはコ ロン開始文字 (:)で始まり、その後ろにバイト・カウント (02)、ア ドレス (0000)、レコード・タイプ (04)、ディステネーション・アド レスのビット 16~ビット 31 で表した 4 文字の 16 進値、2 文字の チェックサムが続きます。たとえば、 00–データ・レコード 01–End of file レコード 02–拡張セグメント・アドレス・レコード 03–開始セグメント・アドレス・レコード 04–拡張リニア・アドレス・レコード 05–開始リニア・アドレス・レコード :02 0000 04 FFFF 55 HH は、2 桁の 16 進データ・バイトです。 CC は、2 桁の 16 進チェックサムで、レコード内のすべての先行バ イト(プレフィックスを含む)の和の 2 の補数です(すべてのバイト 和+チェックサム= 00)。 開始リニア・アドレス・レコード レコード・タイプ 05 (開始リニア・アドレス・レコード)は、オブ ジェクト・ファイルの実行開始アドレスのビット 16~ビット 31 を 指定します。たとえば、 :02 0000 05 0000 55 レコード・タイプ データ・レコード レコード・タイプ 00 (データ・レコード)は、ファイルのデータを 含むレコードです。データ・レコードはコロンの開始文字(:)で始ま り、その後ろにバイト・カウント、先頭バイトのアドレス、レコー ド・タイプ(00)が続きます。データ・バイトは、レコード・タイプ の後ろに続きます。チェックサムがデータ・バイトの後ろに続き、 レコード内の先行バイト(開始文字を除く)の 2 の補数です。デー タ・レコードの例を次に示します(スペースは分かり安くするため に挿入してあるので、実際のオブジェクト・ファイルからは除く必 要があります): :10 0000 00 FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0 FF :05 0010 00 0102030405 AA エンド・レコード レコード・タイプ 01 (エンド・レコード)は、データ・ファイルの 終わりを示します。エンド・レコードはコロン開始文字(:)で始まり、 その後ろにバイト・カウント(00)、アドレス(0000)、レコード・タ イプ(01)、チェックサム(FF)が続きます。たとえば、 :00 0000 01 FF 拡張セグメント・アドレス・レコード レコード・タイプ 02 (拡張セグメント・アドレス・レコード)は、 セグメント・ベース・アドレスのビット 4~ビット 19 を指定しま す。オブジェクト・ファイル内の任意の場所に登場することができ、 それが変更されるまで、ファイル内のすべての後続データ・レコー Rev. B -5- AN-724 簡単な Intel Hex オブジェクト・ファイル 拡張リニア・アドレス、拡張セグメント・アドレス、データ、エン ドの各レコードを含む Intel Hex オブジェクト・ファイルの例を次 に示します。 制限 :020000040108EA :0200000212FFBD レコード・タイプ 02、タイプ 03、タイプ 04、タイプ 05 は実 装されていません。サポートされていないレコードは無視さ れます。内部フラッシュをアクセスするときは、アドレスの 下位 16 ビットのみを使います。そのため、上位 16 ビットが 変化するレコード・タイプを無視するのが安全です。 :0401000090FFAA5502 1. データ・レコードの拡張リニア・アドレス・オフセット(この 例では 0108)。 :02 0000 04 0108 EA 2. データ・レコードの拡張セグメント・アドレスを求めます(こ の例では 12FF)。 :02 0000 02 12FF BD 3. データ・レコード内のデータのアドレス・オフセットを求め ます(この例では 0100)。 :04 0100 00 90FFAA55 02 4. データ・レコードの先頭バイトの絶対アドレスを計算します。 + 0108 0000 リニア・アドレス・オフセット、16 ビット左シフト + 0001 2FF0 セグメント・アドレス・オフセット、4 ビット左シフト + 0000 0100 データ・レコードからのアドレス・オフセット = 0109 30F0 先頭データ・バイトの 32 ビット・アドレス 5. 計算: 010930F0 90 010930F1 FF 010930F2 AA 010930F3 55 ©2006 Analog Devices, Inc. All rights reserved. Rev. B 商標および登録商標は各社の所有に属します。 -6- AN04844-0-4/06(B)-J :00000001FF