(57)【要約】【課題】上位のホスト装置にデータを送信しつつ、周期処理を適切に行うことを可能にする。【解決手段】光トランシーバの制御方法は、周期処理を一時的に中断するとともに、監視用データを送信するための割込み処理を行うステップと、周期処理を一周期行うのに要する処理時間が所定値よりも小さいとき、割込み処理の処理モードを第１処理モードに設定し、処理時間が所定値よりも大きいとき、処理モードを第２処理モードに設定するステップと、を備える。割込み処理を行うステップは、第１データを送信レジスタに格納してクロック信号のストレッチを解除した後に、次に送信される第２データをデータ記憶部から読み出すステップと、第１データを送信レジスタに格納して第２データをデータ記憶部から読み出した後に、クロック信号のストレッチを解除するステップと、を含む。【選択図】図９
2020141216.tif 000002
【特許請求の範囲】
【請求項１】
外部のホスト装置から送信されるクロック信号に同期して、内部のデータ記憶部に格納されている監視用データを前記ホスト装置に送信する光トランシーバの制御方法であって、
周期処理を周期的に行うステップと、
前記周期処理を一時的に中断するとともに、前記クロック信号をストレッチして前記監視用データを送信するための割込み処理を行うステップと、
送信レジスタに格納されている前記監視用データを、前記クロック信号に同期して前記ホスト装置に１ビットずつ送信するステップと、
前記周期処理を一周期行うのに要する処理時間が所定値よりも小さいとき、前記割込み処理の処理モードを第１処理モードに設定し、前記処理時間が前記所定値よりも大きいとき、前記処理モードを第２処理モードに設定するステップと、
を備え、
前記割込み処理を行うステップは、
前記処理モードが前記第１処理モードに設定されている場合に行うステップであって、前記監視用データである第１データを前記送信レジスタに格納して前記クロック信号のストレッチを解除した後に、前記第１データの次に送信される前記監視用データである第２データを前記データ記憶部から読み出すステップと、
前記処理モードが前記第２処理モードに設定されている場合に行うステップであって、前記第１データを前記送信レジスタに格納して前記第２データを前記データ記憶部から読み出した後に、前記クロック信号のストレッチを解除するステップと、
を含む、光トランシーバの制御方法。
【請求項２】
前記周期処理を周期的に行うステップは、
電気信号を光信号に変換する光送信素子の動作を制御するステップと、
光信号を電気信号に変換する光受信素子の動作を制御するステップと、
前記光送信素子の動作を制御するステップ及び前記光受信素子の動作を制御するステップにおいて得られた結果に応じて前記データ記憶部に格納されている前記監視用データを更新するステップと、を含む、請求項１に記載の光トランシーバの制御方法。
【請求項３】
前記ホスト装置への前記監視用データの送信は、Ｉ２Ｃ（Inter-Integrated  Circuit）規格に準拠して行われ、
前記クロック信号の周波数は、４００ｋＨｚ〜１ＭＨｚである、請求項１または請求項２に記載の光トランシーバの制御方法。
【請求項４】
外部のホスト装置から送信されるクロック信号に同期して、監視用データを前記ホスト装置に送信する光トランシーバであって、
周期処理を周期的に行うプロセッサと、
前記監視用データが格納されるデータ記憶部と、
前記データ記憶部から読み出された前記監視用データを一時的に格納するとともに前記クロック信号に同期して前記監視用データを前記ホスト装置に１ビットずつ送信する送信レジスタと、
を備え、
前記プロセッサは、前記周期処理を一時的に中断するとともに、前記クロック信号をストレッチして前記データ記憶部に格納されている前記監視用データを送信するための割込み処理を行い、
前記プロセッサは、前記周期処理を一周期行うのに要する処理時間が所定値よりも小さいとき、前記割込み処理の処理モードを第１処理モードに設定し、前記処理時間が前記所定値よりも大きいとき、前記処理モードを第２処理モードに設定し、
前記プロセッサは、前記割込み処理において、前記処理モードが前記第１処理モードに設定されている場合、前記監視用データである第１データを前記送信レジスタに格納して前記クロック信号のストレッチを解除した後に、前記第１データの次に送信する前記監視用データである第２データを前記データ記憶部から読み出し、
前記プロセッサは、前記割込み処理において、前記処理モードが前記第２処理モードに設定されている場合、前記第１データを前記送信レジスタに格納するとともに前記第２データを前記データ記憶部から読み出した後に、前記クロック信号のストレッチを解除する、
光トランシーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、光トランシーバの制御方法及び光トランシーバに関する。
【背景技術】
【０００２】
特許文献１には、Ｉ２Ｃ（Inter-Integrated  Circuit）インタフェース仕様に準拠した通信方式が用いられたデータ送信制御方法が記載されている。この特許文献１に記載のデータ送信制御方法では、スレーブ装置は、マスタ装置から１バイトのデータを受信すると、クロックストレッチを設定し、受信したデータがスレーブ装置からマスタ装置へのデータ送信要求であると判定した場合に、確認応答情報をマスタ装置に送信する。その後、スレーブ装置は、クロックストレッチを解除して、送信レジスタに格納されているデータを送信するとともに、データ記憶部から次に送信するデータを読み出して送信レジスタへ格納している。これにより、データの読み出し時間に起因した送出タイミングの遅延が抑制されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００６／０９０４７３号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
Ｉ２Ｃインタフェース仕様に準拠した通信方式（以下、「Ｉ２Ｃ通信方式」という。）を用いて、上位のホスト装置との間でデータの送受信を行う光トランシーバがある。この光トランシーバに搭載される制御装置は、ホスト装置とのデータの送受信（Ｉ２Ｃスレーブ処理）に加えて、他の処理を周期的に行う場合がある。周期的に行う処理（周期処理）として、例えば、光トランシーバに搭載されるＴＯＳＡ（Transmitter  Optical  Sub-Assembly）から出力されている光信号の監視等が挙げられる。この場合、制御装置は、ホスト装置からデータの送信要求があると、Ｉ２Ｃスレーブ処理を割込み処理として優先して行う。つまり、制御装置は、割込み処理を行っていない間に周期処理を行う必要がある。
【０００５】
特許文献１に記載のデータ送信制御方法を用いてホスト装置にデータを送信しつつ周期処理を行う場合、制御装置は、ホスト装置からのデータ送信要求の判定を行ってから次に送信するデータを読み出して送信レジスタへ格納するまでの処理を割込み処理として行う。特許文献１に記載のデータ送信制御方法では、クロックストレッチが解除された後に、送信レジスタに格納されているデータの送信と並行して、次に送信するデータが読み出されている。このような場合に、制御装置とホスト装置との間の通信速度が速くなるにつれて１バイトのデータを送信する時間が短くなるので、１つの割込み処理が終了してから次の割込み処理までの時間間隔が短くなる。このため、周期処理を行う時間が十分に確保されずに、周期処理が滞ってしまうおそれがある。
【０００６】
本開示では、上位のホスト装置にデータを送信しつつ、周期処理を適切に行うことが可能な光トランシーバの制御方法及び光トランシーバが提供される。
【課題を解決するための手段】
【０００７】
本開示の一側面に係る光トランシーバの制御方法は、外部のホスト装置から送信されるクロック信号に同期して、内部のデータ記憶部に格納されている監視用データをホスト装置に送信する光トランシーバの制御方法である。この制御方法は、周期処理を周期的に行うステップと、周期処理を一時的に中断するとともに、クロック信号をストレッチして監視用データを送信するための割込み処理を行うステップと、送信レジスタに格納されている監視用データを、クロック信号に同期してホスト装置に１ビットずつ送信するステップと、周期処理を一周期行うのに要する処理時間が所定値よりも小さいとき、割込み処理の処理モードを第１処理モードに設定し、処理時間が所定値よりも大きいとき、処理モードを第２処理モードに設定するステップと、を備える。割込み処理を行うステップは、処理モードが第１処理モードに設定されている場合に行うステップであって、監視用データである第１データを送信レジスタに格納してクロック信号のストレッチを解除した後に、第１データの次に送信される監視用データである第２データをデータ記憶部から読み出すステップと、処理モードが第２処理モードに設定されている場合に行うステップであって、第１データを送信レジスタに格納して第２データをデータ記憶部から読み出した後に、クロック信号のストレッチを解除するステップと、を含む。
【発明の効果】
【０００８】
本開示によれば、上位のホスト装置にデータを送信しつつ、周期処理を適切に行うことが可能となる。
【図面の簡単な説明】
【０００９】
【図１】図１は、一実施形態に係る光トランシーバの概略構成を示すブロック図である。
【図２】図２は、図１に示されるＣＰＵのハードウェア構成を示すブロック図である。
【図３】図３は、レジスタのメモリマップの構成例を示す図である。
【図４】図４は、図１に示されるＣＰＵのＲＡＭ領域内のメモリマップの構成例を示す図である。
【図５】図５は、図１に示されるＣＰＵ内のホスト装置とのＩ２Ｃ通信に関するハードウェア構成を示すブロック図である。
【図６】図６は、周期処理の一例を示すフローチャートである。
【図７】図７は、プロセッサが行うＩ２Ｃスレーブ処理のタイミングを説明するための図である。
【図８】図８は、プロセッサが行うＩ２Ｃスレーブ処理を示すフローチャートである。
【図９】図９は、周期処理の時間に応じた処理を実行するＩ２Ｃスレーブ処理を示すフローチャートである。
【図１０】図１０は、Ｉ２Ｃ通信とＩ２Ｃスレーブ処理との関係を説明するためのタイミングチャートである。
【図１１】図１１は、Ｉ２Ｃ通信とＩ２Ｃスレーブ処理との関係を説明するためのタイミングチャートである。
【図１２】図１２は、Ｉ２Ｃ通信とＩ２Ｃスレーブ処理との関係を説明するためのタイミングチャートである。
【発明を実施するための形態】
【００１０】
［本開示の実施形態の説明］
最初に本開示の実施形態の内容を列記して説明する。
【００１１】
本開示の一側面に係る光トランシーバの制御方法は、外部のホスト装置から送信されるクロック信号に同期して、内部のデータ記憶部に格納されている監視用データをホスト装置に送信する光トランシーバの制御方法である。この制御方法は、周期処理を周期的に行うステップと、周期処理を一時的に中断するとともに、クロック信号をストレッチして監視用データを送信するための割込み処理を行うステップと、送信レジスタに格納されている監視用データを、クロック信号に同期してホスト装置に１ビットずつ送信するステップと、周期処理を一周期行うのに要する処理時間が所定値よりも小さいとき、割込み処理の処理モードを第１処理モードに設定し、処理時間が所定値よりも大きいとき、処理モードを第２処理モードに設定するステップと、を備える。割込み処理を行うステップは、処理モードが第１処理モードに設定されている場合に行うステップであって、監視用データである第１データを送信レジスタに格納してクロック信号のストレッチを解除した後に、第１データの次に送信される監視用データである第２データをデータ記憶部から読み出すステップと、処理モードが第２処理モードに設定されている場合に行うステップであって、第１データを送信レジスタに格納して第２データをデータ記憶部から読み出した後に、クロック信号のストレッチを解除するステップと、を含む。
【００１２】
この光トランシーバの制御方法では、割込み処理の処理モードが第１処理モードに設定されている場合、クロック信号のストレッチが解除された後に、第１データの次に送信される第２データがデータ記憶部から読み出される。クロック信号のストレッチが解除されると、送信レジスタに格納されている第１データがホスト装置に送信されるので、第１処理モードでは、第１データがホスト装置に送信されている間、第２データの読み出しを含む割込み処理が行われる。一方、割込み処理の処理モードが第２処理モードに設定されている場合、第２データがデータ記憶部から読み出された後に、クロック信号のストレッチが解除される。つまり、第２処理モードでは、第２データの読み出しを含む割込み処理が終了した後に、送信レジスタに格納されている第１データがホスト装置に送信される。これにより、処理モードが第２処理モードに設定されている場合には、割込み処理の終了後において第１データがホスト装置に送信されている間、周期処理を行う時間が確保される。周期処理を一周期行うのに要する処理時間が所定値よりも大きい場合には、割込み処理によって周期処理が滞っていると考えられる。上記構成では、処理時間が所定値よりも大きいときに、処理モードが第２処理モードに設定されるので、周期処理を行う時間が確保される。その結果、上位のホスト装置にデータを送信しつつ、周期処理を適切に行うことが可能となる。
【００１３】
周期処理を周期的に行うステップは、電気信号を光信号に変換する光送信素子の動作を制御するステップと、光信号を電気信号に変換する光受信素子の動作を制御するステップと、光送信素子の動作を制御するステップ及び光受信素子の動作を制御するステップにおいて得られた結果に応じてデータ記憶部に格納されている監視用データを更新するステップと、を含んでいてもよい。
【００１４】
この場合、光送信素子及び光受信素子の制御、並びに監視用データの更新を適切に行うことができるので、光トランシーバによる光信号の適切な送受信が継続され、光トランシーバ内の異常の有無を適切なタイミングで把握することが可能となる。
【００１５】
ホスト装置への監視用データの送信は、Ｉ２Ｃ（Inter-Integrated  Circuit）規格に準拠して行われてもよい。クロック信号の周波数は、４００ｋＨｚ〜１ＭＨｚであってもよい。
【００１６】
１つの監視用データを送信する時間は、クロック信号の周期と当該監視用データのビット数とに応じて定まる。クロック信号の周期が１マイクロ秒〜２．５マイクロ秒であると、１つの監視用データである第１データを送信する時間に対して、次に送信する監視用データである第２データを読み出す処理に要する時間が大きくなり、周期処理を行う時間が確保されないおそれがある。上記構成では、クロック信号の周期が１マイクロ秒〜２．５マイクロ秒であっても、周期処理の処理時間が大きいと、割込み処理の処理モードが第２処理モードに設定されるので、周期処理を行う時間が確保され周期処理を適切に行うことが可能となる。
【００１７】
本開示の他の側面に係る光トランシーバは、外部のホスト装置から送信されるクロック信号に同期して、監視用データをホスト装置に送信する光トランシーバである。この光トランシーバは、周期処理を周期的に行うプロセッサと、監視用データが格納されるデータ記憶部と、データ記憶部から読み出された監視用データを一時的に格納するとともにクロック信号に同期して監視用データをホスト装置に１ビットずつ送信する送信レジスタと、を備える。プロセッサは、周期処理を一時的に中断するとともに、クロック信号をストレッチしてデータ記憶部に格納されている監視用データを送信するための割込み処理を行う。プロセッサは、周期処理を一周期行うのに要する処理時間が所定値よりも小さいとき、割込み処理の処理モードを第１処理モードに設定し、処理時間が所定値よりも大きいとき、処理モードを第２処理モードに設定する。プロセッサは、割込み処理において、処理モードが第１処理モードに設定されている場合、監視用データである第１データを送信レジスタに格納してクロック信号のストレッチを解除した後に、第１データの次に送信する監視用データである第２データをデータ記憶部から読み出す。プロセッサは、割込み処理において、処理モードが第２処理モードに設定されている場合、第１データを送信レジスタに格納するとともに第２データをデータ記憶部から読み出した後に、クロック信号のストレッチを解除する。
【００１８】
この光トランシーバでは、割込み処理の処理モードが第１処理モードに設定されている場合、クロック信号のストレッチが解除された後に、第１データの次に送信される第２データがデータ記憶部から読み出される。クロック信号のストレッチが解除されると、送信レジスタに格納されている第１データがホスト装置に送信されるので、第１処理モードでは、第１データがホスト装置に送信されている間、第２データの読み出しを含む割込み処理が行われる。一方、割込み処理の処理モードが第２処理モードに設定されている場合、第２データがデータ記憶部から読み出された後に、クロック信号のストレッチが解除される。つまり、第２処理モードでは、第２データの読み出しを含む割込み処理が終了した後に、送信レジスタに格納されている第１データがホスト装置に送信される。これにより、処理モードが第２処理モードに設定されている場合には、割込み処理の終了後において第１データがホスト装置に送信されている間、周期処理を行う時間が確保される。周期処理を一周期行うのに要する処理時間が所定値よりも大きい場合には、割込み処理によって周期処理が滞っていると考えられる。上記構成では、処理時間が所定値よりも大きいときに、処理モードが第２処理モードに設定されるので、周期処理を行う時間が確保される。その結果、上位のホスト装置にデータを送信しつつ、周期処理を適切に行うことが可能となる。
【００１９】
［本開示の実施形態の詳細］
次に、本開示の実施形態に係る光トランシーバ及び光トランシーバの制御方法の具体例を、図面を参照しつつ以下に説明する。図面の説明において同一又は相当する部分には同一の符号を付し、重複する説明を省略する。
【００２０】
（光トランシーバの構成）
図１は、一実施形態に係る光トランシーバの概略構成を示すブロック図である。図２は、図１に示されるＣＰＵの構成を示すブロック図である。図３は、レジスタのメモリマップの構成例を示す図である。図４は、図１に示されるＣＰＵのＲＡＭ領域内のメモリマップの構成例を示す図である。図５は、図１に示されるＣＰＵ内のＩ２Ｃ通信に関するハードウェア構成を示すブロック図である。
【００２１】
図１に示される光トランシーバ２は、光通信システム等で光信号を送受信するために使用される機器である。光トランシーバ２は、光−電気相互変換機能、及び電気波形整形機能等を備える。光トランシーバ２は、例えば、ＱＳＦＰ２８  ＭＳＡ（Quad  Small  Form-factor  Pluggable  28  Multi-Source  Agreement）規格に準拠して伝送速度が１００Ｇｂｐｓ以上である光通信を実現する。図１に示されるように、光トランシーバ２は、外部のホスト装置９０（上位のホスト装置）と通信線Ｌ１，Ｌ２を介して通信可能に接続される。光トランシーバ２は、ＴＯＳＡ４と、ＬＤＤ（Laser  Diode  Driver）６と、ＣＤＲ（Clock  Data  Recovery）８と、ＲＯＳＡ（Receiver  Optical  Sub-assembly）１０と、ＴＩＡ（Transimpedance  Amplifier）１２と、ＣＤＲ１４と、ＣＰＵ（Central  Processing  Unit）２０と、を備える。
【００２２】
ＴＯＳＡ４は、電気信号を光信号に変換して当該光信号を送信するためのデバイスである。ＴＯＳＡ４は、例えば４チャネルの光信号（それぞれが互いに異なるピーク波長を有する４つの光信号）を生成するための発光素子である４つのレーザダイオード、及び光合波器を内蔵している。ＴＯＳＡ４内のレーザダイオードは、電気信号を光信号に変換する光送信素子である。ここで、チャネルは、電気信号あるいは光信号を伝達する伝送路を意味する。複数のチャネルは、互いに並行に設置され、それぞれ独立な信号を伝送する複数の伝送路を意味する。ＴＯＳＡ４は、外部のホスト装置９０から送信される４チャネルの電気信号（電気入力信号）ＴＸに基づいて、それぞれ波長の異なる４チャネルの光信号を生成し、それらの光信号を光合波器で合成（多重化）して、多重化光信号Ｏｏｕｔとして出力する。多重化光信号Ｏｏｕｔは、互いに異なる波長を有し、それぞれ独立した情報を伝達する４つの光信号を含んでいる。
【００２３】
ＬＤＤ６は、ＴＯＳＡ４内の４つのレーザダイオードを駆動する回路ユニットである。ＬＤＤ６は、４チャネルの電気信号ＴＸに基づいてＴＯＳＡ４内の４つのレーザダイオードをそれぞれ駆動する。具体的には、ＬＤＤ６は、ＴＯＳＡ４内の４つのレーザダイオードをそれぞれ駆動する４つの駆動信号を生成する。ＴＯＳＡ４は、駆動信号に応じて変調された光信号を４つのレーザダイオードそれぞれから出力させる。なお、ＬＤＤ６は、ＴＯＳＡ４に内蔵されていてもよい。ＣＤＲ８は、４つの電気信号ＴＸを波形整形する回路ユニットである。波形整形によってＬＤＤ６に入力される電気信号の波形品質が向上すると駆動信号の波形品質も向上する。結果として、レーザダイオードから出力される光信号の波形品質が向上して、光トランシーバ２の通信性能の向上に寄与する。
【００２４】
ＲＯＳＡ１０は、光信号を受信して当該光信号を電気信号に変換するためのデバイスである。ＲＯＳＡ１０は、４チャネルの光信号を受信するための受光素子である４つのフォトダイオード、及び光分波器を内蔵している。ＲＯＳＡ１０内のフォトダイオードは、光信号を電気信号に変換する光受信素子である。ＲＯＳＡ１０は、外部から多重化光信号Ｏｉｎを受け、光分波器によって多重化光信号Ｏｉｎを互いに波長の異なる４チャネルの光信号に分波する。ＲＯＳＡ１０は、４チャネルの光信号を生成して、それらの光信号を光電流（電気信号）にそれぞれ変換する。
【００２５】
ＴＩＡ１２は、光電流を電気信号（電気出力信号）ＲＸに変換する回路ユニットである。ＴＩＡ１２は、ＲＯＳＡ１０内に設けられた４チャネルのフォトダイオードから出力された４つの光電流を電気信号ＲＸにそれぞれ変換する。なお、ＴＩＡ１２は、ＲＯＳＡ１０に内蔵されていてもよい。ＣＤＲ１４は、ＴＩＡ１２からの４つの電気信号ＲＸを波形整形する回路ユニットである。ＴＩＡ１２から出力される電気信号のジッタは大きいが、ＣＤＲ１４によってジッタが除去されて、ディジタル信号として扱いやすいジッタの小さい電気信号が出力される。ＣＤＲ８，１４を構成する回路は、集積回路（ＩＣ：Integrated  Circuit）であってもよい。ＣＤＲ８，１４は、一体に構成されていてもよい。換言すると、光トランシーバ２は、送受信一体型のＣＤＲを備えていてもよい。ＣＤＲを構成するＩＣは、ＳＥＲＤＥＳ（シリアライザ／デシリアライザ）又はＧｅａｒＢｏｘ  ＩＣであってもよい。
【００２６】
ＣＰＵ２０は、光トランシーバ２内の各要素を制御するコントローラ（演算装置）として機能する。ＣＰＵ２０は、ワンチップマイクロコントローラによって構成されている。なお、光トランシーバ２内に設けられるコントローラが、ＦＰＧＡ（Field  Programmable  Gate  Array）あるいはＣＰＬＤ（Complex  Programmable  Logic  Device）等のロジック回路、又はこれらの組み合わせによって構成される場合もある。本実施形態に係る光トランシーバ２では、周期処理及びＩ２Ｃスレーブ処理を実行する単一のＣＰＵ２０が設けられている。周期処理は、光トランシーバ２において周期的に繰り返して行われる処理である。Ｉ２Ｃスレーブ処理は、Ｉ２Ｃ通信方式に基づいてホスト装置９０からの送信要求等に応じて行う割込み処理である。つまり、Ｉ２Ｃスレーブ処理は周期処理よりも優先して行われる。周期処理及びＩ２Ｃスレーブ処理の具体例については後述する。
【００２７】
ＣＰＵ２０は、内蔵する内部メモリ（後述のフラッシュＲＯＭ２４）に格納されたプログラム（ファームウェア）を実行して、例えば、多重化光信号Ｏｏｕｔ及び電気信号ＲＸを出力するための動作制御を行う。ホスト装置９０とＣＰＵ２０との間の通信線Ｌ１を介した通信は、Ｉ２Ｃ通信方式に基づいて行われる。このＩ２Ｃ通信方式においては、ホスト装置９０が「マスタ装置」として機能し、光トランシーバ２（ＣＰＵ２０）が「スレーブ装置」として機能する。通信線Ｌ１には、ホスト装置９０からＣＰＵ２０へのＩ２Ｃ通信方式に基づいたクロック信号の送信に利用されるクロック信号線（以下、「ＳＣＬ信号線」という。）、及びホスト装置９０とＣＰＵ２０との間においてデータの送受信に利用されるデータ信号線（以下、「ＳＤＡ信号線」という。）が含まれる。
【００２８】
このＩ２Ｃ通信方式に基づいた通信が行われることにより、ホスト装置９０において、光トランシーバ２の動作状態の監視、又は光トランシーバ２の動作制御が可能とされている。クロック信号の周波数は、一例として４００ｋＨｚ〜１ＭＨｚであってもよい。なお、本明細書において「クロック信号」及び「クロック信号の周波数」とは、Ｉ２Ｃ通信方式において用いられるクロック信号、及び当該クロック信号の周波数をそれぞれ意味する。また、以下の説明において、クロック信号を「ＳＣＬ信号」と称することもあり、ホスト装置９０と光トランシーバ２との間で送受されるデータを「ＳＤＡ信号」と称することもある。
【００２９】
ＣＰＵ２０は、アラーム信号を通知するための通信線Ｌ２を介してホスト装置９０に接続される。アラーム信号は、光トランシーバ２内のいずれかの要素が異常状態であることを示す信号である。ＣＰＵ２０には、ＬＤＤ６、ＣＤＲ８，１４及びＴＩＡ１２と、ＳＰＩ（Serial  Peripheral  Interface）又はＩ２Ｃ通信方式等のシリアル通信を用いて接続するための内部通信バスＬ３が接続される。ＣＰＵ２０には、ＬＤＤ６にＴｘＤＩＳＡＢＬＥ信号を送信するための内部通信線Ｌ４が接続される。ＣＰＵ２０には、ＣＤＲ８からＬＯＳ（Loss  Of  Signal）信号及びＬＯＬ（Loss  Of  Lock）信号を受信するための内部通信線Ｌ５が接続される。ＣＰＵ２０には、ＴＩＡ１２からＬＯＳ信号を受信するための内部通信線Ｌ６が接続される。ＣＰＵ２０には、ＣＤＲ１４からＬＯＬ信号を受信するための内部通信線Ｌ７が接続される。ＬＯＳ信号は、信号（例えば光トランシーバ２に入力される光信号）の消失を通知するための信号である。ＬＯＬ信号は、ＣＤＲ８，１４のクロックリカバリがロックから外れていることを通知するための信号である。ＴｘＤＩＳＡＢＬＥ信号は、ＴＯＳＡ４から出力される多重化光信号Ｏｏｕｔをオフ状態又はオン状態に切り替えるための信号である。なお、オン状態又はオフ状態への切り替えは、４チャネルの光信号のそれぞれについて個別に行うことができる。
【００３０】
図２に示されるように、ＣＰＵ２０は、例えば、プロセッサ（演算回路）２２と、フラッシュＲＯＭ（Read  Only  Memory）２４と、ＲＡＭ（Random  Access  Memory）２６と、温度センサ２８と、通信インタフェース回路３０，３２と、タイマカウンタ３４と、ＡＤＣ（Analog  to  Digital  Converter；アナログ−ディジタル変換回路）３６と、外部入力ピン３８と、外部出力ピン４０と、これらを内部で通信可能に接続する内部バスＢＵＳとを備える。以下では、プロセッサ２２が内部バスＢＵＳを介して通信又は制御する上述の各構成要素を機能ブロックと称する。
【００３１】
プロセッサ２２は、ＣＰＵ２０内の各機能ブロックを制御する。各機能ブロックの制御は、フラッシュＲＯＭ２４に格納されたプログラム（ファームウェア）に従って行われる。光トランシーバ２内に実装可能なサイズ及び光トランシーバ２内において使用できる消費電力等を考慮して、プロセッサ２２として、例えば８ｂｉｔコア又は３２ｂｉｔコアが用いられてもよい。また、ＣＰＵ２０のクロック周波数は、一例として５０ＭＨｚ〜９０ＭＨｚ程度であってもよい。温度センサ２８は、ＣＰＵ２０内の温度を測定する。通信インタフェース回路３０は、通信線Ｌ１を介してホスト装置９０との通信を行うための外部通信用の回路である。通信インタフェース回路３０には、通信線Ｌ１を介してＩ２Ｃ通信方式に基づいた通信を行うためのインタフェース回路が含まれる。通信インタフェース回路３２は、例えば、内部通信バスＬ３を介して光トランシーバ２内の各要素（例えばＬＤＤ６）との通信を行うための内部通信用の回路である。
【００３２】
タイマカウンタ３４は、例えば一定周期のＣＰＵ２０内のクロックをカウントすることで、ある基準からの経過時間を計測する。ＡＤＣ３６は、光トランシーバ２内の各要素から不図示の接続線を介してアナログ信号（電気信号）を受信し、受信したアナログ信号をディジタル信号に変換する。外部入力ピン３８には、例えば、ホスト装置９０とＣＰＵ２０との間の通信バス（不図示）を介してホスト装置９０からの制御信号が入力される。また、外部入力ピン３８には、例えば、内部通信線Ｌ５，Ｌ６，Ｌ７を介してＴＩＡ１２及びＣＤＲ８，１４からのＬＯＳ信号又はＬＯＬ信号が入力される。外部出力ピン４０は、例えば、通信線Ｌ２を介してホスト装置９０にアラーム信号を出力する。また、外部出力ピン４０は、例えば、内部通信線Ｌ４を介してＴｘＤＩＳＡＢＬＥ信号をＬＤＤ６に出力する。
【００３３】
フラッシュＲＯＭ２４は、プロセッサ２２により参照又は実行されるデータ及びプログラムを格納する。ＲＡＭ２６（データ記憶部）は、光トランシーバ２内の各要素からＡＤＣ３６を介して取得したデータ、及びホスト装置９０との間で送受信されるデータを格納する。ＲＡＭ２６には、ＱＳＦＰ２８  ＭＳＡ規格に準拠したレジスタのメモリマップが割り当てられ、各レジスタに当該レジスタに対応するデータが格納される。
【００３４】
図３には、ＱＳＦＰ２８  ＭＳＡ規格に準拠したレジスタのメモリマップが示されている。各レジスタにはアクセス権が設定されている。このようなメモリマップでは、アラーム(Interrupt  Flags)又はモニタ値のようにリードのみが許可されたレジスタ（Memory  Address「3-21」，「22-23」，「26-27」，「34-57」参照）、Page  Select又は各種Controlのようにリード及びライトが可能なレジスタ（Memory  Address「127」参照）、並びにパスワード(Password  Entry)のようにライトのみが許可されたレジスタ（Memory  Address「123-126」参照）が混在する。Ｉ２Ｃ通信方式に基づいたデータの送受信が行われる際には、これらのアクセス権がチェックされる。図４には、図３に示されるメモリマップをＣＰＵ２０に含まれるＲＡＭ２６内の領域（アドレス空間）に割り当てたメモリマップの一例が示されている。
【００３５】
ＣＰＵ２０（プロセッサ２２）は、光トランシーバ２とホスト装置９０との間においてＩ２Ｃ規格に準拠して行われる通信（Ｉ２Ｃ通信）を制御する。この制御では、上述したように、「マスタ装置」となるホスト装置９０が「スレーブ装置」となる光トランシーバ２（ＣＰＵ２０）に所定のコマンドおよびデータを送信し、光トランシーバ２（ＣＰＵ２０）がコマンド等に対して所定の応答を行う。図５は、図１に示されるＣＰＵ内のホスト装置とのＩ２Ｃ通信に関するハードウェア構成を示すブロック図である。通信インタフェース回路３０は、ホスト装置９０とのＩ２Ｃ通信に関するハードウェア構成として、例えば、Ｉ２Ｃ制御部４２と、シフトレジスタ４４と、アドレスレジスタ４６と、ステータスレジスタ４８と、セレクタ５０と、を備える。図５に示されるハードウェア構成は、図２に示される通信インタフェース回路３０のうちのＩ２Ｃ通信に関する部分に対応する。
【００３６】
Ｉ２Ｃ制御部４２は、例えばプロセッサ２２からの動作指示に基づいて動作する。Ｉ２Ｃ制御部４２は、ＣＰＵ２０内の内部バスＢＵＳを介してＲＡＭ２６（内部メモリ）に接続されている。Ｉ２Ｃ制御部４２は、ＲＡＭ２６にアクセスすることによって、ＲＡＭ２６内のデータを読み書きすることができる。
【００３７】
シフトレジスタ４４は、Ｉ２Ｃ通信方式に基づいたデータ（ＳＤＡ信号）の送受信に用いられるレジスタである。例えば、ＣＰＵ２０がホスト装置９０からデータを受信する時には、クロック信号（ＳＣＬ信号）に同期してＳＤＡ信号線を介して送信されるデータが先頭から1ビットずつシフトレジスタ４４に読み込まれる。この場合、シフトレジスタ４４は受信レジスタとして機能する。また、ＣＰＵ２０からホスト装置９０にデータを送信する時には、クロック信号に同期してシフトレジスタ４４内に格納されているデータが先頭から1ビットずつセレクタ５０を介してＳＤＡ信号線に出力される。この場合、シフトレジスタ４４は送信レジスタとして機能する。シフトレジスタ４４とＩ２Ｃ制御部４２とは、例えば８ビットの信号線により並列に接続されている。これにより、シフトレジスタ４４とＩ２Ｃ制御部４２との間において、８ビットのデータ（電文）について、パラレル伝送によって相互に書き込み及び読み出しが可能となっている。
【００３８】
アドレスレジスタ４６は、Ｉ２Ｃ通信方式において、個々の光トランシーバ（スレーブ装置）に割り振られた固有のアドレス情報を格納するレジスタである。ホスト装置９０から送信される固有の光トランシーバを示すアドレス情報（以下、「スレーブアドレス情報」という。）がアドレスレジスタ４６に格納されているアドレス情報に一致する場合に、ホスト装置９０から送られる電文が自身（光トランシーバ２）に向けられていると認識される。そして、自身に電文の送信が向けられていることが認識されると、ステータスレジスタ４８内にＡｃｋ信号（アクノリッジ信号）を示す情報が設定される。そして、Ｉ２Ｃ制御部４２は、ステータスレジスタ４８からＡｃｋ信号をホスト装置９０に送信し、続いて、ホスト装置９０から送られてくるデータの処理（受信等）を行う。Ｉ２Ｃ制御部４２は、内部バスＢＵＳを介して、内部メモリ（フラッシュＲＯＭ２４又はＲＡＭ２６）内の所定のアドレスに格納されたスレーブアドレス情報（例えば図３に示される「１０１０  ０００ｘｂ」）を取得し、当該スレーブアドレス情報をアドレスレジスタ４６に予め格納している。
【００３９】
Ｉ２Ｃ制御部４２は、ＳＤＡ制御信号(SDA  Control)を使用してデータの送受信、並びにＡｃｋ信号及びＮａｃｋ信号（ノンアクノリッジ信号）の出力を制御する。例えば、ＳＤＡ信号線（端子５２）からデータを受信する際には、Ｉ２Ｃ制御部４２は、シフトレジスタ４４内のデータ、及びステータスレジスタ４８からのステータス情報（コントロールステータス情報）をＳＤＡ信号線に出力しないようにセレクタ５０を制御する。ステータス情報とは、Ａｃｋ信号を送信すべき状態であるか、Ｎａｃｋ信号を送信すべき状態であるかを示す情報である。ＳＤＡ信号線（端子５２）を介してホスト装置９０にデータの送信を行うときには、Ｉ２Ｃ制御部４２は、ＳＤＡ制御信号によってシフトレジスタ４４内のデータがＳＤＡ信号線に出力されるようにセレクタ５０を制御する。また、Ｉ２Ｃ制御部４２は、Ａｃｋ信号又はＮａｃｋ信号をホスト装置９０に送信するときには、ステータスレジスタ４８内のステータス情報をＳＤＡ信号線に出力するようにセレクタ５０を制御する。
【００４０】
Ｉ２Ｃ制御部４２は、ＳＣＬ制御信号(SCL  Control)を使用して、必要に応じてクロックストレッチを設定する（クロック信号をストレッチする）。このクロックストレッチは、ホスト装置９０（マスタ装置側）から送信されるクロック信号をＣＰＵ２０（スレーブ装置側）がローレベルに維持することによって、データの送受信を待機させ、次に処理が進まないようにするＩ２Ｃ規格の仕組みである。例えば、Ｉ２Ｃ制御部４２は、ＳＣＬ制御信号をローレベルに設定することによって、クロックストレッチを設定する。ＳＣＬ制御信号は、ＳＣＬ信号線（端子５４）にワイヤードＡＮＤ接続を介して出力されてもよい。Ｉ２Ｃ制御部４２によりＳＣＬ制御信号がローレベルに設定されることによってクロック信号がローレベルに維持され、クロックストレッチが行われる。クロックストレッチを解除する（クロック信号のストレッチを解除する）ときには、Ｉ２Ｃ制御部４２は、ＳＣＬ制御信号をローレベルからハイレベルに戻す。
【００４１】
ＣＰＵ２０では、ホスト装置９０からＩ２Ｃ制御部４２に向けて送信される電文の解析が行われる。この解析では、シフトレジスタ４４を介して受信したデータが、メモリアドレス(Memory  Address)に関する情報（以下、「メモリアドレス情報」という。）であるか否か、ホスト装置９０からの受信データであるか否か、又はホスト装置９０からのデータ送信要求に関する指示であるか否かといった判別が行われる。シフトレジスタ４４を介して受信したデータが、ホスト装置９０からの受信データであると判別されたときには、メモリアドレス情報によって指定されたＲＡＭ２６のアドレスに内部バスＢＵＳを介して、シフトレジスタ４４を介して受信したデータが書き込まれる。また、シフトレジスタ４４を介して受信したデータが、ホスト装置９０からのデータ送信要求に関する指示であると判別されたときには、Ｉ２Ｃ制御部４２は、ホスト装置９０に送信するデータをシフトレジスタ４４に転送した後に、シフトレジスタ４４内の当該データをＳＤＡ信号線に出力するようにＳＤＡ制御信号によってセレクタ５０を制御する。
【００４２】
（周期処理）
次にＣＰＵ２０において実行される周期処理について説明する。図６は、周期処理の一例を示すフローチャートである。まず、ＣＰＵ２０のプロセッサ２２は、光トランシーバ２が稼働状態となった際に、フラッシュＲＯＭ２４から所定のプログラム（ファームウェア）を読み出し、プログラムに従って初期処理を実行する（ステップＳ０１）。ステップＳ０１では、例えば、プロセッサ２２がＣＰＵ２０内の初期設定、及び割込みポートの設定を行う。このステップＳ０１の処理は、周期処理が開始される前に行われる。なお、以下に詳細に説明する周期処理もファームウェアに従って実行される。
【００４３】
続いて、プロセッサ２２は、周期処理に関する処理時間を計測するために、当該処理時間の計測（タイマーのカウント）を開始する（ステップＳ０２）。例えば、ステップＳ０２では、プロセッサ２２が、タイマカウンタ３４に処理時間の計測を開始させる。続いて、プロセッサ２２は、Ｉ２Ｃ関連処理を行う（ステップＳ０３）。ステップＳ０３では、プロセッサ２２が、時間を要するためにＩ２Ｃスレーブ処理では実行することができないＩ２Ｃ通信に関する処理を行う。例えば、プロセッサ２２は、Ｉ２Ｃ通信方式に基づいてホスト装置９０から送信されたデータを、フラッシュＲＯＭ２４に書き込む処理を行う。
【００４４】
続いて、プロセッサ２２は、光トランシーバ２内の各要素の動作状況を取得する状況取得処理を実行する（ステップＳ０４）。例えば、ステップＳ０４の状況取得処理には、各種モニタ項目に関する測定値を取得する処理、測定値をモニタ値に換算する処理、及びアラーム（ワーニング）判定処理が含まれる。各種モニタ項目に関する測定値を取得する処理では、例えば、プロセッサ２２が、光トランシーバ２の温度及び光トランシーバ２を駆動するための電源電圧に関する測定値（例えば電圧値）をＡＤＣ３６を介して取得する。また、プロセッサ２２は、ＴＯＳＡ４内のレーザダイオードへのバイアス変調電流、ＴＯＳＡ４から出力される多重化光信号Ｏｏｕｔの光パワー、及びＲＯＳＡ１０に入力される多重化光信号Ｏｉｎの光パワーに関する測定値をＡＤＣ３６を介して取得する。
【００４５】
各種モニタ項目に関する測定値を取得する処理において得られる測定値は、実際の物理量に応じた値である。このため、測定値をモニタ値に換算する処理において、プロセッサ２２は、予め定められた対応テーブルに基づいて、各種測定値（電圧値）をモニタ値（物理量）に変換する。例えば、プロセッサ２２は、多重化光信号Ｏｏｕｔの光パワーに関する測定値（電圧値）を、光パワーのモニタ値（電力値）に変換する。アラーム判定処理では、プロセッサ２２が、測定値を換算することで得られたモニタ値が異常値（正常値）であるかどうかを判定する。例えば、プロセッサ２２は、モニタ値を予め定められた閾値と比較することによって、モニタ値の取得対象の要素が、正常状態であるか又は異常状態であるかを判定する。例えば、プロセッサ２２は、ステップＳ０４の処理を行うことで得たモニタ値等に関する情報をＲＡＭ２６内の所定のアドレスに記憶する。
【００４６】
続いて、プロセッサ２２は、ＡＰＣ（Automatic  Power  Control）制御を実行する（ステップＳ０５）。ステップＳ０５では、プロセッサ２２が、多重化光信号Ｏｏｕｔの光パワーが一定となるように、ＴＯＳＡ４内のレーザダイオードに流すバイアス変調電流の設定値を調整する。例えば、プロセッサ２２は、多重化光信号Ｏｏｕｔの光パワーに関するモニタ値と目標値とを比較することにより、上記バイアス変調電流の設定値を調整する。なお、モニタ値の取得、及び取得したモニタ値と目標値との比較は、４チャネルの光信号のそれぞれについて個別に行うことができる。
【００４７】
続いて、プロセッサ２２は、ＴＩＡ１２、及びＣＤＲ８，１４からＬＯＳ／ＬＯＬ信号をそれぞれ取得するリード処理を実行する（ステップＳ０６）。ステップＳ０６では、例えば、プロセッサ２２が、外部入力ピン３８を介してＬＯＳ／ＬＯＬ信号に関する情報を取得する。
【００４８】
続いて、プロセッサ２２は、光トランシーバ２内の各要素についてアラーム情報を更新する処理を行う（ステップＳ０７）。ステップＳ０７では、例えば、プロセッサ２２が、ステップＳ０４において判定した光トランシーバ２内の各要素が異常状態であるか、又は正常状態であるかの情報をＲＡＭ２６内の所定のアドレスに記憶する。また、プロセッサ２２は、ＴＩＡ１２、及びＣＤＲ８，１４から取得したＬＯＳ／ＬＯＬ信号に関する情報をＲＡＭ２６内の所定のアドレスに記憶する。これにより、ＲＡＭ２６内に記憶されているアラーム情報が更新される。さらに、光トランシーバ２内の一の要素が異常状態である場合、プロセッサ２２は、外部出力ピン４０及び通信線Ｌ２を介して、当該要素が異常状態であることを示すアラーム信号をホスト装置９０に出力する。
【００４９】
続いて、プロセッサ２２は、処理時間の計測（タイマーのカウント）を停止する（ステップＳ０８）。ステップＳ０８では、例えばプロセッサ２２が、タイマカウンタ３４によるカウントを停止させ、処理時間の計測開始から計測停止までの時間をタイマ値として取得する。このタイマ値は、ステップＳ０３〜Ｓ０７の処理（周期処理）を一周期行うのに要する処理時間（以下、単に「周期処理の処理時間」という。）を示す。ステップＳ０８においてタイマ値の取得後、プロセッサ２２は、タイマカウンタ３４による処理時間のカウントをリセットしてもよい。なお、「周期処理の処理時間」には、ステップＳ０３〜Ｓ０７の処理をプロセッサ２２が実際に行う時間（処理を実行している時間）だけでなく、Ｉ２Ｃスレーブ処理等の割込み処理によりステップＳ０３〜Ｓ０７のいずれかの処理が一時的に中断している時間も含まれ得る。換言すると、割込み処理の頻度、及び割込み処理に要する時間に応じて、周期処理の処理時間（タイマ値）は変動する。
【００５０】
続いて、プロセッサ２２は、ステップＳ０８において取得したタイマ値が、予め定められた閾値Ｔｈ（所定値）よりも小さいかどうかを判断する（ステップＳ０９）。タイマ値が閾値Ｔｈよりも小さいと判断された場合（ステップＳ０９：ＹＥＳ）、周期処理が滞ることなく行われているので、プロセッサ２２は、ＢｕｓｙフラグをＯＦＦに設定する（ステップＳ１０）。タイマ値が閾値Ｔｈ以上であると判断された場合（ステップＳ０９：ＮＯ）、周期処理が滞っている可能性が高いので、プロセッサ２２は、ＢｕｓｙフラグをＯＮに設定する（ステップＳ１１）。プロセッサ２２は、Ｂｕｓｙフラグの設定（処理モードの設定）に関する情報をＲＡＭ２６内に記憶してもよい。ＢｕｓｙフラグがＯＦＦに設定されることで、Ｉ２Ｃスレーブ処理の処理モードが第１処理モードに設定される。一方、ＢｕｓｙフラグがＯＮに設定されることで、Ｉ２Ｃスレーブ処理の処理モードが第２処理モードに設定される。第１処理モード及び第２処理モードについては後述する。
【００５１】
ステップＳ１０又はステップＳ１１の処理の終了後、プロセッサ２２は、ステップＳ０２〜Ｓ１１の処理を繰り返す。これにより、ステップＳ０３〜Ｓ０７の周期処理が繰り返される。ステップＳ０３〜Ｓ０７の周期処理自体の処理時間（割込み処理による待機時間を除く処理時間）は、一例として、５ミリ秒（５ｍｓｅｃ）程度である。この場合、閾値Ｔｈは、１０ミリ秒に設定されてもよい。なお、ステップＳ０２〜Ｓ１１の処理を繰り返すときに、上述の「周期処理の処理時間」以外にステップＳ０２、Ｓ０８〜Ｓ１１を処理するための時間も必要となる。しかし、ステップ０２、Ｓ０８〜Ｓ１１は比較的単純な演算あるいは処理であるため、それらの処理に要する時間は「周期処理の処理時間」よりもかなり小さいので無視できる程度である。ステップ０２、Ｓ０８〜Ｓ１１を行うのに必要な時間は、例えば、数マイクロ秒から数十マイクロ秒程度である。すなわち、Ｓ０２〜Ｓ１１を処理するのに要する時間は、「周期処理の処理時間」にほぼ等しいと考えてもよい。換言すると、本開示の実施形態において周期処理に加わる処理（ステップＳ０２、Ｓ８〜Ｓ１１）によって実質的に「周期処理の処理時間」が影響を受けることはない。
【００５２】
このように、プロセッサ２２が行うステップＳ０３〜Ｓ０７の周期処理には、レーザダイオード及びフォトダイオードの動作を制御する処理（ステップＳ０４）と、ステップＳ０４の処理において得られた結果に応じて、ＲＡＭ２６に格納されているデータを更新する処理（ステップＳ０７）と、が含まれる。なお、レーザダイオード（フォトダイオード）の動作を制御する処理には、当該レーザダイオード（フォトダイオード）を制御するためのバイアス変調電流等のモニタ値を取得することも含まれる。
【００５３】
なお、プロセッサ２２が周期的に実行する周期処理は、図６に示される一連の処理に限られない。例えば、プロセッサ２２が実行する周期処理に、図６に示される処理のうちの一部の処理が含まれていなくてもよい。一例として、プロセッサ２２が実行する周期処理に、ステップＳ０３におけるＩ２Ｃ関連処理が含まれていなくてもよい。また、周期ごとに、周期処理内において実行される処理内容が異なってもよく、周期処理に含まれる一部の処理が省略されてもよい。あるいは、プロセッサ２２が実行する周期処理に、図６に示される処理以外の処理が含まれていてもよい。図６に例示される周期処理において、各ステップが行われる順番が入れ替えられてもよい。
【００５４】
（Ｉ２Ｃスレーブ処理）
次に、ＣＰＵ２０において実行されるＩ２Ｃスレーブ処理について説明する。ここでは、Ｉ２Ｃ通信方式に基づいて、光トランシーバ２（ＣＰＵ２０）からホスト装置９０にデータを送信する場合について説明する。光トランシーバ２からホスト装置９０に送られるデータには、複数ビット（ここでは８ビット）の監視用データが含まれる。この監視用データの内容に応じてホスト装置９０は光トランシーバ２の制御を行う。つまり、監視用データは、ホスト装置９０による光トランシーバ２に対する制御を目的として使用され得るデータである。なお、光トランシーバ２は、ホスト装置９０により、図３に示されるメモリマップに割り当てられた各レジスタ内の情報をＩ２Ｃ通信方式に基づいた通信経由で送信することを要求され、光トランシーバ２には、所定のタイミング内で適切に光トランシーバ２内の内部データを返送することを求められる。
【００５５】
図７は、プロセッサが行うＩ２Ｃスレーブ処理のタイミングを説明するための図である。図８は、プロセッサが行うＩ２Ｃスレーブ処理を示すフローチャートである。図９は、周期処理の時間に応じた処理を実行するＩ２Ｃスレーブ処理を示すフローチャートである。
【００５６】
まず図７を参照して、ホスト装置９０からの送信要求により、光トランシーバ２からＮ個（Ｎは２以上の整数）の監視用データ「Ｄａｔａ１」〜「ＤａｔａＮ」をホスト装置９０に送信する場合を例に、光トランシーバ２とホスト装置９０との間の一連のデータ送信処理について説明する。図７において、上段に示される「Ｉ２Ｃ通信」は、ホスト装置９０と光トランシーバ２との間で行われる通信内容を示している。下段に示される「Ｉ２Ｃスレーブ処理」は、上記通信内容に応じてプロセッサ２２によって行われるＩ２Ｃスレーブ処理の実行タイミングを示している。
【００５７】
図７に示されるように、まず、ホスト装置９０は、期間Ｔ１において、ホスト装置９０と光トランシーバ２との間のデータ伝送を開始するための条件であるスタート条件Ｓを生成する。期間Ｔ１では、ホスト装置９０が、ＳＣＬ信号（クロック信号）がハイレベルである間に、ＳＤＡ信号をハイレベルからローレベルに変化させることで、スタート条件Ｓを生成する。続いて、期間Ｔ２において、ホスト装置９０は、通信先である光トランシーバを特定するためのスレーブアドレス情報（例えば７ビットのスレーブアドレス）、及び次に送信する情報（ここではメモリアドレス情報）の伝送方向を示す１ビットの情報（以下、「Ｒ／Ｗビット情報」という。）を送信する。この例では、次に送信する情報の伝送方向は、ホスト装置９０から光トランシーバ２であるので、Ｒ／Ｗビット情報は、「Ｗｒｉｔｅ」を示すビット値（例えば、ローレベル）に設定される。
【００５８】
続いて、期間Ｔ３において、光トランシーバ２のプロセッサ２２はＩ２Ｃスレーブ処理Ｍ０１を実行する。このＩ２Ｃスレーブ処理Ｍ０１では、プロセッサ２２が、まずクロックストレッチを設定する。そして、プロセッサ２２は、ホスト装置９０から送信されたスレーブアドレス情報と、自身に割り当てられたスレーブアドレス情報（アドレスレジスタ４６に格納されているスレーブアドレス情報）とを比較する。プロセッサ２２は、両者のアドレス情報が一致した場合に、確認応答情報としてＡｃｋ信号を示す情報をステータスレジスタ４８に設定し、Ｉ２Ｃ制御部４２によりホスト装置９０に向けてＡｃｋ信号を送信させる。この際、プロセッサ２２は、クロックストレッチを解除する。以下の説明において、Ａｃｋ信号を示す情報をステータスレジスタ４８に設定する処理を「Ａｃｋ設定処理」という。なお、クロックストレッチの設定又は解除は、プロセッサ２２がＩ２Ｃ制御部４２を制御することにより行われる。
【００５９】
続いて、期間Ｔ４において、ホスト装置９０は、ＲＡＭ２６内のデータ格納領域のアドレスを示すメモリアドレス情報を光トランシーバ２に送信する。続いて、期間Ｔ５において、プロセッサ２２はＩ２Ｃスレーブ処理Ｍ０２を実行する。Ｉ２Ｃスレーブ処理Ｍ０２では、プロセッサ２２が、まずクロックストレッチを設定する。そして、プロセッサ２２は、ホスト装置９０から送られたメモリアドレス情報を格納する。その後、プロセッサ２２は、Ａｃｋ設定処理を行う。この際、プロセッサ２２は、クロックストレッチを解除する。
【００６０】
なお、Ｉ２Ｃスレーブ処理Ｍ０２において、プロセッサ２２は、ホスト装置９０からのメモリアドレス情報が示すアドレス内のデータに含まれる複数ビット（例えば８ビット）の監視用データ（Ｄａｔａ１）を準備する。具体的には、プロセッサ２２は、ホスト装置９０からのメモリアドレス情報によって、光トランシーバ２からホスト装置９０へのデータ送信処理が行われると予測し、最初に送信する予定の監視用データ「Ｄａｔａ１」をＲＡＭ２６から読み出して、シフトレジスタ４４とは異なるレジスタ（例えばＩ２Ｃ制御部４２内のデータレジスタ）に格納する。監視用データ「Ｄａｔａ１」を準備する前後のいずれかにて、プロセッサ２２はクロックストレッチを解除する。
【００６１】
続いて、期間Ｔ６において、ホスト装置９０は、最初にスタート条件Ｓを生成する。スタート条件Ｓの生成の次に、ホスト装置９０は、通信先である光トランシーバ２を特定するためのスレーブアドレス情報、及び次に送信する情報（ここでは、監視用データ「Ｄａｔａ１」）の伝送方向を示すＲ／Ｗビット情報を送信する。この例では、次に送信する情報の伝送方向は、光トランシーバ２からホスト装置９０であるので、Ｒ／Ｗビット情報は、「Ｒｅａｄ」を示すビット値（例えば、ハイレベル）に設定される。
【００６２】
続いて、期間Ｔ７内の期間Ｔ７１において、プロセッサ２２はＩ２Ｃスレーブ処理Ｍ０３を実行する。Ｉ２Ｃスレーブ処理Ｍ０３では、プロセッサ２２が、まずクロックストレッチを設定する。そして、プロセッサ２２は、ホスト装置９０から送信されたスレーブアドレス情報と、自身に割り当てられたスレーブアドレス情報とを比較する。プロセッサ２２は、両者のアドレス情報が一致した場合にＡｃｋ設定処理を行う。また、Ｒ／Ｗビット情報が「Ｒｅａｄ」を示すビット値に設定されているので、プロセッサ２２は、Ｉ２Ｃ制御部４２により監視用データ「Ｄａｔａ１」をシフトレジスタ４４にセットさせる。
【００６３】
さらに、プロセッサ２２は、監視用データ「Ｄａｔａ１」の次に送信する予定の監視用データ「Ｄａｔａ２」を準備する。例えば、プロセッサ２２は、当該監視用データをＲＡＭ２６から読み出して、シフトレジスタ４４とは異なるレジスタ（例えばＩ２Ｃ制御部４２内のデータレジスタ）に格納しておく。監視用データ「Ｄａｔａ２」を準備する前後のいずれかにて、プロセッサ２２はクロックストレッチを解除する。このクロックストレッチの解除により、シフトレジスタ４４内にセットされた監視用データ（Ｄａｔａ１）のホスト装置９０への送信が開始される。
【００６４】
期間Ｔ７内の期間Ｔ７２において、シフトレジスタ４４に格納されている監視用データ「Ｄａｔａ１」がホスト装置９０に１ビットずつ送信される。この期間Ｔ７２は、期間Ｔ７１において、クロックストレッチが解除されることによって開始される。なお、期間Ｔ７２のうちのＩ２Ｃスレーブ処理Ｍ０３の終了後の期間において、監視用データ「Ｄａｔａ１」の送信中に、プロセッサ２２は上述した周期処理を含む他の処理を行うことができる。
【００６５】
続いて、期間Ｔ８において、監視用データ「Ｄａｔａ１」を受信した後に、ホスト装置９０が光トランシーバ２にＡｃｋ信号を送信する。そして、プロセッサ２２は、ホスト装置９０からのＡｃｋ信号を受信すると、Ｉ２Ｃスレーブ処理Ｍ０４を実行する。Ｉ２Ｃスレーブ処理Ｍ０４では、プロセッサ２２が、予めＲＡＭ２６から読み出しておいた監視用データ「Ｄａｔａ２」をＩ２Ｃ制御部４２によりシフトレジスタ４４にセットさせる。また、プロセッサ２２は、監視用データ「Ｄａｔａ２」の次に送信する予定の監視用データ「Ｄａｔａ３」を準備する。監視用データ「Ｄａｔａ３」を準備する前後のいずれかにて、プロセッサ２２は、クロックストレッチを解除する。このクロックストレッチの解除により、シフトレジスタ４４内にセットされた監視用データ（Ｄａｔａ２）のホスト装置９０への送信が開始される。以降、期間Ｔ８において、プロセッサ２２は、同様の手順で監視用データのシフトレジスタ４４へのセット、及び次の監視用データの準備（ＲＡＭ２６からの読出し）を繰り返す。
【００６６】
続いて、最後に送信される監視用データ「ＤａｔａＮ」の送信後、期間Ｔ９において、ホスト装置９０は送信終了情報としてＮａｃｋ信号を光トランシーバ２に送信する。その後、ホスト装置９０は、一連の送受信処理の終了を示すストップ条件Ｐを生成する。プロセッサ２２は、ホスト装置９０からＮａｃｋ信号を受信すると、Ｉ２Ｃスレーブ処理Ｍ０５を実行し、ストップ条件Ｐが生成されると、Ｉ２Ｃスレーブ処理Ｍ０６を実行する。Ｉ２Ｃスレーブ処理Ｍ０５，Ｍ０６では、プロセッサ２２が、割込みリセット、及び１電文受信後処理を行う。ホスト装置９０は、ＳＣＬ信号がハイレベルである間に、ＳＤＡ信号をローレベルからハイレベルに変化させることで、ストップ条件Ｐを生成する。これにより、一連のデータ送信処理が終了する。プロセッサ２２は、Ｉ２Ｃスレーブ処理Ｍ０１〜Ｍ０６を実行していない期間では、上述した周期処理を実行する。
【００６７】
図８には、プロセッサ２２が行うＩ２Ｃスレーブ処理の一例を示すフローチャートが示されている。図８には、処理モードが第１処理モードに設定されているときのＩ２Ｃスレーブ処理が示されており、処理モードが第２処理モードに設定されているときには、クロックストレッチの解除が行われるタイミングについて異なる場合がある。図８に示される一連の処理は、ホスト装置９０からＩ２Ｃ通信に関する情報が送信されることによって開始される。まず、プロセッサ２２は、ホスト装置９０から送信される情報（以下、「送信情報」という。）を受信すると、クロックストレッチを設定する。
【００６８】
クロックストレッチの設定後、プロセッサ２２は、送信情報がスレーブアドレス情報であるかどうかを判別する（ステップＳ２１）。送信情報がスレーブアドレス情報であると判別された場合（ステップＳ２１：ＹＥＳ）、プロセッサ２２は、ステップＳ２２〜Ｓ２６又はステップＳ２２，Ｓ２３，Ｓ２７を順に実行する。なお、ステップＳ２２，Ｓ２３，Ｓ２７の処理は、Ｉ２Ｃスレーブ処理Ｍ０１に対応する。ステップＳ２２〜Ｓ２６の処理は、Ｉ２Ｃスレーブ処理Ｍ０３に対応する。ステップＳ２２では、プロセッサ２２が、Ａｃｋ設定処理を行う。ステップＳ２３では、プロセッサ２２が、Ｒ／Ｗビット情報がハイレベルであるかどうかを判別する。
【００６９】
Ｒ／Ｗビット情報がハイレベル（「Ｒｅａｄ」）である場合（ステップＳ２３：ＹＥＳ）、プロセッサ２２はステップＳ２４〜Ｓ２６を順に実行する。ステップＳ２４では、プロセッサ２２が、Ｉ２Ｃ制御部４２に最初の監視用データ（Ｄａｔａ１）をシフトレジスタ４４にセットさせる。ステップＳ２５では、プロセッサ２２がクロックストレッチを解除する。このクロックストレッチの解除により、ステップＳ２４においてシフトレジスタ４４内にセットされた監視用データ（Ｄａｔａ１）のホスト装置９０への送信が開始される。ステップＳ２６では、プロセッサ２２が、ＲＡＭ２６内から監視用データ（Ｄａｔａ２）を読み出すことによって、当該監視用データの送信の準備を行う。Ｒ／Ｗビット情報がローレベル（「Ｗｒｉｔｅ」）である場合（ステップＳ２３：ＮＯ）、プロセッサ２２はステップＳ２７を実行する。ステップＳ２７では、プロセッサ２２がクロックストレッチを解除する。なお、Ｒ／Ｗビット情報がハイレベルである場合、ステップＳ２５，Ｓ２６が実行される順番は処理モードによって異なる。以上により、プロセッサ２２は、送信情報がスレーブアドレス情報である場合のＩ２Ｃスレーブ処理を終了する。
【００７０】
ステップＳ２１において、送信情報がスレーブアドレス情報ではないと判別された場合（ステップＳ２１：ＮＯ）、プロセッサ２２は、送信情報がメモリアドレス情報であるかどうかを判別する（ステップＳ３１）。送信情報がメモリアドレス情報であると判別された場合（ステップＳ３１：ＹＥＳ）、プロセッサ２２は、ステップＳ３２〜Ｓ３４を順に実行する。ステップＳ３２〜Ｓ３４の処理は、Ｉ２Ｃスレーブ処理Ｍ０２に対応する。ステップＳ３２では、プロセッサ２２がメモリアドレス情報を内部メモリ（例えばＲＡＭ２６）に格納する。ステップＳ３３では、プロセッサ２２がＡｃｋ設定処理を行い、クロックストレッチを解除する。ステップＳ３４では、プロセッサ２２が、ＲＡＭ２６内から最初に送信する監視用データ（Ｄａｔａ１）を読み出すことによって、当該監視用データの送信の準備を行う。なお、クロックストレッチを解除するタイミングは、処理モードによっては、ステップＳ３４の後であってもよい。以上により、プロセッサ２２は、送信情報がメモリアドレス情報である場合のＩ２Ｃスレーブ処理を終了する。
【００７１】
ステップＳ３１において、送信情報がメモリアドレス情報ではないと判別された場合（ステップＳ３１：ＮＯ）、プロセッサ２２は、送信情報がホスト装置９０からのデータであるかどうかを判別する（ステップＳ４１）。送信情報がホスト装置９０からのデータであると判別された場合（ステップＳ４１：ＹＥＳ）、プロセッサ２２は、ステップＳ４２，Ｓ４３を順に実行する。ステップＳ４２では、プロセッサ２２が受信したデータを内部メモリ（例えばＲＡＭ２６）に格納する。ステップＳ４３では、プロセッサ２２がステップＳ３３と同様の処理を行う。以上により、プロセッサ２２は、送信情報がホスト装置９０からのデータである場合のＩ２Ｃスレーブ処理を終了する。
【００７２】
ステップＳ４１において、送信情報がホスト装置９０からのデータではないと判別された場合（ステップＳ４１：ＮＯ）、プロセッサ２２は、送信情報がホスト装置９０からのＡｃｋ信号であるかどうかを判別する（ステップＳ５１）。送信情報がＡｃｋ信号であると判別された場合（ステップＳ５１：ＹＥＳ）、プロセッサ２２は、ステップＳ５２〜Ｓ５４を順に実行する。ステップＳ５２〜Ｓ５４の処理は、Ｉ２Ｃスレーブ処理Ｍ０４に対応する。ステップＳ５２では、プロセッサ２２が、予め準備していた監視用データをＩ２Ｃ制御部４２にシフトレジスタ４４にセットさせる（一時的に格納させる）。
【００７３】
ステップＳ５３では、プロセッサ２２がクロックストレッチを解除する。これにより、ステップＳ５２においてシフトレジスタ４４にセットされた監視用データのホスト装置９０への送信が開始される。ステップＳ５４では、プロセッサ２２が次の監視用データをＲＡＭ２６から読み出すことによって、次の監視用データの送信の準備を行う。例えば、プロセッサ２２は、ＲＡＭ２６から読み出した次の監視用データをＩ２Ｃ制御部４２内のデータレジスタに一時的に格納する。なお、ステップＳ５３，Ｓ５４が実行される順番は、処理モードによって異なる。以上により、プロセッサ２２は、送信情報がホスト装置９０からのＡｃｋ信号である場合のＩ２Ｃスレーブ処理を終了する。
【００７４】
ステップＳ５１において、送信情報がホスト装置９０からのＡｃｋ信号ではないと判別された場合（ステップＳ５１：ＮＯ）、プロセッサ２２は、送信情報がホスト装置９０により生成されたストップ条件Ｐであるかどうかを判別する（ステップＳ６１）。送信情報がストップ条件Ｐであると判別された場合（ステップＳ６１：ＹＥＳ）、プロセッサ２２は、ステップＳ６２，Ｓ６３を順に実行する。ステップＳ６２，Ｓ６３の処理は、Ｉ２Ｃスレーブ処理Ｍ０６に対応する。ステップＳ６２，Ｓ６３では、プロセッサ２２が割込みリセット及び１電文受信後処理をそれぞれ行う。以上により、プロセッサ２２は、送信情報がストップ条件Ｐである場合のＩ２Ｃスレーブ処理を終了する。
【００７５】
ステップＳ６１において送信情報がストップ条件Ｐではないと判別された場合（ステップＳ６１：ＮＯ）、プロセッサ２２は、送信情報がＮａｃｋ信号であるかどうかを判別する（ステップＳ７１）。図８に示される例では、送信情報がＮａｃｋ信号であるかどうかによらず、プロセッサ２２は、ステップＳ６２と同様の処理であるステップＳ７２を実行する。ステップＳ７２の処理は、Ｉ２Ｃスレーブ処理Ｍ０５に対応する。以上により、プロセッサ２２は、送信情報がＮａｃｋ信号である場合のＩ２Ｃスレーブ処理を終了する。
【００７６】
図８に示されるフローチャートでは省略されているが、プロセッサ２２は、周期処理の処理時間に応じて設定される処理モードによってＩ２Ｃスレーブ処理におけるクロックストレッチを解除するタイミングを異ならせる。図９には、処理モードによってクロックストレッチの解除のタイミングが異なるＩ２Ｃスレーブ処理の一例を示すフローチャートが示されている。なお、図９に示されるフローチャートでは、図８に示されるフローチャートの一部の処理が簡略化されて示されている。プロセッサ２２は、ホスト装置９０から送信情報が送られてくるとクロックストレッチを設定する。
【００７７】
クロックストレッチの設定後、プロセッサ２２は、ホスト装置９０からの送信情報に応じたスレーブ処理を実行する（ステップＳ８１）。ステップＳ８１のスレーブ処理は、Ｉ２Ｃスレーブ処理のうちの一部の処理であり、送信情報によって処理内容が異なる。送信情報がスレーブアドレス情報である場合、ステップＳ８１の処理は、ステップＳ２２のＡｃｋ設定処理に対応する。送信情報がメモリアドレス情報である場合、ステップＳ８１の処理は、ステップＳ３３のうちのＡｃｋ設定処理及びステップＳ３２に対応する。送信情報がホスト装置９０からのデータである場合、ステップＳ８１の処理は、ステップＳ４３のうちのＡｃｋ設定処理及びステップＳ４２に対応する。送信情報がホスト装置９０からのＡｃｋ信号である場合、ステップＳ８１の処理は、ステップＳ５２に対応する。
【００７８】
続いて、プロセッサ２２は、Ｉ２Ｃスレーブ処理の処理モードが、第１処理モードに設定されているかどうかを判断する（ステップＳ８２）。処理モードが第１処理モードに設定されている場合（ステップＳ８２：ＹＥＳ）、プロセッサ２２は、クロックストレッチを解除する（ステップＳ８３）。一方、処理モードが第１処理モードに設定されていない場合（ステップＳ８２：ＮＯ）、プロセッサ２２はステップＳ８３を実行しない。換言すると、処理モードが第２処理モードに設定されている場合、プロセッサ２２はステップＳ８３を実行しない。
【００７９】
続いて、プロセッサ２２は、次に送信する予定の監視用データの送信準備が必要かどうかを判断する（ステップＳ８４）。例えば、プロセッサ２２は、監視用データの送信開始後にホスト装置９０からＡｃｋ信号を受けた場合（図８のステップＳ５１参照）、次の監視用データの送信準備が必要であると判断する。監視用データの送信準備が必要であると判断された場合（ステップＳ８４：ＹＥＳ）、プロセッサ２２は、次に送信する予定の監視用データをＲＡＭ２６から読み込むことで、当該監視用データの送信準備を行う（ステップＳ８５）。監視用データの送信準備が不要であると判断された場合（ステップＳ８４：ＮＯ）、プロセッサ２２は、ステップＳ８５を実行しない。
【００８０】
続いて、プロセッサ２２は、Ｉ２Ｃスレーブ処理の処理モードが、第２処理モードに設定されているかどうかを判断する（ステップＳ８６）。処理モードが第２処理モードに設定されている場合（ステップＳ８６：ＹＥＳ）、プロセッサ２２は、クロックストレッチを解除する（ステップＳ８７）。一方、処理モードが第２処理モードに設定されていない場合（ステップＳ８６：ＮＯ）、プロセッサ２２はステップＳ８７を実行しない。換言すると、処理モードが第１処理モードに設定されている場合、プロセッサ２２はステップＳ８７を実行しない。なお、処理モードが第１処理モードに設定されている場合には、既にステップＳ８３の処理が行われることで、クロックストレッチは解除されている。以上により、Ｉ２Ｃスレーブ処理が終了する。
【００８１】
このように、次の監視用データを送信するためのＩ２Ｃスレーブ処理では、処理モードが第１処理モード及び第２処理モードのどちらに設定されているかによってクロックストレッチの解除のタイミングが異なる。このような監視用データを送信するためのＩ２Ｃスレーブ処理において処理モードが第１処理モードに設定されている場合には、プロセッサ２２は、監視用データ（第１データ）をシフトレジスタ４４に格納してクロック信号のストレッチを解除した（ステップＳ８１，Ｓ８３）後に、第１データの次に送信される監視用データ（第２データ）をＲＡＭ２６から読み出す（ステップＳ８５）。処理モードが第２処理モードに設定されている場合には、プロセッサ２２は、第１データをシフトレジスタ４４に格納して第２データをＲＡＭ２６から読み出した（ステップＳ８１，Ｓ８５）後に、クロック信号のストレッチを解除する（ステップＳ８７）。
【００８２】
処理モードが第１処理モードに設定されている場合、監視用データの準備の前にクロックストレッチが解除されるので、割込み開始からクロックストレッチの解除までの処理時間は、一例として１マイクロ秒（１μｓｅｃ）程度である。処理モードが第２処理モードに設定されている場合、監視用データの準備の後にクロックストレッチが解除されるので、割込み開始からクロックストレッチの解除までの処理時間は、一例として２０マイクロ秒程度である。なお、これらの処理時間は、ＣＰＵ２０（プロセッサ２２）の処理能力及び動作クロックに依存する。
【００８３】
（本実施形態の効果）
以上説明したように、本実施形態に係る光トランシーバ２及び光トランシーバ２の制御方法では、Ｉ２Ｃスレーブ処理の処理モードが第１処理モードに設定されている場合、クロック信号のストレッチが解除された後に、次の監視用データがＲＡＭ２６から読み出される。クロック信号のストレッチが解除されると、シフトレジスタ４４に格納されている監視用データがホスト装置９０に送信されるので、第１処理モードでは、当該監視用データがホスト装置９０に送信されている間、次の監視用データの読み出しを含むＩ２Ｃスレーブ処理が行われる。当該Ｉ２Ｃスレーブ処理が行われた後、次の割込み処理が開始されるまでの間に、周期処理が行われる。当該Ｉ２Ｃスレーブ処理に時間がかかると、周期処理を行うための時間が十分に確保されないおそれがある。
【００８４】
一方、Ｉ２Ｃスレーブ処理の処理モードが第２処理モードに設定されている場合、次の監視用データがＲＡＭ２６から読み出された後に、クロック信号のストレッチが解除される。つまり、第２処理モードでは、次の監視用データの読み出しを含むＩ２Ｃスレーブ処理が終了した後に、シフトレジスタ４４に格納されている監視用データがホスト装置９０に送信される。これにより、処理モードが第２処理モードに設定されている場合には、Ｉ２Ｃスレーブ処理の終了後において監視用データがホスト装置９０に送信されている間、周期処理を行うことができる。つまり、周期処理を行う時間が確実に確保される。周期処理の処理時間が閾値Ｔｈよりも大きい場合には、Ｉ２Ｃスレーブ処理によって周期処理が滞っていると考えられる。上記構成では、上記処理時間が閾値Ｔｈよりも大きいときに、処理モードが第２処理モードに設定されるので、周期処理を行う時間が確保される。その結果、上位のホスト装置９０に監視用データを送信しつつ、周期処理を適切に行うことが可能となる。
【００８５】
ここで、図１０〜図１２を参照して、本実施形態に係る作用効果を詳細に説明する。図１０〜図１２は、Ｉ２Ｃ通信とＩ２Ｃスレーブ処理との関係を説明するためのタイミングチャートである。図１０には、クロック信号の周波数が１００ｋＨｚ(Standard  Mode)に設定され、周期処理の処理時間に関わらず処理モードが第１処理モードに設定されている場合のＩ２Ｃスレーブ処理が、第１比較例として示されている。図１１には、クロック信号の周波数が４００ｋＨｚ(Fast-mode)に設定され、周期処理の処理時間に関わらず処理モードが第１処理モードに設定されている場合のＩ２Ｃスレーブ処理が、第２比較例として示されている。図１２には、クロック信号の周波数が１ＭＨｚ(Fast-mode  Plus)に設定され、周期処理の処理時間に応じて処理モードを変更する場合のＩ２Ｃスレーブ処理（本実施形態に係るＩ２Ｃスレーブ処理）が示されている。
【００８６】
第１比較例に係るタイミングチャートでは、クロック信号の１クロックあたりの時間は１０マイクロ秒であり、１クロック内のローレベルが継続する時間（以下、「時間ｔｌ」という。）は４．７マイクロ秒である。このため、監視用データの送信準備を行わないＩ２Ｃスレーブ処理（例えばＩ２Ｃスレーブ処理Ｍ０１）が行われる場合、時間ｔｌ内に（１マイクロ秒内に）処理が終了するので、クロックストレッチの設定に伴う波形は観測されず、ホスト装置９０を待たせたようには見えない。なお、ホスト装置９０に監視用データを送信する場合、スレーブアドレス、メモリアドレス、及び指定されたページ番号に応じて対象とする監視用データを準備する必要がある。監視用データを準備してから当該監視用データの送信を開始させるまでを、１つのＩ２Ｃスレーブ処理内で行う場合、この全ての処理をクロックストレッチの解除まで（時間ｔｌ内で）終えることができない。このため、当該Ｉ２Ｃスレーブ処理（例えばＩ２Ｃスレーブ処理Ｍ０３）の前のＩ２Ｃスレーブ処理（例えばＩ２Ｃスレーブ処理Ｍ０２）において、クロックストレッチの解除後に監視用データの準備が行われる。
【００８７】
第１比較例に係るＩ２Ｃスレーブ処理は、必要なアドレス又はデータ、及びステータスを取込み、クロックストレッチを解除する第１処理と、第１処理の後、取り込んだデータ等に基づいて次のデータを準備する第２処理とを含む。第１処理が時間ｔｌ内に行われ、かつ、第２処理が、次のＩ２Ｃスレーブ処理が来るまで（１０マイクロ秒×８＝８０マイクロ秒以内）に行われると、クロックストレッチの設定による波形が観測されずにＩ２Ｃスレーブ処理が行われたこと（ホスト装置９０に応答したこと）になる。第１処理が開始されてから第２処理が完了するまでの所要時間を２０マイクロ秒程度とすると、一のＩ２Ｃスレーブ処理の終了から、次のＩ２Ｃスレーブ処理の開始までの空き時間は６０マイクロ秒程度となる。なお、上述の計算は、説明の便宜のためにＡｃｋ信号の送受が行われる１ビット分の期間を考慮せずに行っている。
【００８８】
ＱＳＦＰ２８ファームファクタでのＩ２Ｃ通信方式における通信速度は、最大で４００ｋＨｚである。ＱＳＦＰ−ＤＤ（Double  Density）又はＯＳＦＰ（Octal  Small  Form  Factor  Pluggable）等の規格において、４００Ｇｂｐｓの光通信を実現する光トランシーバでのＩ２Ｃ通信方式における通信速度として、最大で１ＭＨｚ又は１ＭＨｚ以上の速度が求められる。クロック信号の周波数が４００ｋＨｚ又は１ＭＨｚである場合、１クロックあたりの時間が２．５マイクロ秒又は１マイクロ秒と第１比較例に比べて短くなる。時間ｔｌも同様に、それぞれ１．３マイクロ秒又は０．５マイクロ秒と第１比較例に比べて短くなる。このため、第１処理の終了後から次のＩ２Ｃスレーブ処理の開始までの時間が、それぞれ、（Ａｃｋ信号の１ビット分を除き）２．５マイクロ秒×８＝２０マイクロ秒又は１マイクロ秒×８＝８マイクロ秒となる。その結果、図１１に示されるように、プロセッサ２２により行われる処理が、Ｉ２Ｃスレーブ処理（割込み処理）に占有されてしまう。すなわち、クロック信号の周波数が４００ｋＨｚ又は１ＭＨｚである場合に、第１比較例と同様の方法をそのまま適用すると、周期処理が滞ってしまい、この周期処理が適切に行われないおそれがある。つまり、上述した特許文献１に示されるデータ送信制御方法を用いてホスト装置９０に監視用データを送信しつつ周期処理を行う場合、Ｉ２Ｃ通信方式における通信速度（クロック信号の周波数）によっては、周期処理が滞るおそれがある。
【００８９】
この周期処理が滞るおそれについて、比較のための具体的な数値を用いて更に説明する。１０ミリ秒あたりに、光トランシーバ２からホスト装置９０に送信されるデータ数と、この通信に要する時間（通信時間）とを表１に示す。なお、図５に示される周期処理が１０ミリ秒ごとに行われ、周期処理自体に要する時間は５ミリ秒であると仮定して説明する。割込み処理が５ミリ秒以内に完了する場合には、残りの時間は空き時間とされる。
【表１】
2020141216.tif 000003
【００９０】
クロック信号の周波数が１００ｋＨｚである場合、１クロックあたりの時間は１０マイクロ秒であり、監視用データの送信単位である８ビット分の時間は８０マイクロ秒である。光トランシーバ２からホスト装置９０に送信するデータ数（以下、単に「データ数」という。）を１００バイト（ｂｙｔｅ）とし、スレーブアドレス及びメモリマップ等の送信によりデータ数が３バイト増加すると仮定すると、クロックストレッチが設定されない場合には、通信時間は１０３×８０マイクロ秒＝８２４０マイクロ秒となる。１回あたりの割込み処理に要する時間が２０マイクロ秒であるとすると、この通信時間のうちの１００バイト分のＩ２Ｃスレーブ処理の処理時間（割込み時間）は、１００×２０マイクロ秒＝２０００マイクロ秒となる。つまり、周期処理の処理時間が５ミリ秒であり、割込み処理に要する時間が２ミリ秒となるので、プロセッサ２２の１周期内（１０ミリ秒内）の処理時間は、合計で７ミリ秒である。なお、残りの３ミリ秒は空き時間となる。
【００９１】
クロック信号の周波数が４００ｋＨｚである場合、データ数として１００ｋＨｚの場合の４倍である４００バイトを１０ミリ秒の間に送信すると仮定し、同様に計算を行うと、クロックストレッチが設定されない場合には、通信時間は８０６０マイクロ秒となる。この場合には、周期処理の処理時間が５ミリ秒であり、割込み処理に要する時間が８ミリ秒程度となるので、プロセッサ２２が１周期内に実行しなければならない処理時間が合計で１３ミリ秒程度となる。このため、１周期内でのプロセッサ２２の処理時間が、仮定した１０ミリ秒に対して３ミリ秒程度超過してしまう。更に、クロック信号の周波数が１ＭＨｚである場合、データ数として１００ｋＨｚの場合の１０倍である１０００バイトを１０ミリ秒の間に送信すると仮定し、同様に計算を行うと、クロックストレッチが設定されない場合には、通信時間は８０２４マイクロ秒となる。この場合には、周期処理の処理時間が５ミリ秒であり、割込み処理に要する時間が２０ミリ秒程度となるので、プロセッサ２２が１周期内に実行しなければならない処理時間が合計で２５ミリ秒程度となる。このため、１周期内でのプロセッサ２２の処理時間が、仮定した１０ミリ秒に対して１５ミリ秒程度超過してしまう。このように、クロック信号の周波数が４００ｋＨｚ又は１ＭＨｚである場合に、比較例１，２では、プロセッサ２２により実行される処理が、Ｉ２Ｃスレーブ処理に占有されてしまい、周期処理が実行できないことが懸念される。
【００９２】
これに対して、本実施形態では、周期処理の処理時間に応じて、Ｉ２Ｃスレーブ処理の処理モードが、第１処理モード及び第２処理モードのいずれか一方に設定される。周期処理の処理時間が閾値Ｔｈよりも小さく、処理モードが第１処理モードに設定されている場合には、第１比較例と同様に、クロックストレッチを解除してから、次の監視用データの準備が行われる。一方、周期処理の処理時間が閾値Ｔｈ以上であり、処理モードが第２処理モードに設定されている場合には、次の監視用データの準備が行われた後、Ｉ２Ｃスレーブ処理内の最後においてクロックストレッチが解除される。この場合、図１２に示されるように、Ｉ２Ｃスレーブ処理において、クロックストレッチが設定されたまま、次の監視用データの準備が行われ、クロックストレッチが解除された後に、監視用データがホスト装置９０に送信される。例えば、Ｉ２Ｃスレーブ処理Ｍ０３において、クロックストレッチが設定されたまま、次の監視用データ「Ｄａｔａ２」の準備が行われ、クロックストレッチが解除された後に、監視用データ「Ｄａｔａ１」がホスト装置９０に送信される。
【００９３】
本実施形態において処理モードが第２処理モードに設定されている場合には、一のＩ２Ｃスレーブ処理が終了してから、クロック信号が８クロック分（又は９クロック分）送られる間、次のＩ２Ｃスレーブ処理（割込み処理）が入らない。例えば、クロック信号の周波数が４００ｋＨｚ又は１ＭＨｚである場合には、一のＩ２Ｃスレーブ処理の終了から次のＩ２Ｃスレーブ処理の開始までの時間は、それぞれ、２０マイクロ秒又は８マイクロ秒程度であり、プロセッサ２２は、当該期間を周期処理の実行に割り当てることができる。以上のように、光トランシーバ２の制御方法では、上位のホスト装置９０に監視用データを送信しつつ、周期処理を適切に行うことが可能となる。
【００９４】
この光トランシーバ２の制御方法では、プロセッサ２２が周期的に実行する周期処理には、ＴＯＳＡ４内のレーザダイオードの動作を制御する処理と、ＲＯＳＡ１０内のフォトダイオードの動作を制御する処理と、これらのレーザダイオード及びフォトダイオードの動作を制御する処理の結果に応じてＲＡＭ２６に格納されている監視用データを更新する処理と、を含む。
【００９５】
この制御方法では、ＴＯＳＡ４内のレーザダイオード及びＲＯＳＡ１０内のフォトダイオードの制御、並びに監視用データの更新を適切に行うことができるので、光トランシーバ２による光信号の適切な送受信が継続され、光トランシーバ２内の異常の有無を適切なタイミングで把握することが可能となる。
【００９６】
ホスト装置９０への監視用データの送信は、Ｉ２Ｃ規格に準拠して行われる。クロック信号の周波数は、一例として４００ｋＨｚ〜１ＭＨｚである。
【００９７】
１つの監視用データを送信する時間は、クロック信号の周期（１クロックあたりの時間）と当該監視用データのビット数とに応じて定まる。クロック信号の周期が１マイクロ秒〜２．５マイクロ秒であると、１つの監視用データである第１データを送信する時間に対して、次に送信する監視用データである第２データを読み出す処理に要する時間が大きくなり、周期処理を行う時間が確保できないおそれがある。上記構成では、クロック信号の周期が１マイクロ秒〜２．５マイクロ秒であっても、周期処理の処理時間が大きいと、割込み処理の処理モードが第２処理モードに設定されるので、周期処理を行う時間が確保され周期処理を適切に行うことが可能となる。
【００９８】
なお、本発明は、上記実施形態における例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【００９９】
ホスト装置９０と光トランシーバ２との間でのＩ２Ｃ通信以外の他のシリアル通信において、本実施形態に係る光トランシーバ２の制御方法が用いられてもよい。
【０１００】
クロック信号の周波数は、４００ｋＨｚ〜１ＭＨｚに限られない。クロック信号の周波数は、４００ｋＨｚよりも小さくてもよく、１ＭＨｚよりも大きくてもよい。
【０１０１】
上記実施形態では、タイマ値が閾値Ｔｈに等しい場合には、処理モードが第２処理モード（ＢｕｓｙフラグがＯＮ）に設定されているが、タイマ値が閾値Ｔｈに等しい場合に、処理モードが第１処理モード（ＢｕｓｙフラグがＯＦＦ）に設定されてもよい。
【符号の説明】
【０１０２】
２…光トランシーバ、４…ＴＯＳＡ、６…ＬＤＤ、８，１４…ＣＤＲ、１０…ＲＯＳＡ、１２…ＴＩＡ、２０…ＣＰＵ、２２…プロセッサ、２４…フラッシュＲＯＭ、２６…ＲＡＭ、４４…シフトレジスタ。
【図１】
2020141216.tif 000004
【図２】
2020141216.tif 000005
【図３】
2020141216.tif 000006
【図４】
2020141216.tif 000007
【図５】
2020141216.tif 000008
【図６】
2020141216.tif 000009
【図７】
2020141216.tif 000010
【図８】
2020141216.tif 000011
【図９】
2020141216.tif 000012
【図１０】
2020141216.tif 000013
【図１１】
2020141216.tif 000014
【図１２】
2020141216.tif 000015