(57)【要約】【課題】プログラムコードの自己診断が特定のコマンド処理時間に影響を与えることを避けるための分散処理、および、本装置がほとんど非活性化〜（再）活性化されない利用シーンにおける、プログラムコード自己診断の定期実施を可能とする携帯可能電子装置およびＩＣカードを提供する。【解決手段】ＲＯＭに格納されたプログラムコードを自己診断する自己診断機能を持つＩＣカードにおいて、プログラムコードの自己診断を１つのコマンド処理内で全て実行するのではなく、複数のコマンド処理に分けて分散実行する。【選択図】図１
2012150606.tif 000002
【特許請求の範囲】
【請求項１】
外部装置と通信を行なうための通信手段と、
この通信手段により受信した外部装置からのコマンドに応じた処理を行なう処理手段と、
この処理手段で処理を行なうために実行されるプログラムコードを記憶する第１の記憶手段と、
前記処理手段の実行結果を一時記憶するための第２の記憶手段と、
前記プログラムコードが破壊されていないことを確認するためのチェックコード期待値をあらかじめ記憶している第３の記憶手段と、
前記通信手段により外部装置から１つ目のコマンドを受信した際、前記第１の記憶手段に記憶されたプログラムコードに対するチェックコードの算出を当該プログラムコードが記憶された先頭アドレスから開始するチェックコード算出手段と、
このチェックコード算出手段によるチェックコードの算出があらかじめ設定されたサイズまで終了したことを判断すると、その時点で全プログラムコードのチェックコード算出が終了していない場合、算出した中間までの中間チェックコードおよびチェックコードの算出が終了した最終チェック済アドレス情報を前記第２の記憶手段に一時記憶した後、前記通信手段により当該コマンドに対する処理結果を前記外部装置へ応答する手段と、
前記１つ目のコマンドに続く後続のコマンドを受信した場合、前記第２の記憶手段に一時記憶した最終チェック済アドレスおよび中間チェックコードを用いて、前記第１の記憶手段に記憶されたチェックコードの算出が終了していないプログラムコードの先頭アドレスからチェックコードの算出を継続して行なうよう前記チェックコード算出手段を制御する手段と、
前記チェックコード算出手段により前記第１の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した場合、前記第３の記憶手段に記憶されたチェックコード期待値と前記チェックコード算出手段により算出されたチェックコードとを比較する比較手段と、
この比較手段による比較の結果、両者が一致した場合は自己診断終了と判断して、当該コマンドに対する処理結果を前記外部装置へ応答し、両者が不一致の場合は当該コマンドに対する処理結果を破棄して、自己診断異常を意味するエラーコードを前記外部装置へ応答する手段と、
を具備したことを特徴とする携帯可能電子装置。
【請求項２】
前記チェックコード算出手段により前記第１の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した後、さらに後続するコマンドを受信した場合、再度、前記第１の記憶手段に記憶されたプログラムコードの先頭アドレスからチェックコードの算出処理を開始するよう前記チェックコード算出手段を制御する手段をさらに具備したことを特徴とする請求項１記載の携帯可能電子装置。
【請求項３】
外部装置と通信を行なうための通信手段と、この通信手段により受信した外部装置からのコマンドに応じた処理を行なう処理手段と、この処理手段で処理を行なうために実行されるプログラムコードを記憶する第１の記憶手段と、前記処理手段の実行結果を一時記憶するための第２の記憶手段と、前記プログラムコードが破壊されていないことを確認するためのチェックコード期待値をあらかじめ記憶している第３の記憶手段と、前記通信手段により外部装置から１つ目のコマンドを受信した際、前記第１の記憶手段に記憶されたプログラムコードに対するチェックコードの算出を当該プログラムコードが記憶された先頭アドレスから開始するチェックコード算出手段と、このチェックコード算出手段によるチェックコードの算出があらかじめ設定されたサイズまで終了したことを判断すると、その時点で全プログラムコードのチェックコード算出が終了していない場合、算出した中間までの中間チェックコードおよびチェックコードの算出が終了した最終チェック済アドレス情報を前記第２の記憶手段に一時記憶した後、前記通信手段により当該コマンドに対する処理結果を前記外部装置へ応答する手段と、前記１つ目のコマンドに続く後続のコマンドを受信した場合、前記第２の記憶手段に一時記憶した最終チェック済アドレスおよび中間チェックコードを用いて、前記第１の記憶手段に記憶されたチェックコードの算出が終了していないプログラムコードの先頭アドレスからチェックコードの算出を継続して行なうよう前記チェックコード算出手段を制御する手段と、前記チェックコード算出手段により前記第１の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した場合、前記第３の記憶手段に記憶されたチェックコード期待値と前記チェックコード算出手段により算出されたチェックコードとを比較する比較手段と、この比較手段による比較の結果、両者が一致した場合は自己診断終了と判断して、当該コマンドに対する処理結果を前記外部装置へ応答し、両者が不一致の場合は当該コマンドに対する処理結果を破棄して、自己診断異常を意味するエラーコードを前記外部装置へ応答する手段とを有したＩＣモジュールと、
このＩＣモジュールを収納したＩＣカード本体と、
を具備したことを特徴とするＩＣカード。
【請求項４】
前記ＩＣモジュールは、前記チェックコード算出手段により前記第１の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した後、さらに後続するコマンドを受信した場合、再度、前記第１の記憶手段に記憶されたプログラムコードの先頭アドレスからチェックコードの算出処理を開始するよう前記チェックコード算出手段を制御する手段をさらに具備したことを特徴とする請求項３記載のＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、プログラムコード自己診断機能を持つ携帯可能電子装置およびＩＣカードに関する。
【背景技術】
【０００２】
一般に、携帯可能電子装置としてのＩＣカードは、プラスチックなどで形成されたカード状の本体内に制御素子（ＣＰＵ）および各種メモリなどを有するＩＣチップが埋め込まれている。このようなＩＣカードには、各種メモリに格納されているデータを自己診断する機能を有するものがある。
【０００３】
ＩＣカードの自己診断として、ＬＳＩがサポートする各種ハードウェアの診断、オペレーティングシステム（ＯＳ）やアプリケーションプログラムを含むプログラムコードの自己診断、ＯＳやアプリケーションプログラムの動作に必要なデータを格納するデータ領域の自己診断、ＲＡＭの自己診断などが提案されている。
【０００４】
上記各自己診断の中でもプログラムコードの自己診断は、対象とするプログラムコードのサイズに依存して自己診断の実行時間がかかり、将来的にＩＣカードの持つ機能が多様化、複雑化していくと、プログラムコードのサイズはそれに比例して大きくなり、それに伴い自己診断時間も長くなることが想定される。
【０００５】
そのため、この時間が長くなったプログラムコードの自己診断処理を、いつ実行するのか、という点が重要となっている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−３１０５９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記したように、プログラムコードの自己診断を一括して実行する場合、いつ実行するのかが重要となる。ＩＣカードは、外部装置からのコマンド（命令）に応じて受動的に動作し、また、ＩＳＯ／ＩＥＣ７８１６等で規定されるように、コマンドに対するレスポンスデータを応答した後は、低消費電流モードに移行することが要求される場合がある。
【０００８】
このため、一般的にＩＣカードの自己診断は、コマンド受信終了後から、レスポンスデータ応答前までの間、つまりコマンド処理の一環として実行される。  
また、プログラムコードの自己診断は、ＩＣカードを活性化した後に１度、たとえば１番目に受信したコマンドなど、１つのコマンド処理中に実行される、あるいは、特定の処理を実行する前に、その対象となる領域の自己診断が実行されるという方法が提案されている。
【０００９】
ここで、１つのコマンド処理中に実行される、という方式を使用した場合、たとえば、１番目に受信したコマンドに対するＩＣカードの処理時間が、自己診断対象となるプログラムコードのサイズに応じて増加するため、将来的にプログラムコードのサイズが飛躍的に拡張すると、たとえば、外部装置側に何らかのＩＣカードの処理が不正に長くなっているという判定を行なうための処理タイムアウト時間が設定されていた場合、このタイムアウト時間を超えてしまい、ＩＣカードと外部装置との間の処理が正しく行なえなくなる、というような問題が発生する恐れがある。
【００１０】
また、ＩＣカードの活性化後に１回実行される、という方式については、たとえば、携帯電話機に挿入されて使用されるＵＩＭカードなどの場合、携帯電話機の電源をオンした以降、ＩＣカードは常に活性化された状態を保持するため、次の自己診断処理は、所有者が一旦、携帯電話機の電源をオフし、再度、携帯電話機の電源をオンした場合にのみ実行される、というように自己診断がほとんど行なわれなくなる、という問題がある。
【００１１】
そこで、実施形態は、プログラムコードの自己診断が特定のコマンド処理時間に影響を与えることを避けるための分散処理、および、本装置がほとんど非活性化〜（再）活性化されない利用シーンにおける、プログラムコード自己診断の定期実施を可能とする携帯可能電子装置およびＩＣカードを提供することを目的とする。
【課題を解決するための手段】
【００１２】
実施形態に係る携帯可能電子装置は、外部装置と通信を行なうための通信手段と、この通信手段により受信した外部装置からのコマンドに応じた処理を行なう処理手段と、この処理手段で処理を行なうために実行されるプログラムコードを記憶する第１の記憶手段と、前記処理手段の実行結果を一時記憶するための第２の記憶手段と、前記プログラムコードが破壊されていないことを確認するためのチェックコード期待値をあらかじめ記憶している第３の記憶手段と、前記通信手段により外部装置から１つ目のコマンドを受信した際、前記第１の記憶手段に記憶されたプログラムコードに対するチェックコードの算出を当該プログラムコードが記憶された先頭アドレスから開始するチェックコード算出手段と、このチェックコード算出手段によるチェックコードの算出があらかじめ設定されたサイズまで終了したことを判断すると、その時点で全プログラムコードのチェックコード算出が終了していない場合、算出した中間までの中間チェックコードおよびチェックコードの算出が終了した最終チェック済アドレス情報を前記第２の記憶手段に一時記憶した後、前記通信手段により当該コマンドに対する処理結果を前記外部装置へ応答する手段と、前記１つ目のコマンドに続く後続のコマンドを受信した場合、前記第２の記憶手段に一時記憶した最終チェック済アドレスおよび中間チェックコードを用いて、前記第１の記憶手段に記憶されたチェックコードの算出が終了していないプログラムコードの先頭アドレスからチェックコードの算出を継続して行なうよう前記チェックコード算出手段を制御する手段と、前記チェックコード算出手段により前記第１の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した場合、前記第３の記憶手段に記憶されたチェックコード期待値と前記チェックコード算出手段により算出されたチェックコードとを比較する比較手段と、この比較手段による比較の結果、両者が一致した場合は自己診断終了と判断して、当該コマンドに対する処理結果を前記外部装置へ応答し、両者が不一致の場合は当該コマンドに対する処理結果を破棄して、自己診断異常を意味するエラーコードを前記外部装置へ応答する手段とを具備している。
【図面の簡単な説明】
【００１３】
【図１】実施の形態に係る携帯可能電子装置としてのＩＣカードの構成を示すブロック図。
【図２】データメモリ、ＲＡＭおよびＲＯＭの構成を概略的に示す模式図。
【図３】ＲＡＭに一時記憶される各種データの具体例を示す模式図。
【図４】第１の実施形態に係る動作を説明するフローチャート。
【図５】第１の実施形態に係る動作を説明するフローチャート。
【図６】第２の実施形態に係る動作を説明するフローチャート。
【図７】第２の実施形態に係る動作を説明するフローチャート。
【発明を実施するための形態】
【００１４】
以下、実施形態について図面を参照して説明する。  
図１は、本実施形態に係る携帯可能電子装置としてのＩＣカードの構成を概略的に示すものである。このＩＣカード１は、たとえば、ＩＳＯ／ＩＥＣ７８１６シリーズで規定される接触式通信機能をサポートしていて、ＩＣカード本体１ａ内にＩＣモジュール１１が埋設されている。ＩＣモジュール１１は、ＩＣチップ１２および接触式通信手段としての接触端子１３を有して構成されていて、これらは一体的にモジュール化されている。  
ＩＣカード１は、接触端子１３を介して接触通信方式により接触式カードリーダ・ライタ（外部装置）２と通信を行なう。
【００１５】
ＩＣチップ１２は、制御部として機能するＣＰＵ（セントラル・プロセッシング・ユニット）１０１、各種データを保持（記憶）するための記憶手段としてのデータメモリ１０２、ワーキングメモリとして機能する記憶手段としてのＲＡＭ（ランダム・アクセス・メモリ）１０３、ＣＰＵ１０１が実行するプログラムなどを格納した記憶手段としてのＲＯＭ（リード・オンリ・メモリ）１０４、および、接触端子１１を介して接触式カードリーダ・ライタ２と行なわれる通信を制御する接触通信インタフェイス（Ｉ／Ｆ）１０５を有して構成される。
【００１６】
データメモリ１０２は、たとえば、ＥＥＰＲＯＭやフラッシュメモリなどの不揮発性メモリにより構成されていて、本実施形態では、２５６Ｋバイトの容量を有している。
【００１７】
図２は、データメモリ１０２、ＲＡＭ１０３およびＲＯＭ１０４の構成を模式的に示したものである。
【００１８】
まず、ＲＯＭ１０４には、プログラムコードおよびプログラムコードが破壊されていないことを確認するためのチェックコード期待値が格納されている。なお、プログラムコードは、ＲＯＭ１０４内の全ての領域に渡り格納されているものとする。また、上記チェックコード期待値は、プログラムコードの一部としてプログラムコード内にあらかじめ格納されている。
【００１９】
ＲＯＭ１０４は、本実施形態では、たとえば、開始アドレスが［０ｘ００００００］、終了アドレスが［０ｘ０３ＦＦＦＦ］で、２５６Ｋバイトの容量を有している。
【００２０】
次に、ＲＡＭ１０３には、プログラムコード自己診断の結果情報である自己診断結果フラグを一時記憶するための領域１０３ａ、自己診断が終了したアドレスを一時記憶するための領域１０３ｂ、中間結果あるいはチェックコード期待値と比較する最終結果となるチェックコード算出値を一時記憶するための領域１０３ｃが確保されている。  
なお、ＲＡＭ１０３は、本実施形態では、たとえば、４０Ｋバイトの容量を有している。
【００２１】
図３は、ＲＡＭ１０３の領域１０３ａ，１０３ｂ，領域１０３ｃに一時記憶される各種データの具体例を示したものである。
【００２２】
領域１０３ａに一時記憶される自己診断結果フラグは、たとえば、１バイトのデータで、プログラムコード自己診断状況（未実施、実施中、終了）、および終了している場合はその結果を示す情報である。
【００２３】
領域１０３ｂに一時記憶される自己診断終了アドレスは、たとえば、３バイトのデータで、前回コマンド処理終了時点で、プログラムコードのどの部分までの自己診断が終了したか（未実施、実施中、終了）、を一時記憶するための情報である。具体的には、その時点で自己診断が終了した最終のメモリアドレスを情報として記憶する。
【００２４】
領域１０３ｃに一時記憶されるチェックコード算出値は、たとえば、２バイトのデータで、自己診断終了アドレスが、終了（つまり、プログラムコードの最終アドレス）を示していない場合は、中間結果を、終了を示している場合は、自己診断の合否判定を行なうためにプログラムコード内にあらかじめ格納されたチェックコード期待値と比較するためのデータとして一時記憶される情報である。
【００２５】
次に、このような構成において、第１の実施形態に係る動作について図４および図５に示すフローチャートを参照して説明する。なお、本フローチャートでは、ＩＣカード１の全ての処理を詳細には記載せず、本実施形態の説明を行なう上で必要となる部分についてのみを記載している。
【００２６】
ＣＰＵ１０１は、ＩＳＯ／ＩＥＣ７８１６シリーズに規定された手順にしたがって活性化されることで、処理を開始する（ステップＳ１）。処理が開始されると、ＲＡＭ１０３の初期化が行なわれる（ステップＳ２）。これにより、図３に示したような各一時記憶データも初期値に戻される。
【００２７】
次に、ＣＰＵ１０１は、ＩＳＯ／ＩＥＣ７８１６シリーズの規定にしたがい、ＡＴＲ（アンサー・ツー・リセット）を外部装置である接触式カードリーダ・ライタ２へ送信する（ステップＳ３）。ＡＴＲ送信後、ＣＰＵ１０１は、接触式カードリーダ・ライタ２からのコマンドを待つための受信待ちモードへ進む（ステップＳ４）。接触式カードリーダ・ライタ２からコマンドが送信されない場合、本ステップＳ４に留まり続ける。
【００２８】
接触式カードリーダ・ライタ２からコマンドを受信すると、ＣＰＵ１０１は、まず、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグの状態をチェックし、「終了（異常）」か、または「終了（正常）」かを判定する（ステップＳ５）。
【００２９】
この判定の結果、自己診断結果フラグが「終了（異常）」を示していた場合、ＣＰＵ１０１は、それまでに既にプログラムコードの自己診断がエラーとなっているため、コマンドの処理を実行することなく、ステップＳ６へ進み、自己診断エラーを意味するステータスワード（ＳＷ）を接触式カードリーダ・ライタ２へ応答し（ステップＳ６）、再びステップＳ４のコマンド受信待ち状態へ戻る。
【００３０】
ステップＳ５の判定の結果、自己診断結果フラグが「終了（異常）」でも「終了（正常）」でもない場合、ＣＰＵ１０１は、自己診断を新規に開始するか、または中断状態から継続再開するかを判断する（ステップＳ７）。すなわち、自己診断結果フラグが「実施中」を示しているか、「未実施」を示しているかを判定する。
【００３１】
ステップＳ７の判定の結果、自己診断結果フラグが、「実施中」を示していた場合、ＣＰＵ１０１は、今回の処理で自己診断を再開するために、前回コマンドで行なった自己診断の中間情報をＲＡＭ１０３から復帰する。
【００３２】
すなわち、ＲＡＭ１０３の領域１０３ｃに記憶されているチェックコード算出値を初期値（０ｘ００００）にセットし（ステップＳ８）、ＲＡＭ１０３の領域１０３ｂに記憶されている自己診断終了アドレスに「＋１」した値を自己診断開始アドレスにセットする（ステップＳ９）。
【００３３】
次に、ＣＰＵ１０１は、ＲＯＭ１０４内のプログラムコードに対する自己診断を行なう（ステップＳ１０）。なお、ステップＳ７の判定の結果、自己診断結果フラグが、「未実施」を示していた場合、ステップＳ８，Ｓ９をジャンプしてステップＳ１０に進む。
【００３４】
ステップＳ１０におけるプログラムコード自己診断の方法として、本実施の形態では、たとえば、ＣＲＣ１６演算を利用することとする。この場合、ＣＲＣ１６の計算を開始するアドレスに前回までに終了したアドレスに「＋１」した値を、ＣＲＣ初期値として前回までに算出されたＣＲＣ算出値を使用する。
【００３５】
ステップＳ１０では、指定されたアドレスから指定されたＣＲＣ初期値を用いて、プログラムコードの自己診断を開始する。具体的な計算ロジックとしては、前述のとおりＣＲＣ１６演算とする。
【００３６】
また、開始アドレスおよび初期値が指定されていない場合は、あらかじめプログラムコードの内部に設定されたプログラムコード自己診断用の初期値を利用する。具体的には、開始アドレスはプログラムコード領域の先頭を示し、ＣＲＣ初期値は例えば「０ｘ００００」とする。
【００３７】
ステップＳ１０は、あらかじめプログラムコード内で指定されたサイズ分のプログラムコード自己診断処理を実行後、終了するものとする。たとえば、１回に行なうプログラムコード自己診断対象のデータサイズを６４Ｋバイトとした場合、全プログラムコード領域に対する自己診断は、４回、つまり診断開始後、４コマンド目の処理時点で終了することとなる。
【００３８】
次に、ＣＰＵ１０１は、ＲＯＭ１０４の最終アドレスまで自己診断が終了したかをチェックする（ステップＳ１１）。このチェックの結果、ＲＯＭ１０４の最終アドレスまで自己診断が終了している場合、ＣＰＵ１０１は、算出されたチェックコードと、あらかじめＲＯＭ１０４のプログラムコードに格納されたチェックコード期待値との比較を行なう（ステップＳ１２）。
【００３９】
ステップＳ１２の比較の結果、両者の値が一致（自己診断成功）した場合（ステップＳ１３）、ＣＰＵ１０１は、全てのプログラムコードが正しい値を保持している、つまりプログラムコードが壊れたり、改竄されたりしていない、と判断し、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグを「終了（正常）」に設定し（ステップＳ１４）、ステップＳ１５へ進む。
【００４０】
ステップＳ１２の比較の結果、両者の値が不一致の場合（ステップＳ１３）、ＣＰＵ１０１は、プログラムコード自体に何らかの問題があると判断し、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグを「終了（異常）」に設定し（ステップＳ１６）、ステップＳ６へ進む。
【００４１】
ステップＳ１１のチェックの結果、ＲＯＭ１０４の最終アドレスまで自己診断が終了していない場合、ＣＰＵ１０１は、中間状態を保存するために、自己診断が終了した時点のアドレス（自己診断終了アドレス）、および、自己診断が終了した時点のチェックコード算出値をＲＡＭ１０３の領域１０３ｂ，１０３ｃに保存する（ステップＳ１７）。
【００４２】
次に、ＣＰＵ１０１は、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグを「実施中」に設定し（ステップＳ１８）、ステップＳ１５へ進む。
【００４３】
ステップＳ５の判定の結果、自己診断結果フラグが「終了（正常）」を示していた場合、ＣＰＵ１０１は、ステップＳ７〜Ｓ１４，Ｓ１６〜Ｓ１８をジャンプしてステップＳ１５へ進む。
【００４４】
ステップＳ１５では、接触式カードリーダ・ライタ２から受信したコマンドの処理を開始する。次に、ＣＰＵ１０１は、コマンド処理実行後、その処理結果に応じたステータスワード（ＳＷ）を接触式カードリーダ・ライタ２へ応答し（ステップＳ１９）、再びステップＳ４のコマンド受信待ち状態へ戻る。
【００４５】
以上説明したように上記第１の実施形態に係る動作によれば、ＩＣカード１の活性化後、接触式カードリーダ・ライタ２から１つ目のコマンドを受信した場合に、プログラムコードのチェックコード算出を、ＲＯＭ１０４に格納されたプログラムコードの先頭アドレスから開始し、あらかじめプログラムコードに設定されたサイズまでのチェックコード算出終了後に、その時点で全プログラムコードのチェックコード算出が終了していない場合は、算出した中間のチェックコード、および、チェックコードの算出が終了した領域の最終チェック済アドレス情報をＲＡＭ１０３に一時保存した後に、コマンドの処理結果を接触式カードリーダ・ライタ２へ応答する。
【００４６】
さらに後続のコマンドを受信した場合に、前回一時保存した最終チェック済アドレスおよび中間チェックコードを用いて、チェックコード算出が終了していないプログラムコードの先頭アドレスから同様にチェックコード算出を継続する。
【００４７】
最終的にプログラムコードの全てのチェックコード算出処理が終了した後で、あらかじめプログラムコード内に書込まれたチェックコード期待値と算出したチェックコードとを比較し、両者の値が一致した場合は、自己診断終了と判断して通常のコマンド処理結果を接触式カードリーダ・ライタ２へ応答し、不一致の場合は、コマンド処理結果を破棄して、自己診断異常を意味するエラーコードを接触式カードリーダ・ライタ２へ応答する。  
このように、プログラムコードの自己診断を１つのコマンド処理内で全て実行するのではなく、複数のコマンド処理に分けて分散実行することを特徴とする。
【００４８】
次に、第２の実施形態に係る動作について図６および図７に示すフローチャートを参照して説明する。なお、上述した第１の実施形態と同一ステップには同一符号を付して説明する。
【００４９】
ＣＰＵ１０１は、ＩＳＯ／ＩＥＣ７８１６シリーズに規定された手順にしたがって活性化されることで、処理を開始する（ステップＳ１）。処理が開始されると、ＲＡＭ１０３の初期化が行なわれる（ステップＳ２）。これにより、図３に示したような各一時記憶データも初期値に戻される。
【００５０】
次に、ＣＰＵ１０１は、ＩＳＯ／ＩＥＣ７８１６シリーズの規定にしたがい、ＡＴＲ（アンサー・ツー・リセット）を外部装置である接触式カードリーダ・ライタ２へ送信する（ステップＳ３）。ＡＴＲ送信後、ＣＰＵ１０１は、接触式カードリーダ・ライタ２からのコマンドを待つための受信待ちモードへ進む（ステップＳ４）。接触式カードリーダ・ライタ２からコマンドが送信されない場合、本ステップＳ４に留まり続ける。
【００５１】
接触式カードリーダ・ライタ２からコマンドを受信すると、ＣＰＵ１０１は、まず、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグの状態をチェックし、「終了（異常）」かを判定する（ステップＳ２０）。
【００５２】
この判定の結果、自己診断結果フラグが「終了（異常）」を示していた場合、ＣＰＵ１０１は、それまでに既にプログラムコードの自己診断がエラーとなっているため、コマンドの処理を実行することなく、ステップＳ６へ進み、自己診断エラーを意味するステータスワード（ＳＷ）を接触式カードリーダ・ライタ２へ応答し（ステップＳ６）、再びステップＳ４のコマンド受信待ち状態へ戻る。
【００５３】
ステップＳ２０の判定の結果、自己診断結果フラグが「終了（異常）」でない場合、ＣＰＵ１０１は、自己診断を新規に開始するか、または中断状態から継続再開するかを判断する（ステップＳ７）。すなわち、自己診断結果フラグが「実施中」を示しているか、「未実施」を示しているかを判定する。
【００５４】
ステップＳ７の判定の結果、自己診断結果フラグが、「実施中」を示していた場合、ＣＰＵ１０１は、今回の処理で自己診断を再開するために、前回コマンドで行なった自己診断の中間情報をＲＡＭ１０３から復帰する。
【００５５】
すなわち、ＲＡＭ１０３の領域１０３ｃに記憶されているチェックコード算出値を初期値（０ｘ００００）にセットし（ステップＳ８）、ＲＡＭ１０３の領域１０３ｂに記憶されている自己診断終了アドレスに「＋１」した値を自己診断開始アドレスにセットする（ステップＳ９）。
【００５６】
次に、ＣＰＵ１０１は、ＲＯＭ１０４内のプログラムコードに対する自己診断を行なう（ステップＳ１０）。なお、ステップＳ７の判定の結果、自己診断結果フラグが、「未実施」を示していた場合、ステップＳ８，Ｓ９をジャンプしてステップＳ１０に進む。
【００５７】
ステップＳ１０におけるプログラムコード自己診断の方法として、本実施の形態では、たとえば、ＣＲＣ１６演算を利用することとする。この場合、ＣＲＣ１６の計算を開始するアドレスに前回までに終了したアドレスに「＋１」した値を、ＣＲＣ初期値として前回までに算出されたＣＲＣ算出値を使用する。
【００５８】
ステップＳ１０では、指定されたアドレスから指定されたＣＲＣ初期値を用いて、プログラムコードの自己診断を開始する。具体的な計算ロジックとしては、前述のとおりＣＲＣ１６演算とする。
【００５９】
また、開始アドレスおよび初期値が指定されていない場合は、あらかじめプログラムコードの内部に設定されたプログラムコード自己診断用の初期値を利用する。具体的には、開始アドレスはプログラムコード領域の先頭を示し、ＣＲＣ初期値は例えば「０ｘ００００」とする。
【００６０】
ステップＳ１０は、あらかじめプログラムコード内で指定されたサイズ分のプログラムコード自己診断処理を実行後、終了するものとする。たとえば、１回に行なうプログラムコード自己診断対象のデータサイズを６４Ｋバイトとした場合、全プログラムコード領域に対する自己診断は、４回、つまり診断開始後、４コマンド目の処理時点で終了することとなる。
【００６１】
次に、ＣＰＵ１０１は、ＲＯＭ１０４の最終アドレスまで自己診断が終了したかをチェックする（ステップＳ１１）。このチェックの結果、ＲＯＭ１０４の最終アドレスまで自己診断が終了している場合、ＣＰＵ１０１は、算出されたチェックコードと、あらかじめＲＯＭ１０４のプログラムコードに格納されたチェックコード期待値との比較を行なう（ステップＳ１２）。
【００６２】
ステップＳ１２の比較の結果、両者の値が一致（自己診断成功）した場合（ステップＳ１３）、ＣＰＵ１０１は、全てのプログラムコードが正しい値を保持している、つまりプログラムコードが壊れたり、改竄されたりしていない、と判断し、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグを「終了（正常）」に設定し（ステップＳ１４）、ステップＳ１５へ進む。
【００６３】
ステップＳ１２の比較の結果、両者の値が不一致の場合（ステップＳ１３）、ＣＰＵ１０１は、プログラムコード自体に何らかの問題があると判断し、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグを「終了（異常）」に設定し（ステップＳ１６）、ステップＳ６へ進む。
【００６４】
ステップＳ１１のチェックの結果、ＲＯＭ１０４の最終アドレスまで自己診断が終了していない場合、ＣＰＵ１０１は、中間状態を保存するために、自己診断が終了した時点のアドレス（自己診断終了アドレス）、および、自己診断が終了した時点のチェックコード算出値をＲＡＭ１０３の領域１０３ｂ，１０３ｃに保存する（ステップＳ１７）。
【００６５】
次に、ＣＰＵ１０１は、ＲＡＭ１０３の領域１０３ａに記憶されている自己診断結果フラグを「実施中」に設定し（ステップＳ１８）、ステップＳ１５へ進む。
【００６６】
ステップＳ１５では、接触式カードリーダ・ライタ２から受信したコマンドの処理を開始する。次に、ＣＰＵ１０１は、コマンド処理実行後、その処理結果に応じたステータスワード（ＳＷ）を接触式カードリーダ・ライタ２へ応答し（ステップＳ１９）、再びステップＳ４のコマンド受信待ち状態へ戻る。
【００６７】
以上説明したように上記第２の実施形態に係る動作によれば、１回目のプログラムコード自己診断終了後に、次のコマンドを受信した場合、第１の実施形態と同様な方法で行なわれるプログラムコードの自己診断処理を、再度最初から実行する点を特徴とする。この場合、プログラムコードの自己診断は、ＩＣカード１が活性化された以降、ＩＣカード１が非活性化されるまでの間、永続的に実行され続けることを意味する。
【００６８】
なお、前記実施形態は一例であり、前記実施形態以外の形に変更することも可能である。たとえば、外部装置との通信方式は接触通信方式に限定するものではなく、ＩＳＯ／ＩＥＣ１４４４３に規定されているような非接触通信方式をサポートしたＩＣカードに対しても同様に適用可能である。
【００６９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行なうことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７０】
１…ＩＣカード（携帯可能電子装置）、１ａ…ＩＣカード本体、２…接触式カードリーダ・ライタ（外部装置）、１１…ＩＣモジュール、１２…ＩＣチップ、１３…接触端子、１０１…ＣＰＵ（制御素子）、１０２…データメモリ（記憶手段）、１０３…ＲＡＭ（記憶手段）、１０４…ＲＯＭ（記憶手段）、１０５…接触通信インタフェイス。
【図１】
2012150606.tif 000003
【図２】
2012150606.tif 000004
【図３】
2012150606.tif 000005
【図４】
2012150606.tif 000006
【図５】
2012150606.tif 000007
【図６】
2012150606.tif 000008
【図７】
2012150606.tif 000009