• 検索結果がありません。

MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 ( テクニック編 ) Rev: PIC Trout 今回は 下記の2 件について説明します 1) CCSv5 を使用して MSP430 の Flash Memory 内容を

N/A
N/A
Protected

Academic year: 2021

シェア "MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 ( テクニック編 ) Rev: PIC Trout 今回は 下記の2 件について説明します 1) CCSv5 を使用して MSP430 の Flash Memory 内容を"

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

1

MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 (テクニック編)

Rev:01 10.4.2013 PIC Trout

今回は、下記の2件について説明します。

1) CCSv5 を使用して、MSP430 の Flash Memory 内容を確認する方法

 JTAG アクセスができるデバイス(セキュリティ Fuse 断ではできません)に対して、CCSv5-JTAG から Flash Memory 内容を 見る方法を説明します。

 Flash Memory 内容を確認する方法は、次の2ケースを例に説明します。

① 既知 Project(ソースコード、オブジェクトコード.out がある)の Flash Memory 内容を確認する方法。 ② 内容不明デバイスの Flash Memory 内容を調べる方法。 2) プログラムに version を組み込み、これを確認する方法  いくつか種類の異なるプログラムあるいは、派生 Version のプログラムを生産する場合、プログラムに事前に Version 情報 を組み込んでおき、後日内容不明デバイスの Version を確認することができます。 次の2ケースを例に説明します。 ① InfoD 領域に Version を記録する方法 ② プログラムに const データとして Version を記録する方法

目 次

1 既知 Project の Flash Memory 内容を確認する方法

2 内容不明デバイスの Flash Memory 内容を調べる方法

3 infoD 領域に Version を記録する方法

(2)

2

1 既知 Project の Flash Memory 内容を確認する方法

CCSv5 を使用して、指定 Project の Flash Memory 内容を確認する操作法を説明します。

操作環境: LaunchPad+G2553、CCSv5.4 評価ボード+FET430UIF を使用しても同じ操作です。 Example として、CCSv5 の ①Basic Examples: Blink The LED を使用します。

1-1 Basic Examples: Blink The LED プロジェクトの生成とプログラム書き込み

 G2553_LED プロジェクトを作り、①Basic Examples: Blink The LED を組み込んで、Build(ハンマーのマーク)します。

 リンクマップ G2553_LED\Debug\G2553_LED.mapを開き、C 初期化ルーチン_c_int00:0xC080 の配置を確認します。 これが最初に走る番地となり Reset Vector:0xFFFE 番地に格納されます。

図1-1

 Debug(虫マーク)でプログラムをターゲットに書き込みます。

1-2 Memory 内容の表示

 View -> Memory Browser を開き、表示アドレス欄に 0xfffe と入力して GO すると 0xFFFE:0xC080 を確認できます。 これが先ほどリンクマップで確認した C 初期化ルーチン_c_int00:0xC080 が、reset で開始するアドレスとなっています。

図1-2

・ 次に Flash Memory 開始番地(xC000)近辺の Memory 内容を表示してみます。 ・ 表示開始番地(0xc000)と表示 Style(16-Bit Hex)を指定して、Go で表示します。 ・ 0xFFFF が連続する部分は erase された状態、プログラムが書かれていない状態です。 ・ 0x3FFF が連続する部分は、read プロテクト(BSL など)された特殊な領域です。

図1-3

(3)

3

1-3 プログラムロードせずに Debugger を立ち上げる

 この説明書の重要な「テクニック」部分です。 「2 内容不明デバイスの Flash Memory 内容を調べる方法」でもこのテクニッ クを使います。

 Editor メニューから View-> Target Configuration と操作すると、画面右側に下記の window が現れます。 -> G2553_LED -> target Configs -> MSP430G2553.ccxml を表示します。

図1-4

 MSP430G2553.ccxml を右クリックして、サブメニューのLaunch Selected Configuration をクリックします。 !! 今回はDebugで Program を書いてはいけません !!

図1-5

 View->Disassemblyの window を開くとて、アセンブラ表記が出てきます。

下記の SP 設定と WDT 停止(&Watchdog_timer_WDTCTL) を目印に main()の開始部分(0xC05E)を探します。

(4)

4

1-4 シンボル情報をロードする

 シンボル情報のみをロードして、アセンブル表記がどう変わるか見てみます。 Run-> Load -> Load Symbol を指定

図1-7  G2553_LED.out を確認して OK 図1-8 ・ View->Disassemblyを指定すると、コードはシンボル情報とソースコード情報とリンクされて表示されます。 図1-9

1-5 Memory 内容を保存、復元する方法

・ Debugger メニューの Tool -> Save Memory、Load Memory、Fill Memory を使用して指定 Memory 領域を操作すること ができます。

・ 格納 data 形式は、固有の xxx.dat(xxx.txt ではありません)となり CCSv5 内部でのみ利用可能です。 ・ Format:8,16,32bits と Start Address、Length(Format 指定した単位を word として)を指定します。 ・ Load のときは、✔Use the header information….を使用すれば、Save した条件で load できます。 ・ 詳細は、実際に試してご確認ください。

(5)

5

2 内容不明デバイスの Flash Memory 内容を調べる方法

ダミープロジェクトの Example として ②Empty Projects: (with main.c) を使用します。

2-1 ダミーEmpty Projects: (with main.c) の生成

 ダミーとして G2553_emp プロジェクトを作り、②Empty Projects: (with main.c)を組み込んでBuildします。  リンクマップ G2553_emp\Debug\G2553_emp.map を開き、_c_int00:0xC05E に変わっていることを確認します。

図2-1

2-2 Empty Project の configuration 情報を使用してボードに接続

 このダミーを使い 「1-3 プログラムロードせずに Debugger を立ち上げる」 のテクニックでボードに接続します。 デバイス種別( G2553 )は、同じでなければなりません!

 View-> Target Configuration と操作して、表示された画面右側の window を操作して、 -> G2553_emp -> target Configs -> MSP430G2553.ccxml を表示します。

図2-2

 MSP430G2553.ccxml を右クリックして、サブメニューのLaunch Selected Configuration をクリックします。 !! Debug で Program を書いてはいけません !!

(6)

6

・ 下記のデバッガ画面に切り替わりますので、ターゲットボードにConnectします。

Connectを忘れると、以降の開始番地や Memory 内容が表示されません!

図2-4

2-3 Flash Memory 内容の調査

・ ボードに connect すると、Debug window に開始番地(0xC080)が表示されます。

つまり G2553_emp _c_int00:0xC05E ではなく、G2553_LED _c_int00:0xC080 が Flash Memory に格納されていることが 解ります。

図2-5

 この開始番地の相違は、プログラムの識別にも使えます。

過去の Project のリンクマップを調べ、_c_int00:0xC080 のプロジェクトが見つかれば、それが候補になります。

 View -> Memory Browser で 0xC000 を見れば、図1-3 と同じ G2553_LED の Flash Memory 内容が確認できます。 開発した Project に TI-TXT の xxxx.txt を残しておけば、その内容と下記の内容を照合して識別することができます。

図2-6

 View->Disassemblyを指定するとコードが表示されます。 ただし、シンボル情報とソースコード情報がありませんので、アセン ブルコード変換のみとなります。 図1-6 と同じ内容になります。

(7)

7

2-4 まとめ

 内容を確認したいデバイスがあった時、「2 内容不明デバイスの Flash Memory 内容を調べる方法」 を使用して、同一デ バイスのダミー(例 G2553_emp)の configuration(xxxx.ccxml)を使用して、Flash Memory 内容を調べることができます。

 過去の Project のリンクマップを調べ、開始番地 _c_int00:0xZZZZ と合致するものが有るか探して、プロジェクトを絞り込む 方法があります。

 過去の Project のTI-TXT(xxxx.txt)の内容と、View -> Memory Browserで調べた Flash Memory 内容が合致するか照 合する方法があります。

 ただし、この方法では調査工数が多くなりますので、プログラムに識別の Version 情報を書き込んでおく方法について、次項に 説明いたします。

 お気づきかと思いますが、これはリバースエンジニアリングによりコード解読されるリスクがありことを示します。

第三者によるリバースエンジニアリングを回避したい場合は、JTAG フューズを断(Device Secure/Protected)にすることで防止 できます。

ただし、フューズを元に戻すことはできませんので、以降は JTAG アクセスができなくなり、Secure 状態となります。

FRAM シリーズはJTAG パスワードで Device Secure に設定できます。 CCSv5でパスワード設定・記録しておけば、CCSv5 でアクセスできます。

(8)

8

3 infoD 領域に Version 番号を記録する方法

 この方法は infoD の固定番地に書くことができますので、確認が容易です。

 この例では、const int で Version を組み込んでいますが、 const char 配列=“文字” でも可能です。  先に説明しました G2553_LED ソースコードに、下記の部分を追加します。

--- #pragma DATA_SECTION(Version,".infoD"); volatile const int Version =0x1234; int main(void) {

int V1; // Note! V1 = Version; // Note! --- ** 最後の2行 ( Note! ) は、最適化により Version 定数が無効化(無視される)のを防止しています。 リンクマップで、InfoD に Version 定数が配置されているか確認してください。 ** 図3-1

 プロジェクトをBuild -> Debug して、プログラムを Flash Memory に書き込みます。

 前記の 「2-2 Empty Project の configuration 情報を使用してボードに接続」 の方法でボードに接続します。  View -> Memory Browser で InfoD 先頭(0x1000~)を表示して 0x1234 と書き込まれているか確認します。

(9)

9

4 プログラムに const データとして Version を記録する方法

 この方法はプログラムに const char 配列=“文字列” で書き込みます。 const 定数は Flash Memory の code 領域末尾 に配置されます。

 View -> Memory Browser: character表示にして、code 領域末尾側からこの“文字列”を探します。  先に説明しました G2553_LED ソースコードに、下記の部分を追加します。

---

volatile const char Version[] = "version:1234"; int main(void) {

char V1; // Note! V1 = Version[0]; // Note! --- ** 最後の2行 ( Note! ) は、最適化により Version 定数が無効化(無視される)のを防止しています。 リンクマップで、Version 定数が配置されているか確認してください。 ** 図4-1

 プロジェクトをBuild->Debugして、プログラムを Flash Memory に書き込みます。

 前記の 「2-2 Empty Project の configuration 情報を使用してボードに接続」 の方法でボードに接続します。  View -> Memory Browser を開き、アドレス 0xC000 とstyle:Character を指定して Go。

 文字列“version:”を探します。

図4-2

 実際の大きなプログラムの場合は、アドレス 0xFF00、style:16-Bit Hex 表示で Flash Memory の後ろ側から 0xFFFF でない つまり code や const 定数が書かれている部分を見つけてから、style:Character にして探すと速く見つけられます。

参照

関連したドキュメント

 プログラムの内容としては、①各センターからの報 告・組織のあり方 ②被害者支援の原点を考える ③事例 を通して ④最近の法律等 ⑤関係機関との連携

※ 2 既に提出しており、記載内容に変更がない場合は添付不要

 「フロン排出抑制法の 改正で、フロンが使え なくなるので、フロン から別のガスに入れ替 えたほうがいい」と偽

〇齋藤会長代理 ありがとうございました。.

原則としてメール等にて,理由を明 記した上で返却いたします。内容を ご確認の上,再申込をお願いいた

Should Buyer purchase or use SCILLC products for any such unintended or unauthorized application, Buyer shall indemnify and hold SCILLC and its officers, employees,

Should Buyer purchase or use ON Semiconductor products for any such unintended or unauthorized application, Buyer shall indemnify and hold ON Semiconductor and its officers,

   手続内容(タスク)の鍵がかかっていること、反映日(完了日)に 日付が入っていることを確認する。また、登録したメールアドレ