以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一の符号を付し、その繰り返しの説明は省略する。
<実施の形態1>
本発明の実施の形態1である処理装置について説明する。図1は、本実施の形態の処理装置の内部構成の例を示した図である。また、図2は、本実施の形態の処理装置の外部端子の配置例を示した図である。
図1において、処理装置100は、ISO7816互換の外部インタフェースとして、EX_CLK110、EX_RESET111、UART_I/O112、D+113、D−114、Vcc115、GND116を有し、また、内部オシレータ120、クロック制御回路130、CPU141、UART制御回路142、USB制御回路143を有する構成となっている。
処理装置100としては、主にICカードチップやセキュリティ機能付きメモリカード等が該当するが、複数のデータ転送のインタフェースを有する装置であればこれらに限られない。また、1つのチップではなく、各回路または各回路の集まり毎に別々のチップとして構成されていてもよい。
EX_CLK110は、外部端末から処理装置100へISO7816に準拠した処理を行うために必要なクロック信号を入力するための外部インタフェースであり、ISO7816では図2におけるC3端子203が割り当てられている。以下では、EX_CLK110経由で供給されるクロックを外部クロックと記載する。EX_RESET111は、外部端末から処理装置100へリセット信号を入力するための外部インタフェースであり、ISO7816では図2におけるC2端子202が割り当てられている。以下では、EX_RESET111経由のリセットを外部リセットと記載する。
UART_I/O112は、外部端末と処理装置100との間でAPDU(Application Protocol Data Unit)を送受信するための外部インタフェースであり、ISO7816ではC7端子207が割り当てられている。D+113およびD−114は、ISO7816−12に準拠したUSB転送において、外部端末と処理装置100との間でコマンドやデータを転送するために用いられ、ISO7816ではD+113としてC4端子204、D−114としてC8端子208が割り当てられている。
Vcc115は、処理装置100への入力電圧を取得する外部インタフェースであり、ISO7816ではC1端子201が割り当てられている。GND116は、処理装置100へのグランド線であり、ISO7816ではC5端子205が割り当てられている。なお、ISO7816−3に準拠したデータ転送およびISO7816−12に準拠したUSB転送において、どの外部端子がどの外部インタフェースに割り当たっていても、その割り当てが明らかであれば、本実施の形態における処理装置100およびクロック制御方法の本質には影響しない。
UART制御回路142は、ISO7816−3の規定で定められたAPDU転送を実現する回路である。以下では、外部クロックに同期してISO7816−3に準拠したAPDU転送を行うインタフェースをISO7816インタフェースと記載する。USB制御回路143は、ISO7816−12の規定で定められたUSB仕様に準拠したデータ転送を実現する回路である。以下では、ISO7816−12の規定で定められたUSB仕様に準拠したデータ転送を行うインタフェースをUSBインタフェースと記載する。また、以下では、UART制御回路142およびUSB制御回路143の総称としてインタフェース制御回路と記載する場合がある。
各インタフェース制御回路の機能を、CPU141により行うように実装することも可能である。ただし、各インタフェース制御回路を独自に有し、これらを動作させるための電力がCPU141を動作させるための電力とは別に制御可能な場合には、データ転送の際にどちらかのインタフェースが選択された際、他方のインタフェース制御回路への電力供給を停止することで、処理装置100の消費電力を低減させることができる。
USBインタフェースによるデータ転送の場合でも外部クロックを利用することは可能であるが、その動作周波数が4MHz程度と低速であるため、大容量のデータを扱うUSBインタフェースによるデータ転送には適さない。さらに、USBインタフェースによる処理中に継続して外部端末から外部クロックが供給されるという保証もない。
そこで、本実施の形態の処理装置100では、クロック生成回路として内部オシレータ120を設け、USBインタフェースによる処理の際には内部オシレータ120により生成したクロックを使用する構成とする。なお、内部オシレータ120は、処理装置100の内部に限られず、処理装置100の外部から接続する構成であってもよい。以下では、内部オシレータ120が生成したクロックを内部クロックと記載する。
図3は、処理装置100のような、ISO7816インタフェースとUSBインタフェースを持つICカードの初期動作の流れの一例を示した図である。まず、電圧投入前、ステップ300にて、EX_CLK110をLow状態、EX_RESET111をLow状態、UART_I/O112をHigh状態、D+113をHigh状態、D−114をHigh状態に設定する。電圧投入後、規定された動作電圧に達した後、D+113とD−114とが少なくとも10msの間Low状態であるかどうかを判定する(ステップ301)。ステップ301での判定条件を満たしている場合のみ、以下で述べるUSBインタフェース活性化手順を行う。
USBインタフェース活性化手順では、まず、処理装置100は、USBインタフェースがUSB仕様におけるFull SpeedもしくはHigh Speedに対応している場合はD+113をHigh状態にし、Low Speedのみに対応している場合はD−114をHigh状態にする(ステップ302)。次に、D+113もしくはD−114がHigh状態になったことにより、処理装置100と接続している外部端末は、USBインタフェースを持つ処理装置100が接続されたことを検知し、High状態になっているD+113もしくはD−114をLow状態にする(ステップ303)。
ステップ301〜ステップ303の各処理が正常に行われた場合のみ、USBインタフェースが活性化され、処理装置100はUSBインタフェースでデータ転送を行う装置として動作する。ステップ301〜ステップ303の各処理が正常に行われなかった場合は、外部装置からEX_CLK110経由で動作周波数4MHz程度の外部クロックが供給される/されているかどうかを判定する(ステップ311)。外部クロックが供給される/されている場合には、以下で述べるISO7816インタフェース活性化手順を行う。
ISO7816インタフェース活性化手順では、まず、外部クロックが供給されてから400クロックの間に、外部端末がEX_RESET111をHigh状態にする(ステップ312)。次に、EX_RESET111がHigh状態になってから40,000クロックの間に、処理装置100は、UART_I/O112経由でATR(Answer To Reset)を外部端末に送信する(ステップ313)。
ステップ311〜ステップ313の各処理が正常に行われた場合のみ、ISO7816インタフェースが活性化され、処理装置100はISO7816インタフェースでデータ転送を行う装置として動作する。ステップ301〜ステップ303の各処理およびステップ311〜ステップ313の各処理が正常に行われなかった場合は、処理装置100は、D+113とD−114とが少なくとも10msの間Low状態になるか(ステップ301)、またはEX_CLK110経由で外部クロックが供給されるか(ステップ311)のどちらかの条件が成立するのを待つ。
以上に示すような各インタフェースの活性化の処理を行うため、処理装置100は、図1に示すようにクロック制御回路130を有する構成となっている。クロック制御回路130は、処理装置100が外部端末との間でデータ転送を行うために使用するインタフェースに応じて、CPU141や各インタフェース制御回路などに供給するクロックやリセットの選択を行うモジュールである。以下では、CPU141や各インタフェース制御回路などに供給するクロックをシステムクロックと記載する。
図4は、本実施の形態におけるクロック制御回路130に含まれるモジュールの構成例を示した図である。クロック制御回路130は、クロック切り替え回路410、リセット制御回路420、USB検出回路430を有する構成となっている。クロック切り替え回路410は、EX_CLK110経由で外部端末から供給される外部クロック411と、内部オシレータ120で生成した内部クロック412とから、CPU141や各インタフェース制御回路などに供給するシステムクロック413を選択するモジュールである。
また、クロック切り替え回路410は、外部クロック検出信号414および内部クロックスタート信号415を、リセット制御回路420に供給する。ここで、外部クロック検出信号414は、EX_CLK110経由で外部クロック411が供給されたことを検知するとHigh状態にする信号である。また、内部クロックスタート信号415は、内部オシレータ120で生成した内部クロック412をCPU141や各インタフェース制御回路などに供給する際にHigh状態にする信号である。
さらに、クロック切り替え回路410は、CPU141からスリープ信号416を入力し、またCPU141やその他のモジュールにクロック切り替え信号417を出力する構成となっているが、これら信号については後述する。
リセット制御回路420は、CPU141や各インタフェース制御回路などに供給するリセットを制御するモジュールである。リセット制御回路420が供給するリセットとして、システムリセット422、UARTリセット423、USBリセット424がある。システムリセット422は、処理装置100内の全モジュールに対してリセットを供給する信号である。UARTリセット423は、ISO7816インタフェース経由で転送するデータの処理のために必要なモジュールのみにリセットを供給する信号である。USBリセット424は、USBインタフェース経由で転送するデータの処理のために必要なモジュールのみにリセットを供給する信号である。
USB検出回路430は、D+113およびD−114の信号線の状態を監視し、D+113とD−114の両方の信号線が少なくとも10msの間Low状態であることを検知すると、USB検出信号431をHigh状態にするモジュールである。USB検出信号431は、CPU141およびその他のモジュールにUSBインタフェースによりデータが転送されることを通知するための信号である。
内部オシレータ120は、USB検出信号431がHigh状態になるとクロックの生成を開始する。ただし、クロックはその発振が安定するまでCPU141などに供給するのを待つ必要がある。通常、発振器の仕様などからクロックが安定するまでの時間を知ることが可能なので、その時間を基に作成した専用ハードウェアタイマなどを利用して発振が安定するのを待ち、安定後にCPU141などに供給する。当該タイマは、クロック切り替え回路410や内部オシレータ120内にあってもよい。
以下に、本実施の形態の処理装置100におけるUSBインタフェースの活性化方法およびISO7816インタフェースの活性化方法について説明する。図5は、本実施の形態の処理装置100におけるUSBインタフェースの活性化手順およびISO7816インタフェースの活性化手順の例を表したフロー図である。また、図6は、本実施の形態の処理装置100におけるUSBインタフェースの活性化手順のタイミングチャートの例である。また、図7は、本実施の形態の処理装置100におけるISO7816インタフェースの活性化手順のタイミングチャートの例である。
まず、図6、図7において、電圧投入前に、EX_CLK110をLow状態、EX_RESET111をLow状態、UART_I/O112をHigh状態、D+113をHigh状態、D−114をHigh状態にそれぞれ設定する(タイミング610、タイミング710)。図5における電圧投入後(ステップ501)、USB検出回路430が、D+113とD−114とが少なくとも10msの間Low状態であることを検知した場合(ステップ502)、USBインタフェース活性化手順を開始する。このとき、USB検出回路430はUSB検出信号431をHigh状態にする(タイミング620)。
USB検出回路430は、内部オシレータ120とは別のオシレータで生成したクロックを利用して動作する。ただし、消費電力を低減するため、その動作周波数は数MHz程度とする。また、当該クロックは内部オシレータ120で生成したクロックであってもよい。ただし、その場合は電圧投入時に内部オシレータ120を起動する必要がある。
内部オシレータ120は、USB検出信号431がHigh状態になったことを検知すると、内部クロック412を生成する(ステップ511、タイミング620)。その後、内部オシレータ120内のタイマを利用して、内部クロック412の発振が安定するのを待ち、安定した後、クロック切り替え回路410を経由して、CPU141および各インタフェース制御回路などに内部クロック412をシステムクロック413として供給する(ステップ512)。このとき、クロック切り替え回路410は、内部クロックスタート信号415をHigh状態にする(タイミング630)。なお、UART制御回路142には内部クロック412を供給しなくてもよい。
次に、リセット制御回路420は、USB検出信号431がHigh状態であり、かつ内部クロックスタート信号415がHigh状態あることを確認した後、システムリセット422をHigh状態にする(ステップ513、タイミング640)。なお、システムリセット422ではなく、USBリセット424をHigh状態にしてもよい。
システムリセット422がHigh状態になった後、USB制御回路143は、処理装置100がFull SpeedもしくはHigh Speedに対応している場合はD+113をHigh状態にし、Low Speedのみに対応している場合はD−114をHigh状態にする(ステップ514、タイミング650)。なお、以降の説明においては、本実施の形態の処理装置100はHigh Speedに対応しているものとする。
USB制御回路143の代わりに専用ハードウェアがD+113もしくはD−114をHigh状態にする構成であってもよい。専用ハードウェアを用いる場合は、内部クロック412の供給がなくても動作可能であるため、処理装置100全体の消費電力を低減するため、内部クロック412の生成・供給(ステップ511、S512)やリセット処理(ステップ513)は、できるだけ遅いタイミングであるステップ515の後に行うことが望ましい。
D+113がHigh状態になったことにより、外部端末はUSBインタフェースを持つ処理装置100が接続されたことを検知し、High状態になったD+113をLow状態にする(ステップ515、タイミング660)。以上の処理が正常に行われた場合のみ、USBインタフェースが活性化され、処理装置100はUSBインタフェースでデータ転送を行う装置として動作することができる。
ステップ502で、USB検出回路430がD+113とD−114とが10msの間Low状態になったことを検知せず、さらにステップ521で、クロック切り替え回路410がEX_CLK110経由で外部クロック411が供給されたことを検知した場合、ISO7816インタフェース活性化手順を開始する。このとき、クロック切り替え回路410は、USB検出信号431がLow状態であることを確認した後、外部クロック411をシステムクロック413として供給し、外部クロック検出信号414をHigh状態にする(タイミング720)。
次に、リセット制御回路420は、外部クロック検出信号414がHigh状態になってから400クロック以内にEX_RESET111経由の外部リセット421がHigh状態になったことを検知したら、システムリセット422をHigh状態にする(ステップ522、タイミング730)。なお、システムリセット422ではなく、UARTリセット423をHigh状態にしてもよい。また、ISO7816インタフェース活性化手順への移行は、外部クロック411の検知からではなく、外部リセット421がHigh状態になったことを検知してからでもよい。
システムリセット422がHigh状態になった後、UART制御回路142は、40,000クロック以内にATR(Answer To Reset)をUART_I/O112経由で外部端末に送信する(ステップ523、タイミング740)。以上の処理が正常に行われた場合のみ、ISO7816インタフェースが活性化され、処理装置100はISO7816インタフェースでデータ転送を行う装置として動作することができる。なお、ISO7816インタフェースが活性化したときは、USB制御回路143に外部クロック411を供給しなくてもよい。
以上の処理は、クロック制御回路130の他に、UART制御回路142やUSB制御回路143を利用することにより、全てハードウェアで行うことが可能であるが、以下では、CPU141に内蔵されたROM等に搭載したファームウェアを用いて、USBインタフェースおよびISO7816インタフェースの活性化を行う方法の例について説明する。
図15は、本実施の形態の処理装置100における、USBインタフェースおよびISO7816インタフェースの活性化の際に使用するレジスタの構成例の一部を示した図である。また、図16は、本実施の形態の処理装置100におけるファームウェアを用いたUSBインタフェースの活性化手順およびISO7816インタフェースの活性化手順の例を表したフロー図である。
図15において、CLK_SELECT1501は、システムクロック413の供給源を示すビットである。例えば、“0”の場合は供給源が外部クロック411であることを示し、“1”の場合は供給源が内部クロック412であることを示す。RESET_SELECT1502は、外部リセット421の有効/無効を示すビットである。例えば、“0”の場合は外部リセット421が無効であることを示し、“1”の場合は有効であることを示す。MODE_SELECT1503は、使用可能なインタフェースを示すビットである。例えば、“01”の場合はISO7816インタフェースが使用可能であることを示し、“10”の場合はUSBインタフェースが使用可能であることを示す。さらに、“11”の場合は両方のインタフェースが使用可能であることを示す。
DPPU1511は、例えば、“1”を設定するとD+113もしくはD−114をプルアップするビットである。USB_DETECT1512は、D+113およびD−114が少なくとも10ms間Low状態であることをUSB検出回路430が検知すると“1”が設定されるビットである。USB_MODE1513は、USBインタフェースの速度を示すビットである。例えば、“0”の場合はLow Speedであることを示し、“1”の場合はFull Speedであることを示す。
DP1521は、D+113の状態を示すビットである。例えば、“0”の場合はD+113がLow状態であることを示し、“1”の場合はHigh状態であることを示す。DM1522は、D−114の状態を示すビットである。例えば、“0”の場合はD−114がLow状態であることを示し、“1”の場合はHigh状態であることを示す。
図16において、電圧投入前は、CLK_SELECT1501には“0”、RESET_SELECT1502には“1”、MODE_SELECT1503には“01”が設定されており、また、DPPU1511には“0”、USB_DETECT1512には“0”がそれぞれ設定されている(ステップ1600)。なお、USB_MODE1513、DP1521、DM1522には、処理装置100の仕様によって異なる値が設定され得るが、本実施の形態の処理装置100では全て“1”が設定されているものとする。
電圧投入後、CPU141に対してリセット割り込みが発生すると(ステップ1601)、ファームウェアは、リセット割り込み関数内でMODE_SELECT1503の値を確認する(ステップ1602)。なお、MODE_SELECT1503の値はリセット制御回路420が設定するものとする。MODE_SELECT1503の値が“10”の場合、ファームウェアはDPPU1511に“1”を設定し、D+113をHigh状態にする(ステップ1611)。その後、ファームウェアは、DP1521の値が“0”であるかどうかを監視し(ステップ1612)、“0”になった場合は、処理装置100はUSBインタフェースで動作する。
なお、D+113がLow状態になったときに、USB検出回路430もしくはUSB制御回路143がCPU141に対して割り込みを発生させるようにしてもよい。以上のような処理が正常に行われた場合のみ、USBインタフェースが活性化され、処理装置100はUSBインタフェースでデータ転送を行う装置として動作することができる。
また、ステップ1602においてMODE_SELECT1503の値が“01”の場合、ファームウェアは、40,000クロック以内にリセット割り込み関数内でATRをUART_I/O112経由で外部端末に送信する(ステップ1621)。以上のような処理が正常に行われた場合のみ、ISO7816インタフェースが活性化され、処理装置100はISO7816インタフェースでデータ転送を行う装置として動作することができる。
以上の処理により、一つの処理装置100において、ISO7816インタフェースおよびUSBインタフェースを活性化することができ、複数のインタフェースでのデータ転送に対応することが可能となる。ここで、図2に示したように、ISO7816インタフェースによるデータ転送に使用する外部端子と、USBインタフェースによるデータ転送に使用する外部端子とは重複していない。そのため、物理的には両方のインタフェースを同時に使用することも可能である。
しかし、上述の初期動作時の処理の結果、処理装置100は、ISO7816インタフェースで動作しているときは外部クロック411で動作し、USBインタフェースで動作しているときは内部クロック412で動作している。そのため、両方のインタフェースを同時に使用する場合は、システムクロック413を外部クロック411もしくは内部クロック412のどちらかに統一する必要がある。
前述のように、USBインタフェースによるデータ転送の場合でも外部クロック411を利用することは可能であるが、その動作周波数が4MHz程度と低速であるため、大容量のデータを扱うUSBインタフェースによるデータ転送には適さない。そこで、本実施の形態の処理装置100では、両方のインタフェースを使用する際は、システムクロック413として内部クロック412を使用して動作するものとする。ただし、外部クロック411が高速な場合などは、システムクロック413として外部クロック411を使用する構成とすることも可能である。
ここで、処理装置100がISO7816インタフェースで動作している最中にUSBインタフェースを活性化する場合、システムクロック413を外部クロック411から内部クロック412に切り替える必要が生じる。しかし、処理装置100の動作中に外部クロック411から内部クロック412に切り替えると、切り替えの際にノイズが生じ、CPU141が誤動作する可能性があるという問題点がある。
そこで本実施の形態の処理装置100では、図4に示すように、クロック制御回路130に、スリープ信号416およびクロック切り替え信号417を有する構成としている。スリープ信号416は、CPU141がスリープ状態に移行する際にHigh状態にする信号であり、クロック切り替え信号417は、クロック切り替え回路410がシステムクロック413を外部クロック411から内部クロック412に切り替えた際にHigh状態にする信号である。
以下に、本実施の形態の処理装置100における、USBインタフェースにて動作中にISO7816インタフェースの活性化を行う方法、およびISO7816インタフェースにて動作中にUSBインタフェースの活性化を行う方法について説明する。
図8は、本実施の形態の処理装置100の、USBインタフェースにて動作中におけるISO7816インタフェースの活性化手順、およびISO7816インタフェースにて動作中におけるUSBインタフェースの活性化手順の例を表したフロー図である。また、図9は、本実施の形態の処理装置100の、USBインタフェースにて動作中におけるISO7816インタフェースの活性化手順のタイミングチャートの例である。また、図10は、本実施の形態の処理装置100の、ISO7816インタフェースにて動作中におけるUSBインタフェースの活性化手順のタイミングチャートの例である。
まず、処理装置100がUSBインタフェースで動作しているとき、クロック切り替え回路410がEX_CLK110経由で外部クロック411が供給されたことを検知すると(ステップ801)、ISO7816インタフェース活性化手順を開始する。このとき、クロック切り替え回路410は、外部クロック検出信号414をHigh状態にする(タイミング910)。
このとき、クロック切り替え回路410は、UART制御回路142には内部クロック412を供給する。ただし、UART制御回路142内にはUART_I/O112経由で外部端末とデータ転送を行うモジュールがあり、これらモジュールは外部クロック411にて動作する必要があるため、クロック切り替え回路410は、これらモジュールに対してのみ外部クロック411を供給するものとする。
リセット制御回路420は、外部クロック検出信号414がHigh状態なってから400クロック以内に、EX_RESET111経由の外部リセット421がHigh状態になったことを検知すると(ステップ802)、UARTリセット423をHigh状態にする(タイミング920)。UARTリセット423がHigh状態になった後、UART制御回路142は、40,000クロック以内にATRをUART_I/O112経由で外部端末に送信する(ステップ803、タイミング930)。なお、UARTリセット423ではなく、システムリセット422をHigh状態にしてもよい。
以上の処理が正常に行われた場合のみ、USBインタフェースでの動作中にISO7816インタフェースが活性化され、処理装置100は、USBインタフェースとISO7816インタフェースの両方を同時に使用して動作することができる。
処理装置100がISO7816インタフェースで動作しているとき、USB検出回路430が、D+113とD−114とが少なくとも10msの間Low状態であることを検知すると(ステップ811)、USB活性化手順を開始する。このとき、USB検出回路430は、USB検出信号431をHigh状態にする(タイミング1010)。
内部オシレータ120は、USB検出信号431がHigh状態になったことを検知すると、内部クロック412を生成する(ステップ812、タイミング1010)。クロック切り替え回路410は、内部クロック412が安定した後、内部クロックスタート信号415をHigh状態にし、また、外部クロック411および内部クロック412の両方が供給されたことを確認した後、クロック切り替え信号417をHigh状態にする(タイミング1020)。また、リセット制御回路420は、内部クロックスタート信号415がHigh状態になったことを検知すると、USBリセット424をHigh状態にする(タイミング1020)。なお、USBリセット424をHigh状態にするタイミングは、後述するタイミング1040の後であってもよい。
CPU141は、クロック切り替え信号417がHigh状態になったことを検知すると、スリープ状態に移行するために必要な処理(レジスタの設定や現在の状態の保存等)およびUSBインタフェースの処理に関するリセット処理を行う。必要な処理が完了した後、スリープ信号416をHigh状態にし、スリープ状態に移行する(ステップ813、タイミング1030)。
クロック切り替え回路410は、スリープ信号416がHigh状態になったことを検知すると、システムクロック413を外部クロック411から内部クロック412へと切り替える(ステップ814、タイミング1040)。システムクロック413を切り替えた後、CPU141に割り込み信号を送信し、CPU141の動作を再開させる(ステップ815)。その際に、クロック切り替え回路410は、クロック切り替え信号417およびスリープ信号416をLow状態にする(タイミング1040)。
CPU141の動作再開後、USB制御回路143はD+113をHigh状態にする(ステップ816、タイミング1050)。なお、USB制御回路143の代わりに専用ハードウェアがD+113をHigh状態にしてもよい。また、USBリセット424をHigh状態にするタイミングがタイミング1020ではなくタイミング1040の後である場合は、USBリセット424がHigh状態になった後に、USB制御回路143がD+113をHigh状態にしてもよい。D+113がHigh状態になったことにより、外部端末はUSBインタフェースを持つ処理装置100が接続されたことを検知し、High状態になったD+113をLow状態にする(ステップ817、タイミング1060)。
以上の処理が正常に行われた場合のみ、ISO7816動作中にUSBインタフェースが活性化され、処理装置100は、USBインタフェースとISO7816インタフェースの両方を同時に使用して動作することができる。
なお、本実施の形態の処理装置100では、両方のインタフェースを同時に使用する際に、システムクロック413として内部クロック412を使用する構成としているが、システムクロック413として外部クロック411を使用する場合は、上述のCPU141のスリープ状態への移行、クロック切り替え処理、CPU141の動作再開の一連の処理(ステップ813〜ステップ815)は、USBインタフェースでの動作中にISO7816インタフェースを活性化する処理の中で行われることになる。
以上の処理は、クロック制御回路130の他に、UART制御回路142やUSB制御回路143を利用することにより、全てハードウェアで行うことが可能であるが、以下では、CPU141に内蔵されたROM等に搭載したファームウェアを用いて、USBインタフェースにて動作中にISO7816インタフェースの活性化を行う方法、およびISO7816インタフェースにて動作中にUSBインタフェースの活性化を行う方法の例について説明する。
図17は、本実施の形態の処理装置100の、ファームウェアを用いたUSBインタフェースにて動作中におけるISO7816インタフェースの活性化手順、およびISO7816インタフェースにて動作中におけるUSBインタフェースの活性化手順の例を表したフロー図である。
図17において、処理装置100がUSBインタフェースで動作しているとき、CLK_SELECT1501には“1”、RESET_SELECT1502には“0”、MODE_SELECT1503には“10”、USB_DETECT1512には“1”がそれぞれ設定されている(ステップ1700)。
クロック制御回路130もしくはUART制御回路142が、ISO7816インタフェース活性化手順の開始および外部リセット421がHigh状態になったことを検知すると、CPU141に対してUART割り込みを発生させる(ステップ1701)。このとき、クロック制御回路130は、MODE_SELECT1503を“11”に設定する。UART割り込みを検知すると、ファームウェアは、40,000クロック以内に、UART割り込み関数内でATRをUART_I/O112経由で送信する(ステップ1702)。なお、ATR送信後にMODE_SELECT1503に“11”に設定するようにしてもよい。
以上のような処理が正常に行われた場合のみ、USBインタフェースでの動作中にISO7816インタフェースが活性化され、処理装置100は、USBインタフェースおよびISO7816インタフェースの両方を同時に使用して動作することができる。
処理装置100がISO7816インタフェースで動作しているとき、CLK_SELECT1501には“0”、RESET_SELECT1502には“1”、MODE_SELECT1503には“01”、USB_DETECT1512には“0”がそれぞれ設定されている(ステップ1710)。
USB検出回路430もしくはUSB制御回路143が、D+113およびD−114が少なくとも10msの間Low状態であることを検知すると、CPU141に対してUSB検出割り込みを発生させる(ステップ1711)。USB検出割り込みを検知すると、ファームウェアは、USB検出割り込み関数内で、CLK_SELECT1501に“1”を設定し(ステップ1712)、スリープ命令を実行してCPU141をスリープ状態に移行させる(ステップ1713)。なお、USB検出信号432がHigh状態になると、USB_DETECT1512に“1”が設定されるため、USB検出割り込みを利用せず、USB_DETECT1512が“1”になることをファームウェアで監視する方法でもよい。
スリープ命令が実行されるとスリープ信号416がHigh状態となるため、クロック切り替え回路410がシステムクロック413を内部クロック412へと切り替え、CPU141に割り込み信号を送信し、CPU141の動作を再開させる(ステップ1714)。CPU141の動作が再開した後、ファームウェアは、DPPU1511に“1”を設定し、D+113をHigh状態にする(ステップ1715)。その後、ファームウェアは、DP1521の値が“0”であるかどうかを監視し(ステップ1716)、“0”になった場合はUSBインタフェースで動作する。なお、D+113がLow状態になったときにCPU141に対して再度割り込みを発生させるようにしてもよい。
以上のような処理が正常に行われた場合のみ、ISO7816インタフェースにて動作中にUSBインタフェースが活性化され、処理装置100は、USBインタフェースおよびISO7816インタフェースの両方を同時に使用して動作することができる。
スリープ状態に移行している間はCPU141の動作は停止しているため、上記のようにシステムクロック413として供給するクロック系統の切り替えにおいてCPU141をスリープ状態にすることにより、ノイズの影響を受けずにクロック系統を切り替えることが可能となる。さらに、クロック系統の切り替え中に外部からクロックに対する攻撃を受けた場合でも、CPU141の動作は停止しているため、CPU141が誤動作する恐れはなく、処理装置100の耐タンパ性を維持することが可能となる。
次に、本実施の形態の処理装置100における、両方のインタフェースにて動作中にISO7816インタフェースの非活性化を行う方法、および両方のインタフェースにて動作中にUSBインタフェースの非活性化を行う方法について説明する。
図11は、本実施の形態の処理装置100の、両方のインタフェースにて動作中におけるISO7816インタフェースの非活性化手順、および両方のインタフェースにて動作中におけるUSBインタフェースの非活性化手順の例を表したフロー図である。また、図12は、本実施の形態の処理装置100の、両方のインタフェースにて動作中におけるISO7816インタフェースの非活性化手順のタイミングチャートの例である。また、図13は、本実施の形態の処理装置100の、両方のインタフェースにて動作中におけるUSBインタフェースの非活性化手順のタイミングチャートの例である。
まず、処理装置100が両方のインタフェースにて動作している際に、リセット制御回路420が、EX_RESET111経由の外部リセット421がLow状態になったことを検知した場合(ステップ1101)、ISO7816インタフェース非活性化手順を開始する。その際、リセット制御回路420はUARTリセット423をLow状態にする(タイミング1210)。外部リセット421がLow状態になったことを検知した後、クロック切り替え回路410は、EX_CLK110経由での外部クロック411の供給が停止したことを検知する(ステップ1102)。その際、外部クロック検出信号414をLow状態にする(タイミング1220)。
以上の処理が正常に行われたとき、ISO7816インタフェースは非活性化され、処理装置100は、USBインタフェースのみで動作することになる。その後、クロック制御回路130が外部クロック411の供給を検知することにより、再度ISO7816インタフェースを活性化することができる。なお、外部端末が外部リセット421をLow状態にせずに外部クロック411の供給を停止した場合も、ISO7816の規格には反するが、ISO7816インタフェースを非活性化し、処理装置100がUSBインタフェースのみで動作するようにしてもよい。
処理装置100が両方のインタフェースにて動作している際に、USB検出回路430がD+113およびD−114の信号線の状態がサスペンド状態になったことを検知した場合(ステップ1111)、USBインタフェース非活性化手順を開始する。その際、USB検出回路430はUSB検出信号431をLow状態にする(タイミング1310)。サスペンド状態とは、3ms以上の間、外部端末との間でデータ転送を行っていないときに、消費電力を削減するため、処理装置100を省電力モードで動作させる場合の状態である。なお、USB検出回路430の代わりに、USB制御回路143や専用ハードウェアがサスペンド状態の検知を行ってもよい。
CPU141は、USB検出信号431がLow状態になったことを検知すると、スリープ状態に移行するために必要な処理(レジスタの設定や現在の状態の保存等)を行う。必要な処理が完了した後、スリープ信号416をHigh状態にし、スリープ状態に移行する(ステップ1112、タイミング1320)。クロック切り替え回路410は、スリープ信号416がHigh状態になったことを検知すると、システムクロック413を内部クロック412から外部クロック411へと切り替える(ステップ1113、タイミング1330)。このとき、内部クロック412は停止してもよい。なお、内部クロックスタート信号415をLow状態にすることにより内部クロック412を停止させることも可能である(タイミング1330)。
システムクロック413の切り替え後、CPU141に割り込み信号を送信し、外部クロック411にてCPU141の動作を再開させる(ステップ1114、タイミング1340)。なお、ステップ1111にてUSBインタフェースがサスペンド状態になったことを検知した場合であっても、上記のようにシステムクロック413を内部クロック412から外部クロック411に切り替えず、内部クロック412のまま動作するようにしてもよい。
以上の処理が正常に行われたとき、USBインタフェースは非活性化され、処理装置100は、ISO7816インタフェースのみで動作することになる。その後、USB検出回路430もしくはCPU141が、D+113およびD−114の信号線の状態がレジューム状態になったことを検知することにより、再度USBインタフェースを活性化することができる。
以上の処理は、クロック制御回路130の他に、UART制御回路142やUSB制御回路143を利用することにより、全てハードウェアで行うことが可能であるが、以下では、CPU141に内蔵されたROM等に搭載したファームウェアを用いて、両方のインタフェースにて動作中にISO7816インタフェースの非活性化を行う方法、および両方のインタフェースにて動作中にUSBインタフェースの非活性化を行う方法の例について説明する。
図18は、本実施の形態の処理装置100の、ファームウェアを用いた両方のインタフェースにて動作中におけるISO7816インタフェースの非活性化手順、および両方のインタフェースにて動作中におけるUSBインタフェースの非活性化手順の例を表したフロー図である。
図18において、処理装置100が両方のインタフェースにて動作しているとき、CLK_SELECT1501には“1”、RESET_SELECT1502には“0”、MODE_SELECT1503には“11”、USB_DETECT1512には“1”がそれぞれ設定されている(ステップ1800)。
処理装置100が両方のインタフェースにて動作している際に、ISO7816インタフェースの非活性化手順が開始した場合(ステップ1801)、ファームウェアでは特別な処理を行う必要が無いため、クロック制御回路130におけるISO7816インタフェースの非活性化手順が完了すると、処理装置100はUSBインタフェースのみで動作する。なお、クロック制御回路130もしくはUART制御回路142が、CPU141にEX_CLK100経由での外部クロック411の供給が停止したことを通知する割り込みを発生させてもよい。
処理装置100が両方のインタフェースにて動作している際に、USB検出回路430もしくはUSB制御回路143がD+113およびD−114の信号線の状態がサスペンド状態になったことを検知すると、CPU141にUSBサスペンド割り込みを発生する(ステップ1811)。このとき、ファームウェアは、USBサスペンド割り込み関数内でCLK_SELECT1501に“0”を設定し(ステップ1812)、スリープ命令を実行してCPU141をスリープ状態に移行させる(ステップ1813)。なお、D+113およびD−114の信号線の状態がサスペンド状態になると“1”が設定されるようなレジスタを用いて、サスペンド状態を検知してもよい。
スリープ命令が実行されるとスリープ信号416がHigh状態となるため、クロック切り替え回路410がシステムクロック413を外部クロック411へと切り替え、CPU141に割り込み信号を送信し、CPU141の動作を再開させる(ステップ1814)。以上の処理が正常に行われたとき、USBインタフェースは非活性化され、処理装置100は、ISO7816インタフェースのみで動作することになる。
以上に説明したように、本実施の形態の処理装置100によれば、データ転送のためのインタフェースを複数有する場合であっても、インタフェースの状態に応じてシステムクロック413を外部クロック411と内部クロック412との間で切り替えることができ、かつ、クロック切り替えの際のノイズによるCPU141の誤動作がない手順にて切り替えることが可能となる。
これにより、ISO7816−2に準拠した外部端子を持つ処理装置100において、ISO7816−3に準拠したデータ転送を行うインタフェースと、ISO7816−12に準拠したUSB転送を行うインタフェースとを両方同時に使用することができ、ISO7816−3に準拠した少量のデータの転送を行う際は、消費電力が低い外部クロック411を利用して動作し、ISO7816−12に準拠した大容量のデータの転送を行う際は、消費電力が高い内部クロック412を利用して動作することが可能となる。
<実施の形態2>
本発明の実施の形態2である処理装置について説明する。図14は、本実施の形態の処理装置100の内部構成の例を示した図であり、図1に示す処理装置100の構成にコマンド解析モジュール1401を追加した構成となっている。
処理装置100が、実施の形態1における図5のステップ521〜S523の処理等によりISO7816インタフェースを活性化した後、外部端末がUART_I/O112経由で特定のコマンドを処理装置100に入力すると、コマンド解析モジュール1401がそのコマンドを解析し、CPU141をスリープ状態に移行する。
その後、実施の形態1における図8のステップ814〜ステップ815と同様に、システムクロック413を外部クロック411から内部クロック412へと切り替えた後、CPU141の動作を開始させる。さらに、内部クロック412から外部クロック411への切り替えも、上記と同様にUART_I/O112経由の特定のコマンドを用いることにより行うことができる。
また、コマンド解析モジュール1401を使用せず、CPU141に内蔵されたROM等に搭載したファームウェアを用いてコマンドを解析し、実施の形態1の図17におけるステップ1712〜ステップ1714と同様に、システムクロック413を外部クロック411から内部クロック412へと切り替えた後、CPU141の動作を開始させるようにしてもよい。さらに、内部クロック412から外部クロック411への切り替えも同様に行うことができる。
上記手順によりシステムクロック413を外部クロック411から内部クロック412へと切り替えた後、D+113およびD−114が少なくとも10msの間Low状態であることを検知した場合は、USBインタフェースの活性化手順を行った後、ISO7816インタフェースと同時にUSBインタフェースで動作させてもよい。なお、本実施の形態の処理装置100においては、ISO7816インタフェースを使用したコマンドの入力によりシステムクロック413を切り替えるため、USBインタフェースによるデータ転送のために必要なモジュールおよび端子がない構成であっても構わない。
以上に説明したように、本実施の形態の処理装置100によれば、外部からのコマンドによりシステムクロック413を外部クロック411と内部クロック412との間で切り替えることができ、かつ、クロック切り替えの際のノイズによるCPU141の誤動作がない手順にて切り替えることが可能となる。
<実施の形態3>
本発明の実施の形態3である処理装置について図19〜図30を用いて説明する。図19は、本実施の形態の処理装置100の内部構成の例を示した図であり、実施の形態1の図1に示す処理装置100の構成にSWP_I/O1917、SWP用内部オシレータ1921、およびSWP制御回路1944を追加した構成となっている。
SWP_I/O1917は、外部端末と処理装置100との間でSWP(Single Wire Protocol)に準拠したデータ転送を行うための外部インタフェースであり、ETSI(European Telecommunications Standards Institute)の仕様では図2におけるC6端子206が割り当てられている。SWP制御回路1944は、SWPに準拠したデータ転送を実現する回路である。以下では、SWPに準拠したデータ転送を行うインタフェースをSWPインタフェースと記載する。SWPインタフェースによるデータ転送では、例えば、RF回路を有する外部端末と非接触通信によりデータ転送を行うという形態が一般的である。
SWPインタフェースによるデータ転送の場合にも外部クロックを利用することは可能であるが、SWPインタフェースによる処理中に継続して外部端末から外部クロックが供給されるという保証がない。また、USBインタフェースの処理に使用する内部オシレータ120によって生成される内部クロックを利用することも可能であるが、SWPインタフェースは大容量のデータを扱わず、さらに消費電力をできるだけ低減させる必要があるため、USBインタフェースの処理に使用する内部クロックは適さない。
そこで、本実施の形態の処理装置100では、クロック生成回路としてSWP用内部オシレータ1921を設け、SWPインタフェースによる処理の際にはSWP用内部オシレータ1921により生成したクロックを使用する構成をとる。なお、SWP用内部オシレータ1921は、処理装置100の内部に限られず、処理装置100の外部から接続する構成であってもよい。以下では、SWP用内部オシレータ1921が生成したクロックをSWP用内部クロックと記載する。
図20は、SWPインタフェースを持つ処理装置100の初期動作の流れの一例を表した図である。なお、SWPインタフェースは、ISO7816インタフェース、USBインタフェースとは独立して動作する。そのため、SWPインタフェースを持つ処理装置100におけるISO7816インタフェース、USBインタフェースの初期動作の流れは実施の形態1の図3と同様である。
電圧投入前、SWP_I/O1917はLow状態に設定する(ステップ2000)。電圧投入後、規定された動作電圧に達した後、SWP_I/O1917がHigh状態であるかどうかを判定する(ステップ2001)。ステップ2001での判定条件を満たしている場合のみ、以下で述べるSWPインタフェース活性化手順を行う。
SWPインタフェース活性化手順では、処理装置100は、SWP_I/O1917がHigh状態になったことを検知すると、その応答として外部端末にACT_SYNCフレームを送信する(ステップ2002)。ACT_SYNCフレームを受信した外部端末は、受信したACT_SYNCフレームや外部端末の仕様に応じたACT_POWER_MODEフレームを処理装置100に送信する(ステップ2003)。外部端末が送信するACT_POWER_MODEフレームには、外部端末が準拠しているモード(フルパワーモードもしくはローパワーモード)を示すビットや、受信したACT_SYNCフレームに異常があったことを示すビット等が含まれる。
受信したACT_POWER_MODEフレームがACT_SYNCフレームに異常があったことを示している場合(ステップ2004)、ステップ2002に戻って、処理装置100はACT_SYNCフレームの再送を行う。ステップ2004にて、受信したACT_POWER_MODEフレームがACT_SYNCフレームに異常があったことを示していない場合は、外部端末にACT_READYフレームを送信する(ステップ2005)。
以上の処理が正常に行われた場合のみ、SWPインタフェースは活性化され、処理装置100はSWPインタフェースでデータ転送を行う装置として動作する。以上の処理が正常に行われなかった場合は、SWPインタフェースでは動作しない。このとき、ISO7816インタフェースもしくはUSBインタフェースの活性化が正常に行われた場合は、処理装置100は当該インタフェースで動作する。
図21は、本実施の形態の処理装置100におけるクロック制御回路130に含まれるモジュールの構成例を示した図である。ここでは、実施の形態1の図4に示すクロック制御回路130の構成に、SWP検出回路2140、SWP検出信号2141、SWP用内部クロック2118、SWP用内部クロックスタート信号2119およびSWPリセット2125を追加した構成となっている。なお、SWP検出回路2140はSWP制御回路1944に搭載された構成であってもよい。
SWP検出回路2140は、SWP_I/O1917の信号線の状態を監視し、SWP_I/O1917がHigh状態であることを検知すると、SWP検出信号2124をHigh状態にするモジュールである。SWP検出信号2141は、CPU141およびその他のモジュールにSWPインタフェースによりデータが転送されることを通知するための信号である。
SWP用内部オシレータ1921は、SWP検出信号2141がHigh状態になるとSWP用内部クロック2118の生成を開始する。ただし、SWP用内部クロック2118は、その発振が安定するまでCPU141などに供給するのを待つ必要がある。SWP用内部クロックスタート信号2119は、SWP用内部オシレータ1921で生成したSWP用内部クロック2118をCPU141や各インタフェース制御回路などに供給する際にHigh状態にする信号である。SWPリセット2125は、SWPインタフェース経由で転送するデータの処理のために必要なモジュールのみにリセットを供給する信号である。
図22は、本実施の形態の処理装置100におけるSWPインタフェースの活性化手順のタイミングチャートの例を表した図である。まず、電圧投入前、EX_CLK110をLow状態、EX_RESET111をLow状態、UART_I/O112をHigh状態、SWP_I/O1917をLow状態、D+113をHigh状態、D−114をHigh状態に設定する(タイミング2210)。電圧投入後、SWP検出回路2140がSWP_I/O1917がHigh状態であることを検知した場合、SWP検出回路2140はSWP検出信号2141をHigh状態にする(タイミング2220)。
SWP用内部オシレータ1921は、SWP検出信号2141がHigh状態になったことを検知すると、SWP用内部クロック2118を生成する。その後、SWP用内部オシレータ1921内のタイマを利用して、SWP用内部クロック2118の発振が安定するのを待ち、安定した後、クロック切り替え回路410を経由して、CPU141および各インタフェース制御回路などにSWP用内部クロック2118をシステムクロック413として供給する(タイミング2230)。
このとき、クロック切り替え回路410は、SWP用内部クロックスタート信号2219をHigh状態にする。なお、UART制御回路142およびUSB制御回路143にはSWP用内部クロック2118は供給しなくてもよい。また、リセット制御回路420は、SWP検出信号2141がHigh状態であり、かつSWP用内部クロックスタート信号2119がHigh状態であることを確認した後、システムリセット422をHigh状態にする(タイミング2230)。なお、システムリセット422ではなく、SWPリセット2125をHigh状態にしてもよい。
システムリセット422がHigh状態になった後、SWP制御回路1944は、外部端末にACT_SYNCフレームを送信する(タイミング2240)。ACT_SYNCフレームを受信した外部端末は、ACT_POWER_MODEフレームを処理装置100に送信する(タイミング2250)。ACT_POWER_MODEフレームを受信した処理装置100は、そのフレームを確認し、異常がない場合のみ外部端末にACT_READYフレームを送信する(タイミング2260)。なお、以上の処理をSWP制御回路1944の代わりに専用ハードウェアが行う構成としてもよい。
以上の処理は、クロック制御回路130の他に、SWP制御回路1944を利用することにより、全てハードウェアで行うことが可能であるが、以下では、CPU141に内蔵されたROM等に搭載したファームウェアを用いて、SWPインタフェースの活性化を行う方法の例について説明する。
SWPインタフェースの活性化の際に使用するレジスタの構成は、実施の形態1の図15の構成と同様であるが、設定する値が異なる。本実施の形態では、図15において、CLK_SELECT1501は、システムクロック413の供給源を示すビットであり、例えば、“00”の場合は供給源が外部クロック411であることを示し、“01”の場合は供給源が内部クロック412であることを示し、“10”の場合は供給源がSWP用内部クロック2118であることを示す。RESET_SELECT1502は、外部リセット421の有効/無効を示すビットであり、例えば、“0”の場合は外部リセット421が無効であることを示し、“1”の場合は有効であることを示す。
MODE_SELECT1503は、使用可能なインタフェースを示すビットであり、例えば、“001”の場合はISO7816インタフェースが使用可能であることを示し、“010”の場合はUSBインタフェースが使用可能であることを示し、“100”の場合はSWPインタフェースが使用可能であることを示す。さらに、“011”の場合はISO7816インタフェースとUSBインタフェースの両方が使用可能であることを示し、“101”の場合はISO7816インタフェースとSWPインタフェースの両方が使用可能であることを示し、“110”の場合はUSBインタフェースとSWPインタフェースの両方が使用可能であることを示し、“111”の場合は全てのインタフェースが使用可能であることを示す。
DPPU1511は、例えば、“1”を設定するとD+113もしくはD−114をプルアップするビットである。USB_DETECT1512は、D+113およびD−114が少なくとも10ms間Low状態であることをUSB検出回路430が検知すると“1”が設定されるビットである。USB_MODE1513は、USBインタフェースの速度を示すビットである。例えば、“0”の場合はLow Speedであることを示し、“1”の場合はFull Speedであることを示す。
DP1521は、D+113の状態を示すビットであり、例えば、“0”の場合はD+113がLow状態であることを示し、“1”の場合はHigh状態であることを示す。DM1522は、D−114の状態を示すビットであり、例えば、“0”の場合はD−114がLow状態であることを示し、“1”の場合はHigh状態であることを示す。
図23は、本実施の形態の処理装置100におけるファームウェアを用いたSWPインタフェースの活性化手順の例を表したフロー図である。電圧投入前、CLK_SELECT1501には“00”、RESET_SELECT1502には“1”、MODE_SELECT1503には“001”、DPPU1511には“0”、USB_DETECT1512には“0”がそれぞれ設定されている(ステップ2300)。なお、USB_MODE1513、DP1521、DM1522には、処理装置100の仕様によって異なる値が設定され得るが、本実施の形態の処理装置100では全て“1”が設定されているものとする。
電圧投入後、CPU141に対してリセット割り込みが発生すると(ステップ2301)、ファームウェアは、リセット割り込み関数内でMODE_SELECT1503の値を確認する(ステップ2302)。なお、MODE_SELECT1503の値はリセット制御回路420が設定するものとする。
MODE_SELECT1503の値が“100”の場合、ファームウェアはACT_SYNCフレームを外部端末に送信する(ステップ2303)。ACT_SYNCフレームを受信した外部端末は、処理装置100にACT_POWER_MODEフレームを送信する(ステップ2304)。ACT_POWER_MODEフレームを受信した処理装置100は、受信したフレームを確認し(ステップ2305)、送信したACT_SYNCフレームに異常が無い場合のみ外部端末にACT_READYフレームを送信する(ステップ2306)。
以上の処理が正常に行われた場合のみ、SWPインタフェースが活性化され、処理装置100はSWPインタフェースでデータ転送を行う装置として動作することができる。なお、SWP制御回路1944がACT_READYフレームの送信までハードウェアで行い、全て正常に動作した場合のみ、CPU141に対して割り込みを発生させる構成であってもよい。
ステップ2302において、MODE_SELECT1503の値が“100”以外の、“001”や“010”、“011”である場合には、実施の形態1で説明した手順により、ISO7816インタフェースやUSBインタフェースの活性化手順を行う(ステップ2311)。
以上の処理により、処理装置100において、SWPインタフェースを活性化することができる。ここで、図2に示したように、SWPインタフェースによるデータ転送に使用する外部端子とISO7816インタフェースおよびUSBインタフェースによるデータ転送に使用する外部端子とは重複しない。そのため、物理的に3つのインタフェースを同時に使用することも可能である。
しかし、上述した初期動作時の処理の結果、処理装置100は、ISO7816インタフェースで動作しているときは外部クロック411で動作し、USBインタフェースで動作しているときは内部クロック412で動作し、SWPインタフェースで動作しているときはSWP用内部クロック2118で動作している。そのため、使用するインタフェースの組み合わせに応じて、システムクロック413で使用するクロックを統一する必要がある。
一般的に、SWPインタフェースは非接触通信用途として使用する。そのため、SWPインタフェースで動作している最中にシステムクロックを外部クロック411や内部クロック412に切り替えることが時間的に難しい。そのため、SWPインタフェース動作中にISO7816インタフェースもしくはUSBインタフェースの活性化手順が開始された場合、クロック系統の変更は行わず、システムクロック413をSWP用内部クロック2118のままとする。
また、USBインタフェースとSWPインタフェースを比較した場合、USBインタフェースの方が大容量のデータを扱うため、通常、内部クロック412の方がSWP用内部クロック2118より高速である。そのため、USBインタフェース動作中にSWPインタフェースの活性化手順が開始された場合、クロック系統の変更は行わず、システムクロック413を内部クロック412のままとする。
なお、SWPインタフェースによるデータ転送の場合でも外部クロック411を利用することは可能である。しかし、外部クロック411がSWPインタフェースの動作中に供給され続けるという保証はない。そこで、ISO7816インタフェース動作中にSWPインタフェースの活性化が開始された場合、システムクロック413を外部クロック411からSWP用内部クロック2118に変更するものとする。
しかし、処理装置100の動作中に外部クロック411からSWP用内部クロック2118に切り替えると、切り替えの際にノイズが生じ、CPU141が誤動作する可能性があるという問題点がある。そこで本実施の形態の処理装置100では、実施の形態1の図4と同様に、クロック制御回路430に、スリープ信号416およびクロック切り替え信号417を有する構成としている。
以下に、本実施の形態の処理装置100が、USBインタフェースにて動作中にSWPインタフェースの活性化手順を行う方法、およびISO7816インタフェースにて動作中にSWPインタフェースの活性化手順を行う方法について説明する。図24は、本実施の形態の処理装置100の、USBインタフェースまたはISO7816インタフェースにて動作中におけるSWPインタフェースの活性化手順の流れの例を表したフロー図である。また、図25は、本実施の形態の処理装置100の、USBインタフェースにて動作中におけるSWPインタフェースの活性化手順のタイミングチャートの例である。また、図26は、本実施の形態の処理装置100の、ISO7816インタフェースにて動作中におけるSWPインタフェースの活性化手順のタイミングチャートの例である。
まず、処理装置100がUSBインタフェースで動作しているとき、SWP検出回路2140が、SWP_I/O1917がLow状態からHigh状態に変化したことを検知すると(ステップ2401)、SWP活性化手順を開始する。このとき、SWP検出回路2140は、SWP検出信号2141をHigh状態にする(タイミング2510)。
SWP用内部オシレータ1921は、SWP検出信号2141がHigh状態になったことを検知すると、SWP用内部クロック2118を生成する(タイミング2510)。クロック切り替え回路410は、SWP用内部クロック2118が安定した後、SWP用内部クロックスタート信号2119をHigh状態にする(タイミング2520)。このとき、クロック切り替え回路410は、SWP用制御回路1944には内部クロック412を供給する。
リセット制御回路420は、SWP用内部クロックスタート信号2119がHigh状態になったことを検知すると、SWPリセット信号2125をHigh状態にする(タイミング2520)。なお、SWPリセット信号2125をHigh状態にするタイミングは、SWP検出信号2141がHigh状態になったタイミング(タイミング2510)でもよい。
SWP制御回路1944は、SWPリセット信号2125がHigh状態になったことを検知すると、外部端末にACT_SYNCフレームを送信する(ステップ2402、タイミング2530)。なお、SWP制御回路1944は、SWP検出信号2141がHigh状態になったことを検知することにより、外部端末にACT_SYNCフレームを送信してもよい。
ACT_SYNCフレームを受信した外部端末は、処理装置100にACT_POWER_MODEフレームを送信する(ステップ2403、タイミング2540)。ACT_POWER_MODEフレームを受信した処理装置100は、外部端末にACT_READYフレームを送信する(ステップ2404、タイミング2550)。
以上の処理が正常に行われた場合のみ、USBインタフェースでの動作中にSWPインタフェースが活性化され、処理装置100は、USBインタフェースとSWPインタフェースの両方を同時に使用して動作することができる。
処理装置100がISO7816インタフェースで動作しているとき、SWP検出回路2140が、SWP_I/O1917がLow状態からHigh状態に変化したことを検知すると(ステップ2411)、SWP活性化手順を開始する。このとき、SWP検出回路2140は、SWP検出信号2141をHigh状態にする(タイミング2610)。
SWP用内部オシレータ1921は、SWP検出信号2141がHigh状態になったことを検知すると、SWP用内部クロック2118を生成する(ステップ2412、タイミング2610)。クロック切り替え回路410は、SWP用内部クロック2118が安定した後、SWP用内部クロックスタート信号2119をHigh状態にし、外部クロック411およびSWP用内部クロック2118の両方が供給されたことを確認した後、クロック切り替え信号417をHigh状態にする(タイミング2620)。また、リセット制御回路420は、SWP用内部クロックスタート信号2119がHigh状態になったことを検知すると、SWPリセット信号2125をHigh状態にする(タイミング2620)。
CPU141は、クロック切り替え信号417がHigh状態になったことを検知すると、スリープ状態に移行するために必要な処理(レジスタの設定や現在の状態の保存等)およびSWPインタフェースの処理に関するリセット処理を行う。必要な処理が完了した後、スリープ信号416をHigh状態にし、スリープ状態に移行する(ステップ2413、タイミング2630)。
クロック切り替え回路410は、スリープ信号416がHigh状態になったことを検知すると、システムクロック413を外部クロック411からSWP用内部クロック2118へと切り替える(ステップ2414、タイミング2640)。システムクロック413を切り替えた後、CPU141に割り込み信号を送信し、CPU141の動作を再開させる(ステップ2415)。その際に、クロック切り替え回路410は、クロック切り替え信号417およびスリープ信号416をLow状態にする(タイミング2640)。
CPU141の動作再開後、SWP制御回路1944は、外部端末にACT_SYNCフレームを送信する(ステップ2416、タイミング2650)。ACT_SYNCフレームを受信した外部端末は、処理装置100にACT_POWER_MODEフレームを送信する(ステップ2417)。ACT_POWER_MODEフレームを受信した処理装置100は、外部端末にACT_READYフレームを送信する(ステップ2418)。
以上の処理が正常に行われた場合のみ、ISO7816インタフェースでの動作中にSWPインタフェースが活性化され、処理装置100は、ISO7816インタフェースとSWPインタフェースの両方を同時に使用して動作することができる。なお、ISO7816インタフェースでの動作中にSWPインタフェース活性化手順を行う際に、USBインタフェースでの動作中にSWPインタフェース活性化手順を行う場合と同様に、外部クロックからSWP用内部クロック2118へのシステムクロック413の切り替えを行わず、システムクロック413を外部クロック411のまま動作するようにしてもよい。
処理装置100がUSBインタフェースおよびISO7816インタフェースの両方にて動作中にSWPインタフェースの活性化手順を行う場合は、ステップ2401〜ステップ2404と同様の方法でSWPインタフェースの活性化を行うものとする。また、処理装置100がUSBインタフェースおよびISO7816インタフェースの両方にて動作中にSWPインタフェースの活性化手順を行う場合に、ステップ2411〜ステップ2418と同様の方法でシステムクロック413をSWP用内部クロック2118に切り替えても良い。
以上の処理は、クロック制御回路130の他に、UART制御回路142、USB制御回路143や、SWP制御回路1944を利用することにより、全てハードウェアで行うことが可能であるが、以下では、CPU141に内蔵されたROM等に搭載したファームウェアを用いて、ISO7816インタフェースでの動作中にSWPインタフェースの活性化を行う方法の例について説明する。
図27は、本実施の形態の処理装置100の、ファームウェアを用いたISO7816インタフェースにて動作中におけるSWPインタフェースの活性化手順の流れの例を表したフロー図である。処理装置100がISO7816インタフェースで動作しているとき、CLK_SELECT1501には“00”、RESET_SELECT1502には“1”、MODE_SELECT1503には“001”、USB_DETECT1512には“0”がそれぞれ設定されている(ステップ2700)。
処理装置100がISO7816インタフェースで動作しているとき、クロック制御回路130もしくはSWP制御回路1944が、SWP_I/O1917がLow状態からHigh状態に変化したことを検知すると、CPU141に対してSWP検出割り込みを発生させる(ステップ2701)。ファームウェアは、SWP検出割り込み関数内で、CLK_SELECT1501に“10”を設定し(ステップ2702)、スリープ命令を実行してCPU141をスリープ状態に移行させる(ステップ2703)。
スリープ命令が実行されるとスリープ信号416がHigh状態となるため、クロック切り替え回路410がシステムクロック413をSWP用内部クロック2118へと切り替え、CPU141に割り込み信号を送信し、CPU141の動作を再開させる(ステップ2704)。CPU141の動作が再開した後、ファームウェアは、外部端末にACT_SYNCフレームを送信する(ステップ2705)。
ACT_SYNCフレームを受信した外部端末は、処理装置100にACT_POWER_MODEフレームを送信する(ステップ2706)。ACT_POWER_MODEフレームを受信した処理装置100は、外部端末にACT_READYフレームを送信する(ステップ2707)。
以上の処理が正常に行われた場合のみ、ISO7816インタフェースでの動作中にSWPインタフェースが活性化され、処理装置100は、ISO7816インタフェースとSWPインタフェースの両方を同時に使用して動作することができる。なお、処理装置100がUSBインタフェース、もしくはISO7816インタフェースとUSBインタフェースの両方で動作中に、SWPインタフェース活性化手順においてシステムクロック413を内部クロック412からSWP用クロック2118に切り替える場合も、ステップ2701〜ステップ2707と同様の手順で行うことが可能である。
次に、本実施の形態の処理装置100が、ISO7816インタフェースおよびSWPインタフェースの両方にて動作中に、SWPインタフェースを非活性化する方法について説明する。なお、ISO7816インタフェースおよびSWPインタフェースの両方にて動作中にISO7816インタフェースを非活性化する際は、実施の形態1の図11におけるステップ1101〜ステップ1102およびタイミング1210〜タイミング1220と同様の手順で行うことができる。
図28は、本実施の形態の処理装置100の、ISO7816インタフェースおよびSWPインタフェースの両方にて動作中におけるSWPインタフェースの非活性化手順の流れの例を表したフロー図である。また、図29は、本実施の形態の処理装置100の、ISO7816インタフェースおよびSWPインタフェースの両方にて動作中におけるSWPインタフェースの非活性化手順のタイミングチャートの例である。
処理装置100がISO7816インタフェースおよびSWPインタフェースの両方にて動作している際に、SWP検出回路2140が、SWP_I/O1917がDe−Active状態になったことを検知した場合(ステップ2801)、SWPインタフェース非活性化手順を開始する。SWP検出回路2140は、SWP_I/O1917がDe−Active状態になったことを検知すると、SWP検出信号2141をLow状態にする(タイミング2910)。
CPU141は、SWP検出信号2141がLow状態になったことを検知すると、スリープ状態に移行するために必要な処理(レジスタの設定や現在の状態の保存等)を行う。必要な処理が完了した後、スリープ信号416をHigh状態にし、スリープ状態に移行する(ステップ2802、タイミング2920)。
クロック切り替え回路410は、スリープ信号416がHigh状態になったことを検
知すると、システムクロック413をSWP用内部クロック2118から外部クロック411へと切り替える(ステップ2803、タイミング2930)。このとき、SWP用内部クロック2118は停止してもよい。なお、SWP用内部クロックスタート信号2119をLow状態にすることによりSWP用内部クロック2118を停止させることも可能である(タイミング2930)。
システムクロック413の切り替え後、CPU141に割り込み信号を送信し、外部クロック411にてCPU141の動作を再開させる(ステップ2804、タイミング2940)。以上の処理が正常に行われたとき、SWPインタフェースは非活性化され、処理装置100は、ISO7816インタフェースのみで動作することになる。
以上の処理は、クロック制御回路130の他に、UART制御回路144やSWP制御回路1944を利用することにより、全てハードウェアで行うことが可能であるが、以下では、CPU141に内蔵されたROMに搭載したファームウェアを用いてISO7816インタフェースおよびSWPインタフェースの両方にて動作中にSWPインタフェースの非活性化を行う方法の例について説明する。
図30は、本実施の形態の処理装置100の、ファームウェアを用いたISO7816インタフェースおよびSWPインタフェースの両方にて動作中におけるSWPインタフェースの非活性化手順の流れの例を表したフロー図である。処理装置100がISO7816インタフェースおよびSWPインタフェースの両方にて動作しているとき、CLK_SELECT1501には“10”、RESET_SELECT1502には“0”、MODE_SELECT1503には“101”、USB_DETECT1512には“1”がそれぞれ設定されている(ステップ3000)。
SWP検出回路2140もしくはSWP制御回路1944が、SWP_I/O1917がDe−Active状態になったことを検知すると、CPU141にSWP非活性化割り込みを発生させる(ステップ3001)。ファームウェアは、SWP非活性化割り込み関数内で、CLK_SELECT1501に“00”を設定し(ステップ3002)、スリープ命令を実行してCPU141をスリープ状態に移行させる(ステップ3003)。
スリープ命令が実行されるとスリープ信号416がHigh状態となるため、クロック切り替え回路410がシステムクロック413を外部クロック411へと切り替え、CPU141に割り込み信号を送信し、CPU141の動作を再開させる(ステップ3004)。以上の処理が正常に行われたとき、SWPインタフェースは非活性化され、処理装置100は、ISO7816インタフェースのみで動作することになる。
処理装置100がUSBインタフェースおよびSWPインタフェースにて動作している際に、USBインタフェースの非活性化によってシステムクロック413のクロック系統を変更する場合は、実施の形態1の図11のステップ1111〜ステップ1114、もしくは図18のステップ1811〜ステップ1814と同様な手順によって行うことができる。また、SWPインタフェースの非活性化によってシステムクロック413のクロック系統を変更する場合は、図28のステップ2801〜ステップ2804、もしくは図30のステップ3001〜ステップ3004と同様な手順によって行うことができる。
以上に説明したように、本実施の形態の処理装置100によれば、SWPに準拠したデータ転送を行うためのSWPインタフェースを有する場合であっても、システムクロック413を外部クロック411、内部クロック412、およびSWP用内部クロック2118との間で切り替えることができ、かつ、クロック切り替えの際のノイズによるCPU141の誤動作がない手段にて切り替えることが可能となる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
100…処理装置、110…EX_CLK、111…EX_RESET、112…UART_I/O、113…D+、114…D−、115…Vcc、116…GND、120…内部オシレータ、130…クロック制御回路、141…CPU、142…UART制御回路、143…USB制御回路、
201…C1端子、202…C2端子、203…C3端子、204…C4端子、205…C5端子、206…C6端子、207…C7端子、208…C8端子、
410…クロック切り替え回路、411…外部クロック、412…内部クロック、413…システムクロック、414…外部クロック検出信号、415…内部クロックスタート信号、416…スリープ信号、417…クロック切り替え信号、420…リセット制御回路、421…外部リセット、422…システムリセット、423…UARTリセット、424…USBリセット、430…USB検出回路、431…USB検出信号、
1401…コマンド解析モジュール、
1501…CLK_SELECT、1502…RESET_SELECT、1503…MODE_SELECT、1511…DPPU、1512…USB_DETECT、1513…USB_MODE、1521…DP、1522…DM、
1917…SWP_I/O、1921…SWP用内部オシレータ、1944…SWP制御回路、
2118…SWP用内部クロック、2119…SWP用内部クロックスタート信号、2125…SWPリセット、2140…SWP検出回路、2141…SWP検出信号。