(57)【特許請求の範囲】
【請求項１】
外部装置と通信可能な光トランシーバであって、
第１記憶回路と、前記第１記憶回路にファームウェアを書き込むための第１インターフェースと、を有するプログラム可能な第１デバイスと、
第２記憶回路と、前記第２記憶回路にファームウェアを書き込むための第２インターフェースと、を有するプログラム可能な第２デバイスと、
前記第１デバイスに電気的に接続され、前記第１記憶回路に書き込まれているファームウェアの版数番号及び前記第２記憶回路に書き込まれているファームウェアの版数番号と一意に対応する全体版数番号を格納するための補助記憶回路と、
を備え、
前記第１デバイスには、前記補助記憶回路に格納されている前記全体版数番号が有効か無効かを示す状態変数が格納され、
前記状態変数は、前記第１インターフェースを介して前記第１記憶回路にファームウェアが書き込まれたか、または、前記第２インターフェースを介して前記第２記憶回路にファームウェアが書き込まれたことに応じて、無効を示すように設定され、
前記第１デバイスは、前記光トランシーバの起動処理において、前記状態変数が無効を示している場合に、前記補助記憶回路に格納されている前記全体版数番号を無効な値に書き換えるとともに、前記状態変数を有効を示すように設定する、光トランシーバ。
【請求項２】
前記第１デバイスは、前記第２デバイスと電気的に接続され、前記第２インターフェースを介して前記第２記憶回路にファームウェアが書き込まれたことによって前記第２デバイスが送信する無効信号を受信して、前記無効信号に応じて前記状態変数を無効を示すように設定する、請求項１に記載の光トランシーバ。
【請求項３】
前記第１デバイスは、前記外部装置から前記全体版数番号を受信し、受信した前記全体版数番号を前記補助記憶回路に格納する、請求項１または請求項２に記載の光トランシーバ。
【請求項４】
前記第１デバイスは、前記外部装置からの指示に応じて、前記補助記憶回路に格納されている前記全体版数番号を読み出して、読み出した前記全体版数番号を前記外部装置に送信し、
前記第１デバイスは、前記全体版数番号が前記無効な値である場合には、前記外部装置から前記全体版数番号を受信し、受信した前記全体版数番号を前記補助記憶回路に格納する、請求項１または請求項２に記載の光トランシーバ。
【請求項５】
前記第１記憶回路は、別のファームウェアをさらに格納し、
前記第２記憶回路は、別のファームウェアをさらに格納し、
前記補助記憶回路は、前記第１記憶回路に格納されている前記別のファームウェアの版数番号及び前記第２記憶回路に格納されている前記別のファームウェアの版数番号と一意に対応する別の全体版数番号をさらに格納し、
前記第１デバイスは、前記光トランシーバの起動処理において、前記状態変数が無効を示している場合に、前記補助記憶回路に格納されている前記全体版数番号及び前記別の全体版数番号を無効な値に書き換えるとともに、前記状態変数を有効を示すように設定する、請求項１〜請求項４のいずれか一項に記載の光トランシーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、光トランシーバに関する。
【背景技術】
【０００２】
複数のプログラム可能なデバイス（プログラマブルデバイス）を備える光トランシーバがある。例えば、特許文献１には、上位レイヤとの通信を行うプログラム可能なロジックデバイスと、光トランシーバの制御を行うＣＰＵと、を備える光トランシーバが記載されている。
【０００３】
また、非特許文献１に記載されているように、光トランシーバでは、モジュールとして、１つのファームウェアのバージョン番号が定義されることがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１６５７８０号公報
【非特許文献】
【０００５】
【非特許文献１】“CFP MSA Management Interface Specification Version 2.2”, ＜URL：http://www.cfp-msa.org/Documents/CFP_MSA_MIS_V2p2r06a.pdf＞
【非特許文献２】“CFP4 Hardware Specification”, ＜URL：http://www.cfp-msa.org/Documents/CFP-MSA_CFP4_HW-Spec-rev0.1.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
光トランシーバが複数のプログラマブルデバイスを備えている場合、それぞれのプログラマブルデバイスのファームウェアにもバージョン番号が存在する。各プログラマブルデバイスの処理内容が異なるような場合には、複数のプログラマブルデバイスのうちの一部のプログラマブルデバイスのファームウェアのみを修正することがある。モジュールとして１つのファームウェアのバージョン番号（以下、「全体バージョン番号」という。）が定義される光トランシーバでは、全体バージョン番号は、各プログラマブルデバイスのファームウェアのバージョンの組み合わせを識別できるように定義されることになる。つまり、一部のプログラマブルデバイスのファームウェアのバージョン番号のみが変更されたとしても、全体バージョン番号は変更される必要がある。このため、各ファームウェアのバージョン番号と全体バージョン番号とは一致しないことがあり、プログラマブルデバイスのファームウェアの一つのバージョン番号に対して、複数の全体バージョン番号が対応することがあるので、各ファームウェアには全体バージョン番号を含めることができない。
【０００７】
ところで、各プログラマブルデバイス固有のインターフェースを経由して、各プログラマブルデバイスの内蔵メモリに直接ファームウェアが書き込まれることがある。このインターフェースを利用して各プログラマブルデバイスの内蔵メモリに直接プログラムをダウンロードする場合(以下、「直接ダウンロード」という。）、そのダウンロードデータには全体バージョン番号を含めることができないので、全体バージョン番号はプログラマブルデバイスの外部に設けられたメモリ等に保存する構成が考えられる。
【０００８】
光トランシーバのコネクタの端子の大部分は利用目的が規定されており、光トランシーバの製造者がその製造に係る目的のために自由に使うことができる端子は限られている。例えば、非特許文献２に記載の光トランシーバでは、５本の端子のみが利用可能である。このように、各プログラマブルデバイスの直接ダウンロード用のインターフェースに加えて、メモリ等への書き込みインターフェースを光トランシーバのコネクタ端子に接続する余裕は無い。このため、直接ダウンロードで全ての内蔵するプログラマブルデバイスにファームウェアを書き込んだ後、メモリに接続されたデバイスに、全体バージョン番号が送信されてメモリに保存されることがある。
【０００９】
しかしながら、直接ダウンロードによってプログラマブルデバイスにファームウェアを書き込んだ直後において、メモリにはファームウェアを書き込む前の状態における全体バージョン番号が保存されている。このため、光トランシーバに接続されるホスト装置等の外部装置は、メモリに保存されている全体バージョン番号が正しいかどうか判定することができず、誤った全体バージョンを取得するおそれがある。
【００１０】
本発明の一態様は、外部装置による誤った全体バージョン番号の取得を防止可能な光トランシーバを提供する。
【課題を解決するための手段】
【００１１】
本発明の一態様に係る光トランシーバは、外部装置と通信可能な光トランシーバである。この光トランシーバは、第１記憶回路と、第１記憶回路にファームウェアを書き込むための第１インターフェースと、を有するプログラム可能な第１デバイスと、第２記憶回路と、第２記憶回路にファームウェアを書き込むための第２インターフェースと、を有するプログラム可能な第２デバイスと、第１デバイスに電気的に接続され、第１記憶回路に書き込まれているファームウェアの版数番号及び第２記憶回路に書き込まれているファームウェアの版数番号と一意に対応する全体版数番号を格納するための補助記憶回路と、を備える。第１デバイスには、補助記憶回路に格納されている全体版数番号が有効か無効かを示す状態変数が格納され、状態変数は、第１インターフェースを介して第１記憶回路にファームウェアが書き込まれたか、または、第２インターフェースを介して第２記憶回路にファームウェアが書き込まれたことに応じて、無効を示すように設定され、第１デバイスは、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号を無効な値に書き換えるとともに、状態変数を有効を示すように設定する。
【発明の効果】
【００１２】
本発明の一態様によれば、外部装置による誤った全体版数番号（全体バージョン番号）の取得を防止できる。
【図面の簡単な説明】
【００１３】
【図１】一実施形態に係る光トランシーバを模式的に示す構成図である。
【図２】全体バージョン番号と各デバイスのファームウェアのバージョン番号との関係の一例を示す図である。
【図３】図１の光トランシーバの直接ダウンロード時の動作を説明するための図である。
【図４】図３の光トランシーバの起動時の動作を説明するための図である。
【図５】図１の光トランシーバの起動処理を示すフローチャートである。
【図６】比較例の光トランシーバを模式的に示す構成図である。
【図７】変形例の光トランシーバを模式的に示す構成図である。
【発明を実施するための形態】
【００１４】
［本願発明の実施形態の説明］
最初に本発明の実施形態の内容を列記して説明する。
【００１５】
本発明の一態様に係る光トランシーバは、外部装置と通信可能な光トランシーバである。この光トランシーバは、第１記憶回路と、第１記憶回路にファームウェアを書き込むための第１インターフェースと、を有するプログラム可能な第１デバイスと、第２記憶回路と、第２記憶回路にファームウェアを書き込むための第２インターフェースと、を有するプログラム可能な第２デバイスと、第１デバイスに電気的に接続され、第１記憶回路に書き込まれているファームウェアの版数番号及び第２記憶回路に書き込まれているファームウェアの版数番号と一意に対応する全体版数番号を格納するための補助記憶回路と、を備える。第１デバイスには、補助記憶回路に格納されている全体版数番号が有効か無効かを示す状態変数が格納され、状態変数は、第１インターフェースを介して第１記憶回路にファームウェアが書き込まれたか、または、第２インターフェースを介して第２記憶回路にファームウェアが書き込まれたことに応じて、無効を示すように設定され、第１デバイスは、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号を無効な値に書き換えるとともに、状態変数を有効を示すように設定する。
【００１６】
この光トランシーバによれば、第１インターフェースを介して第１記憶回路にファームウェアが書き込まれたか、または、第２インターフェースを介して第２記憶回路にファームウェアが書き込まれたことに応じて、補助記憶回路に格納されている全体版数番号が無効であることを示すように状態変数が設定される。そして、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号が無効な値に書き換えられるとともに、状態変数が有効を示すように設定される。このため、光トランシーバの起動処理が完了して、外部装置との通信を開始した時点では、補助記憶回路に格納されている全体版数番号は無効な値に書き換えられているので、外部装置が全体版数番号を取得しても、無効な値の全体版数番号が取得され、誤った全体版数番号が取得されることを防止できる。
【００１７】
第１デバイスは、第２デバイスと電気的に接続され、第２インターフェースを介して第２記憶回路にファームウェアが書き込まれたときに第２デバイスが送信する無効信号を受信して、無効信号に応じて状態変数を無効を示すように設定してもよい。この場合、第２デバイスから送信される無効信号によって、第１デバイスは、第２インターフェースを介して第２記憶回路にファームウェアが書き込まれたことを認識できる。そして、第１デバイスが無効信号を受信したことに応じて、状態変数が無効を示すように設定されるので、外部装置による誤った全体版数番号の取得をさらに確実に防止できる。
【００１８】
第１デバイスは、外部装置から全体版数番号を受信し、受信した全体版数番号を補助記憶回路に格納してもよい。この場合、全体版数番号を補助記憶回路に直接的に書き込むことができないとしても、第１デバイスによって全体版数番号を補助記憶回路に格納することができる。
【００１９】
第１デバイスは、外部装置からの指示に応じて、補助記憶回路に格納されている全体版数番号を読み出して、読み出した全体版数番号を外部装置に送信し、第１デバイスは、全体版数番号が無効な値である場合には、外部装置から全体版数番号を受信し、受信した全体版数番号を補助記憶回路に格納してもよい。この場合、外部装置によって取得された全体版数番号が無効な値である場合には、外部装置からの全体版数番号を補助記憶回路に格納することができるので、補助記憶回路に正しい全体版数番号を保存することが可能となる。
【００２０】
第１記憶回路は、別のファームウェアをさらに格納してもよく、第２記憶回路は、別のファームウェアをさらに格納してもよく、補助記憶回路は、第１記憶回路に格納されている別のファームウェアの版数番号及び第２記憶回路に格納されている別のファームウェアの版数番号と一意に対応する別の全体版数番号をさらに格納してもよい。第１デバイスは、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号及び別の全体版数番号を無効な値に書き換えるとともに、状態変数を有効を示すように設定してもよい。この場合、第１デバイス及び第２デバイスが２つのファームウェアを格納する構成においても、外部装置による誤った全体版数番号の取得を防止できる。
【００２１】
［本願発明の実施形態の詳細］
本発明の実施形態に係る光トランシーバの具体例を、以下に図面を参照しつつ説明する。なお、本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００２２】
図１は、一実施形態に係る光トランシーバを模式的に示す構成図である。図１に示される光トランシーバ１は、例えば、１００Ｇｂｐｓのフォームファクタの一つであるＣＦＰ  ＭＳＡ（100G Form-factor Pluggable Multi-Source Agreement）に準拠した光トランシーバである。光トランシーバ１は、接続バスＢ１を介してホスト装置（外部装置）２に通信可能に接続されている。ホスト装置２は、上位監視装置であり、光トランシーバ１の監視及び制御を行う。接続バスＢ１は、例えば、シリアルバスであり、ＭＤＩＯ（Management Data Input/Output）バスである。なお、ＣＦＰ以外の光トランシーバでは、接続バスＢ１は、例えば、他のシリアルバスであり、Ｉ２Ｃ（Inter Integrated Circuit）バス、ＳＰＩ（SerialPeripheral Interface）バス等である。また、光トランシーバ１の製造工程において、接続バスＢ１には、ホスト装置２以外にも検査装置及び製造用のパソコン等が接続される場合がある。光トランシーバ１には、光信号を送信するための発光素子及び光信号を受信するための受光素子等、さらにそれらを制御するための電子回路等も搭載されるが、図示していない。
【００２３】
光トランシーバ１は、第１デバイス１１と、第２デバイス１２と、外部メモリ１３（補助記憶回路）と、を備えている。第１デバイス１１は、プログラム可能なデバイス（プログラマブルデバイス）であり、例えば、メインＣＰＵ（Central Processing Unit）である。第１デバイス１１は、接続バスＢ１を介して電気的にホスト装置２等に接続されており、ホスト装置２との通信制御を行う。第１デバイス１１は、例えば、ホスト装置２等との通信用のレジスタ（不図示）と、メモリ２１（第１記憶回路）と、インターフェースＤ１（第１インターフェース）と、を備えている。インターフェースＤ１は、主に光トランシーバ１の製造工程において、特定の製造用の機器に接続される。光トランシーバ１がホスト装置２に組み込まれて市場にて伝送装置の一部として使用される際には、インターフェースＤ１はホスト装置２等に接続されていなくてもよい。インターフェースＤ１の詳細は後述する。
【００２４】
メモリ２１は、内部の記憶情報の書き換えが可能な不揮発性の記憶素子であり、例えば、フラッシュＲＯＭ（Read Only Memory）である。メモリ２１は、領域２１ａと、領域２１ｆと、を含む。領域２１ａには、第１デバイス１１のファームウェアが格納される。ファームウェアには、第１デバイス１１の起動処理等に関するシステムプログラム、第１デバイス１１の制御に関するプログラム、及び、そのファームウェアの版数を示すバージョン番号（版数番号）が含まれている。光トランシーバ１の起動時において、第１デバイス１１は領域２１ａに書き込まれたファームウェアを読み出して、そのファームウェアに従って動作する。
【００２５】
領域２１ｆには、フラグＦ１（状態変数）が格納される。フラグＦ１は、外部メモリ１３に格納されている全体バージョン番号（全体版数番号）が有効か無効かを示すフラグである。フラグＦ１は、例えば、少なくとも１ビットのバイナリデータであり、「０」が設定されている場合に、外部メモリ１３に格納されている全体バージョン番号が有効であることを示し、「１」が設定されている場合に、外部メモリ１３に格納されている全体バージョン番号が無効であることを示す。なお、全体バージョン番号が有効か無効かというのは、後述するように、インターフェースＤ１を介してメモリ２１に新たにファームウェアが書き込まれたか否かという情報と対応している。すなわち、「全体バージョン番号が無効である」とは、インターフェースＤ１を介してメモリ２１に新たにファームウェアが書き込まれた場合には、全体バージョン番号はそれに応じて新しい正しい番号に書き換えられなければならないという意味において無効である、ということを意味する。また、「全体バージョン番号が有効である」とは、そのようにインターフェースＤ１を介してメモリ２１に書込まれることがなければ、全体バージョン番号はそのままの値で正しい番号となっているという意味において有効である、ということを意味する。このように、有効か無効かというのは、全体バージョン番号を正しい番号に更新する必要があるか否かという２つの状態に対応している。従って、フラグＦ１が「０（有効）」か「１（無効）」かは、全体バージョン番号の更新が必要か否かの何れかであることを判別できればよいので、「０（無効）」と「１（有効）」というように互いに入れ替えた定義が用いられてもよく、さらに「００（有効）」と「１１（無効）」といった２ビット以上のバイナリデータが使用されてもよい。
【００２６】
第２デバイス１２は、プログラム可能なデバイス（プログラマブルデバイス）であり、例えば、サブＣＰＵである。第２デバイス１２は、接続バスＢ２を介して電気的に第１デバイス１１に接続されている。第２デバイス１２は、例えば、レーザ制御等の光トランシーバ１の制御を行う。第２デバイス１２は、メモリ２２（第２記憶回路）と、インターフェースＤ２（第２インターフェース）と、を備えている。インターフェースＤ２は、主に光トランシーバ１の製造工程において、特定の製造用の機器に接続される。光トランシーバ１がホスト装置２に組み込まれて市場にて伝送装置の一部として使用される際には、インターフェースＤ２はホスト装置２等に接続されていなくてもよい。インターフェースＤ２の詳細は後述する。
【００２７】
メモリ２２は、内部の記憶情報の書き換えが可能な不揮発性の記憶素子であり、例えば、フラッシュＲＯＭである。メモリ２２は、領域２２ａと、領域２２ｆと、を含む。領域２２ａには、第２デバイス１２のファームウェアが格納される。ファームウェアには、第２デバイス１２の起動処理等に関するシステムプログラム、第２デバイス１２の制御に関するプログラム、及び、そのファームウェアのバージョン番号が含まれている。光トランシーバ１の起動時において、第２デバイス１２は領域２２ａに書き込まれたファームウェアを読み出して、そのファームウェアに従って動作する。
【００２８】
領域２２ｆには、フラグＦ２（状態変数）が格納される。フラグＦ２は、外部メモリ１３に格納されている全体バージョン番号が有効か無効かを示すフラグである。フラグＦ２は、例えば、少なくとも１ビットのバイナリデータであり、「０」が設定されている場合に、外部メモリ１３に格納されている全体バージョン番号が有効であることを示し、「１」が設定されている場合に、外部メモリ１３に格納されている全体バージョン番号が無効であることを示す。なお、全体バージョン番号が有効か無効かというのは、後述するように、インターフェースＤ２を介してメモリ２２に新たにファームウェアが書き込まれたか否かという情報と対応している。すなわち、「全体バージョン番号が無効である」とは、インターフェースＤ２を介してメモリ２２に新たにファームウェアが書き込まれた場合には、全体バージョン番号はそれに応じて新しい正しい番号に書き換えられなければならないという意味において無効である、ということを意味する。また、「全体バージョン番号が有効である」とは、そのようにインターフェースＤ２を介してメモリ２２に書込まれることがなければ、全体バージョン番号はそのままの値で正しい番号となっているという意味において有効である、ということを意味する。このように、有効か無効かというのは、全体バージョン番号の更新が必要な否かという２つの状態を便宜的に表している。従って、フラグＦ２が「０（有効）」か「１（無効）」かは、全体バージョン番号の更新が必要か否かの何れかであることを判別できればよいので、「０（無効）」と「１（有効）」と互いに入れ替えた定義が用いられてもよく、さらに「００（有効）」と「１１（無効）」といった２ビット以上のバイナリデータが使用されてもよい。
【００２９】
外部メモリ１３は、内部の記憶情報の書き換えが可能な不揮発性の記憶素子であり、例えば、フラッシュＲＯＭである。外部メモリ１３は、接続バスＢ３を介して電気的に第１デバイス１１に接続されている。外部メモリ１３は、領域１３ａを含む。領域１３ａには、全体バージョン番号が格納される。光トランシーバ１では、モジュールとして１つのファームウェアのバージョン番号である全体バージョン番号が定義されている。全体バージョン番号は、第１デバイス１１のファームウェアのバージョン番号と第２デバイス１２のファームウェアのバージョン番号との組み合わせを一意的に識別可能な番号である。すなわち、これは、全体バージョン番号が一つに特定されれば、相互の対応関係を示す情報（例えば、対応表）を参照して、全体バージョン番号に対応する個々のファームウェアのバージョン番号が一意的に求まる状態にあることを意味する。
【００３０】
光トランシーバ１では、第１デバイス１１が行う制御と、第２デバイス１２が行う制御とは、処理内容が大きく異なるので、第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアのいずれか一方のみが修正されることがある。例えば、ホスト装置２との通信用のレジスタのアドレスマッピングが変更された場合には、第２デバイス１２が行う制御は変更されないので、第１デバイス１１のファームウェアのみが修正される。一方、レーザ制御等の処理が変更された場合には、第１デバイス１１が行う制御は変更されないので、第２デバイス１２のファームウェアのみが修正される。つまり、第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアとは個別に更新され得るので、第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアの少なくともいずれかが更新されると、全体バージョン番号も更新される。
【００３１】
図２は、全体バージョン番号と各デバイスのファームウェアのバージョン番号との関係の一例を示す図である。図２に示されるように、第１デバイス１１のファームウェアのバージョン番号が「１．０」であり、第２デバイス１２のファームウェアのバージョン番号が「１．０」である場合、全体バージョン番号は「１．０」である。この状態で、第１デバイス１１のファームウェアがバージョン番号「１．１」のファームウェアに更新された場合、全体バージョン番号は「１．１」となる。さらに、第２デバイス１２のファームウェアがバージョン番号「１．１」のファームウェアに更新された場合、全体バージョン番号は「１．２」となる。さらに、第１デバイス１１のファームウェアがバージョン番号「１．２」のファームウェアに更新されるとともに、第２デバイス１２のファームウェアがバージョン番号「１．２」のファームウェアに更新された場合、全体バージョン番号は「１．３」となる。このように、デバイスのファームウェアのバージョン番号に対して、全体バージョン番号が１つ以上割り当てられることがある。例えば、第１デバイス１１のバージョン番号「１．１」のファームウェアに対して、全体バージョン番号は「１．１」及び「１．２」が割り当てられる。
【００３２】
図１に戻って、光トランシーバ１の説明を続ける。インターフェースＤ１は、第１デバイス１１のメモリ２１に第１デバイス１１のファームウェアを直接書き込むためのインターフェースである。つまり、インターフェースＤ１は、第１デバイス１１に固有のインターフェースであって、直接ダウンロード用のインターフェースである。第１デバイス１１のファームウェアは、光トランシーバ１の非動作時にインターフェースＤ１を介してメモリ２１の領域２１ａに直接書き込まれる。なお、この実施形態では、直接ダウンロードを行う前に、領域２１ａにファームウェアが格納されている場合には、領域２１ａに格納されているファームウェアが、インターフェースＤ１を介して第１デバイス１１に送信されたファームウェアによって書き換えられる。また、後述するように、インターフェースＤ１は、光トランシーバ１の製造段階において第１デバイス１１のメモリ２１の領域２１ａに最初にファームウェアを書き込む場合にも使用することができる。
【００３３】
インターフェースＤ１を介して第１デバイス１１に送信されるデータには、起動処理等に関するシステムプログラム、第１デバイス１１の制御に関するプログラム、及び、ファームウェアのバージョン番号を有するファームウェア部分と、フラグＦ１の値（＝１）を有する部分と、が含まれる。このため、インターフェースＤ１を介して第１デバイス１１のメモリ２１にファームウェアを書き込む場合、起動処理等に関するシステムプログラム、第１デバイス１１の制御に関するプログラム、及び、ファームウェアのバージョン番号が領域２１ａに書き込まれ、フラグＦ１の値が領域２１ｆに書き込まれる。つまり、フラグＦ１は、インターフェースＤ１によってメモリ２１にファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定される。全体バージョン番号が無効であることを示す値としては、例えば、正常な全体バージョン番号の範囲が１．００から９９．９９であった場合に、その範囲外の０．００または９９９．００などを使用することができる。
【００３４】
インターフェースＤ２は、第２デバイス１２のメモリ２２に第２デバイス１２のファームウェアを直接書き込むためのインターフェースである。つまり、インターフェースＤ２は、第２デバイス１２に固有のインターフェースであって、直接ダウンロード用のインターフェースである。第２デバイス１２のファームウェアは、光トランシーバ１の非動作時にインターフェースＤ２を介してメモリ２２の領域２２ａに直接書き込まれる。なお、この実施形態では、直接ダウンロードを行う前に、領域２２ａにファームウェアが格納されている場合には、領域２２ａに格納されているファームウェアが、インターフェースＤ２を介して第２デバイス１２に送信されたファームウェアによって書き換えられる。また、後述するように、インターフェースＤ２は、光トランシーバ１の製造段階において第２デバイス１２のメモリ２２の領域２２ａに最初にファームウェアを書き込む場合にも使用することができる。
【００３５】
インターフェースＤ２を介して第２デバイス１２に送信されるデータには、起動処理等に関するシステムプログラム、第２デバイス１２の制御に関するプログラム、及び、ファームウェアのバージョン番号を有するファームウェア部分と、フラグＦ２の値（＝１）を有する部分と、が含まれる。このため、インターフェースＤ２を介して第２デバイス１２のメモリ２２にファームウェアを書き込む場合、起動処理等に関するシステムプログラム、第２デバイス１２の制御に関するプログラム、及び、ファームウェアのバージョン番号が領域２２ａに書き込まれ、フラグＦ２の値が領域２２ｆに書き込まれる。つまり、フラグＦ２は、インターフェースＤ２によってメモリ２２にファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定される。
【００３６】
第１デバイス１１は、光トランシーバ１の起動処理において、フラグＦ１をチェックする。第１デバイス１１は、フラグＦ１が外部メモリ１３に格納されている全体バージョン番号が有効であることを示している場合、残りの起動処理を行う。第１デバイス１１は、フラグＦ１が外部メモリ１３に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ１３に格納されている全体バージョン番号を無効な値に書き換えるとともに、外部メモリ１３に格納されている全体バージョン番号が有効であることを示すようにフラグＦ１を設定し、残りの起動処理を行う。
【００３７】
第１デバイス１１は、第２デバイス１２から後述の無効信号を受信したことに応じて、外部メモリ１３に格納されている全体バージョン番号を無効な値に書き換える。この場合、第１デバイス１１は、第２デバイス１２から無効信号を受信したことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すようにフラグＦ１を設定してもよい。つまり、フラグＦ１は、インターフェースＤ２によってメモリ２２にファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定されてもよい。第１デバイス１１は、光トランシーバ１の起動処理が完了したことに応じて、ホスト装置２との通信が可能であることを示すレディー信号をホスト装置２に送信する。
【００３８】
第１デバイス１１は、光トランシーバ１の全体バージョン番号の取得指示をホスト装置２から受信したことに応じて、外部メモリ１３に格納されている全体バージョン番号を読み出して、読み出した全体バージョン番号をホスト装置２に送信する。第１デバイス１１は、光トランシーバ１に含まれるデバイスのファームウェアのバージョン番号の取得指示をホスト装置２から受信したことに応じて、メモリ２１からバージョン番号を取得するとともに、第２デバイス１２のファームウェアのバージョン番号の取得指示を第２デバイス１２に出力する。そして、第１デバイス１１は、第２デバイス１２から第２デバイス１２のファームウェアのバージョン番号を受信し、第１デバイス１１のファームウェアのバージョン番号及び第２デバイス１２のファームウェアのバージョン番号をホスト装置２に送信する。第１デバイス１１は、全体バージョン番号とともに全体バージョン番号書き込み指示をホスト装置２から受信したことに応じて、受信した全体バージョン番号を外部メモリ１３に格納する。
【００３９】
光トランシーバ１は、ファームウェアのアップグレード機能を備えてもよい。この場合、第１デバイス１１は、光トランシーバ１の動作中に、ホスト装置２から接続バスＢ１を介して第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアの少なくともいずれかと全体バージョン番号とを含んだアップグレードデータを受信する。第１デバイス１１は、アップグレードデータを保存する際に光トランシーバ１がホスト装置２との通信を継続するために、受信したアップグレードデータを一旦外部メモリ１３に格納する。
【００４０】
第２デバイス１２は、光トランシーバ１の起動処理において、フラグＦ２をチェックする。第２デバイス１２は、フラグＦ２が外部メモリ１３に格納されている全体バージョン番号が有効であることを示している場合、第２デバイス１２の残りの起動処理を行う。第２デバイス１２は、フラグＦ２が外部メモリ１３に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ１３に格納されている全体バージョン番号が無効であることを示す無効信号を第１デバイス１１に送信するとともに、フラグＦ２を有効を示すように設定し、第２デバイス１２の残りの起動処理を行う。つまり、第２デバイス１２は、インターフェースＤ２を介してメモリ２２にファームウェアが書き込まれたことによって、無効信号を送信する。
【００４１】
第２デバイス１２は、第２デバイス１２のファームウェアのバージョン番号の取得指示を第１デバイス１１から受信すると、メモリ２２からバージョン番号を取得して、取得したバージョン番号を第１デバイス１１に出力する。
【００４２】
なお、光トランシーバ１を製造する時に、光トランシーバ１を組み立てた直後は、第１デバイス１１及び第２デバイス１２にはファームウェアが書き込まれていないので、インターフェースＤ１及びインターフェースＤ２を経由して、第１デバイス１１のメモリ２１及び第２デバイス１２のメモリ２２に直接ファームウェアが書き込まれる。また、第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアが一度書き込まれた後であっても、アップグレード機能で更新可能な範囲外に存在するルーチン（システムプログラム）の変更が必要になった場合等には、インターフェースＤ１及びインターフェースＤ２を経由して、第１デバイス１１のメモリ２１及び第２デバイス１２のメモリ２２に直接ファームウェアが書き込まれる。
【００４３】
次に、図２〜図５を用いて、光トランシーバ１の動作を説明する。図３は、光トランシーバ１の直接ダウンロード時の動作を説明するための図である。図４は、図３の光トランシーバ１の起動時の動作を説明するための図である。図５は、光トランシーバ１の起動処理を示すフローチャートである。
【００４４】
まず、第１デバイス１１のメモリ２１にバージョン番号が「Ｘ」のファームウェアが格納されており、第２デバイス１２のメモリ２２にバージョン番号が「ＹＹ」のファームウェアが格納されているとする。このとき、外部メモリ１３には、全体バージョン番号として「Ｚ」が格納されている。この状態において、図３に示されるように、直接ダウンロードによって、インターフェースＤ１を経由して、第１デバイス１１のメモリ２１にバージョン番号が「ＸＸ」のファームウェアが書き込まれる。このとき、メモリ２１の領域２１ｆに、フラグＦ１の値として「１」が書き込まれる。つまり、第１デバイス１１のファームウェアを直接ダウンロードによって更新した場合には、全体バージョン番号とは無関係にフラグＦ１の値が「１」に設定される。
【００４５】
図３の光トランシーバ１の状態において、光トランシーバ１を起動した場合の起動処理について説明する。この場合、まず、第１デバイス１１はメモリ２１の領域２１ａに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。また、第２デバイス１２は、メモリ２２の領域２２ａに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。そして、第１デバイス１１は、メモリ２１の領域２１ｆを読み出し、フラグＦ１の値が「１」であるか否か、つまり、外部メモリ１３に格納されている全体バージョン番号が無効であるか否かを判定する（ステップＳ０１）。
【００４６】
ステップＳ０１において、フラグＦ１の値が「１」であると判定されると（ステップＳ０１；Ｙｅｓ）、第１デバイス１１は、外部メモリ１３の領域１３ａに格納されている全体バージョン番号を無効な値に書き換える（ステップＳ０２）。そして、第１デバイス１１は、メモリ２１の領域２１ｆに格納されているフラグＦ１の値を「０」に書き換える（ステップＳ０３）。そして、第１デバイス１１は、残りの起動処理を行って、ホスト装置２にレディー信号を出力する（ステップＳ０４）。このようにして、光トランシーバ１の起動処理が行われ、光トランシーバ１は図４に示される状態となる。
【００４７】
ホスト装置２は、光トランシーバ１からレディー信号を受信した後、例えば、アップグレード機能で第１デバイス１１のファームウェアをアップグレードする際に、光トランシーバ１の現在の全体バージョンを確認するために、光トランシーバ１の全体バージョン番号の取得指示を光トランシーバ１に出力する。第１デバイス１１は、ホスト装置２から光トランシーバ１の全体バージョン番号の取得指示を受信すると、外部メモリ１３の領域１３ａから全体バージョン番号を読み出す。このとき、外部メモリ１３の領域１３ａには無効な値が格納されているので、第１デバイス１１は、全体バージョン番号として無効な値をホスト装置２に送信する。
【００４８】
続いて、ホスト装置２は、全体バージョン番号として無効な値を受信すると、光トランシーバ１に含まれる各デバイスのファームウェアのバージョン番号の取得指示を光トランシーバ１に送信する。そして、第１デバイス１１は、光トランシーバ１に含まれるデバイスのファームウェアのバージョン番号の取得指示を受信すると、メモリ２１からバージョン番号「ＸＸ」を取得するとともに、第２デバイス１２のファームウェアのバージョン番号の取得指示を第２デバイス１２に出力する。そして、第２デバイス１２は、第２デバイス１２のファームウェアのバージョン番号の取得指示を受信すると、メモリ２２からバージョン番号「ＹＹ」を取得して、取得したバージョン番号「ＹＹ」を第１デバイス１１に出力する。
【００４９】
続いて、第１デバイス１１は、第２デバイス１２から第２デバイス１２のファームウェアのバージョン番号「ＹＹ」を取得すると、第１デバイス１１のファームウェアのバージョン番号「ＸＸ」及び第２デバイス１２のファームウェアのバージョン番号「ＹＹ」をホスト装置２に送信する。そして、ホスト装置２は、第１デバイス１１のファームウェアのバージョン番号「ＸＸ」及び第２デバイス１２のファームウェアのバージョン番号「ＹＹ」を受信すると、第１デバイス１１のファームウェアのバージョン番号「ＸＸ」及び第２デバイス１２のファームウェアのバージョン番号「ＹＹ」に対応付けられた光トランシーバ１の全体バージョン番号「ＺＺ」を、予め格納されているテーブルから取得し、取得した全体バージョン番号「ＺＺ」とともに、全体バージョン番号の書き込み指示を光トランシーバ１に送信する。そして、第１デバイス１１は、ホスト装置２から全体バージョン番号「ＺＺ」を受信すると、外部メモリ１３の領域１３ａに全体バージョン番号「ＺＺ」を書き込む。このようにして、ホスト装置２は、ファームウェア更新後の正しい全体バージョン番号を取得するとともに、光トランシーバ１は、ファームウェア更新後の正しい全体バージョン番号を外部メモリ１３に格納する。
【００５０】
一方、第１デバイス１１のメモリ２１にバージョン番号が「Ｘ」のファームウェアが格納されており、第２デバイス１２のメモリ２２にバージョン番号が「ＹＹ」のファームウェアが格納されており、外部メモリ１３には、全体バージョン番号として「Ｚ」が格納されている状態で、ファームウェアの更新を行うことなく光トランシーバ１を起動した場合の起動処理について説明する。この場合、まず、第１デバイス１１はメモリ２１の領域２１ａに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。また、第２デバイス１２は、メモリ２２の領域２２ａに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。そして、第１デバイス１１は、メモリ２１の領域２１ｆを読み出し、フラグＦ１の値が「１」であるか否か、つまり、外部メモリ１３に格納されている全体バージョン番号が無効であるか否かを判定する（ステップＳ０１）。
【００５１】
ステップＳ０１において、フラグＦ１の値が「０」であると判定されると（ステップＳ０１；Ｎｏ）、第１デバイス１１は、残りの起動処理を行って、ホスト装置２にレディー信号を出力する（ステップＳ０４）。このようにして、光トランシーバ１の起動処理が行われる。
【００５２】
ホスト装置２は、光トランシーバ１からレディー信号を受信した後、例えば、アップグレード機能で第１デバイス１１のファームウェアをアップグレードする際に、光トランシーバ１の現在の全体バージョンを確認するために、光トランシーバ１の全体バージョン番号の取得指示を光トランシーバ１に出力する。第１デバイス１１は、ホスト装置２から光トランシーバ１の全体バージョン番号の取得指示を受信すると、外部メモリ１３の領域１３ａから全体バージョン番号を読み出す。このとき、外部メモリ１３の領域１３ａには有効な値である「Ｚ」が格納されているので、第１デバイス１１は、全体バージョン番号として「Ｚ」をホスト装置２に送信する。このようにして、ホスト装置２は、光トランシーバ１の全体バージョン番号を取得する。
【００５３】
アップグレード機能によって、第１デバイス１１のファームウェアを更新する場合、ホスト装置２から第１デバイス１１に送信されるアップグレードデータには、第１デバイス１１の制御に関するプログラム（ファームウェア）、ファームウェアのバージョン番号、及び、全体バージョン番号が含まれる。そして、光トランシーバ１の再起動時において、外部メモリ１３に格納されている第１デバイス１１のファームウェアがメモリ２１の領域２１ａに書き込まれ、第１デバイス１１は領域２１ａに書き込まれたファームウェアを読み出して、そのファームウェアで動作する。第１デバイス１１は、ファームウェアの更新に成功したら、ホスト装置２から受信した全体バージョン番号を外部メモリ１３に格納する。このように、アップグレード機能によるファームウェアの更新では、システムプログラム及びフラグＦ１の値は書き換えられない。
【００５４】
また、アップグレード機能によって、第２デバイス１２のファームウェアを更新する場合、ホスト装置２から第１デバイス１１に送信されるアップグレードデータには、第２デバイス１２の制御に関するプログラム（ファームウェア）、ファームウェアのバージョン番号及び全体バージョン番号が含まれる。そして、光トランシーバ１の再起動時において、外部メモリ１３に格納されている第２デバイス１２のファームウェアが、第１デバイス１１を介してメモリ２２の領域２２ａに書き込まれ、第２デバイス１２は領域２２ａに書き込まれたファームウェアを読み出して、そのファームウェアで動作する。第２デバイス１２は、ファームウェアの更新に成功したら、第１デバイス１１に更新が成功したことを通知し、第１デバイス１１はホスト装置２から受信した全体バージョン番号を外部メモリ１３に格納する。このように、アップグレード機能によるファームウェアの更新では、システムプログラム及びフラグＦ２の値は書き換えられない。
【００５５】
次に、図６を参照して、比較例の光トランシーバと比較しながら光トランシーバ１の作用効果を説明する。図６は、比較例の光トランシーバを模式的に示す構成図である。図６に示されるように、光トランシーバ１００は、光トランシーバ１と比較して、第１デバイス１１がメモリ２１に領域２１ｆを備えていない点、及び、第２デバイス１２がメモリ２２に領域２２ｆを備えていない点において相違している。
【００５６】
光トランシーバ１００において、例えば、第１デバイス１１のメモリ２１にバージョン番号が「Ｘ」のファームウェアが格納されており、第２デバイス１２のメモリ２２にバージョン番号が「ＹＹ」のファームウェアが格納されており、外部メモリ１３には、全体バージョン番号として「Ｚ」が格納されているとする。この状態において、直接ダウンロードによって、インターフェースＤ１を経由して、第１デバイス１１のメモリ２１にバージョン番号が「ＸＸ」のファームウェアが書き込まれる。このとき、第１デバイス１１のファームウェアを変更する際には第１デバイス１１は停止しているので、外部メモリ１３の全体バージョン番号が更新されることはなく、外部メモリ１３には、全体バージョン番号として引き続き「Ｚ」が格納されている。そして、第１デバイス１１のファームウェアを変更した後に第１デバイス１１を動作させるために、光トランシーバ１００を再起動する。
【００５７】
光トランシーバ１００の起動処理において、第１デバイス１１はメモリ２１の領域２１ａに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。また、第２デバイス１２は、メモリ２２の領域２２ａに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。光トランシーバ１００の起動処理において外部メモリ１３に格納されている全体バージョン番号は更新されない。そして、第１デバイス１１及び第２デバイス１２の起動処理が完了すると、第１デバイス１１は、ホスト装置２にレディー信号を出力する。
【００５８】
このとき、ホスト装置２は第１デバイス１１のファームウェアがインターフェースＤ１を使用して更新されたことを認識することができないので、ホスト装置２は、光トランシーバ１００からレディー信号を受信した後、例えば、アップグレード機能で第１デバイス１１のファームウェアをアップグレードする際に、光トランシーバ１００の全体バージョン番号の取得指示を光トランシーバ１００に出力する。第１デバイス１１は、ホスト装置２から光トランシーバ１の全体バージョン番号の取得指示を受信すると、外部メモリ１３の領域１３ａから全体バージョン番号を読み出す。このとき、外部メモリ１３の領域１３ａには「Ｚ」が格納されているので、第１デバイス１１は、全体バージョン番号として「Ｚ」をホスト装置２に送信する。ホスト装置２は、光トランシーバ１００の全体バージョン番号「Ｚ」を取得するが、この全体バージョン番号が誤っていることを認識することはできない。
【００５９】
一方、光トランシーバ１では、上述のように、インターフェースＤ１によってメモリ２１にファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すようにフラグＦ１が設定される。そして、光トランシーバ１の起動処理において、外部メモリ１３に格納されている全体バージョン番号が無効であることをフラグＦ１が示している場合に、外部メモリ１３に格納されている全体バージョン番号が無効な値に書き換えられる。つまり、ファームウェアがメモリ２１に書き込まれてからホスト装置２との通信を開始するまでの間に、外部メモリ１３に格納されている全体バージョン番号が無効な値に書き換えられる。このため、光トランシーバ１の起動処理が完了して、ホスト装置２との通信を開始した時点では、外部メモリ１３に格納されている全体バージョン番号は無効な値に書き換えられているので、ホスト装置２が全体バージョン番号を取得しても、無効な値の全体バージョン番号が取得され、誤った全体バージョン番号が取得されることを防止できる。また、外部メモリ１３に格納されている全体バージョン番号が無効な値に書き換えられるとともに、フラグＦ１が有効を示すように設定される。これにより、インターフェースＤ１によるファームウェアの直接ダウンロードの後、外部メモリ１３に格納されている全体バージョン番号を無効な値に書き換える処理を一度だけ行うことができる。また、フラグＦ１の書き換えはホスト装置２との通信を開始する前の起動処理時に行われるので、フラグＦ１の書き換え中にプログラムが停止されてもホスト装置２との通信が停止することはない。
【００６０】
第１デバイス１１は、ホスト装置２から全体バージョンを受信し、受信した全体バージョン番号を外部メモリ１３に格納する。このため、インターフェースＤ１及びインターフェースＤ２に加えて、外部メモリ１３への書き込みインターフェースを光トランシーバ１のコネクタ端子に接続する余裕が無く、全体バージョン番号を外部メモリ１３に直接的に書き込むことはできないとしても、第１デバイス１１によって全体バージョン番号を外部メモリ１３に格納することができる。
【００６１】
ホスト装置２が無効な値の全体バージョン番号を取得した場合には、ホスト装置２によって第１デバイス１１のファームウェアのバージョン番号及び第２デバイス１２のファームウェアのバージョン番号が取得され、そのバージョン番号の組み合わせに基づいて正しい全体バージョンが取得される。そして、第１デバイス１１は、ホスト装置２から正しい全体バージョン番号を受信し、外部メモリ１３に格納する。このように、ホスト装置２は、無効な値の全体バージョン番号を取得することによって、全体バージョン番号の書き込み忘れを検出でき、外部メモリ１３に正しい全体バージョン番号を保存することが可能となる。
【００６２】
なお、本発明に係る光トランシーバは上記実施形態に限定されない。例えば、光トランシーバ１は、第１デバイス１１及び第２デバイス１２に限られず、２以上のプログラマブルデバイスを備えていればよい。この場合、フラグＦ１は、直接ダウンロード用のインターフェースによって２以上のプログラマブルデバイスのいずれかにファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定されればよい。従って、フラグＦ１またはフラグＦ２は、ファームウェアが格納されるメモリ２１及びメモリ２２とは別にそれぞれのデバイス内に用意されたメモリ内に設定されてもよい。また、ホスト装置２は、実際に市場にて通信に使用される装置に限定される必要はなく、例えば、光トランシーバ１の製造段階において、光トランシーバ１を組み立てた後に、上述したように、第１デバイス１１のファームウェアおよび第２デバイス１２のファームウェアの少なくとも１つを新しく書き込むか、または更新した場合に、ホスト装置２の代わりに光トランシーバ１に正しい全体バージョン番号を書き込むための専用の電子機器が使用されてもよい。その場合、最新の状態の第１デバイス１１のファームウェアのバージョン番号及び第２デバイス１２のファームウェアのバージョン番号に対応する正しい全体バージョン番号をその専用の電子機器の内部に予め記憶させておくことができる。
【００６３】
また、フラグＦ１は、直接ダウンロード用のインターフェースによって２以上のプログラマブルデバイスのいずれかにファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定されるのであれば、第２デバイス１２のメモリ２２は、領域２２ｆを有しなくてもよい。つまり、フラグＦ２は省略され得る。例えば、インターフェースＤ２を介して第２デバイス１２のメモリ２２の領域２２ａにファームウェアが書き込まれるとともに、インターフェースＤ１を介して第１デバイス１１のメモリ２１の領域２１ｆに外部メモリ１３に格納されている全体バージョン番号が無効であることを示す値のフラグＦ１が書き込まれるようにしてもよい。
【００６４】
また、外部メモリ１３は、接続バスを介して第２デバイス１２に接続されていてもよい。この場合、光トランシーバ１の起動処理において、外部メモリ１３に格納されている全体バージョン番号が無効であることをフラグＦ２が示している場合に、第２デバイス１２は、外部メモリ１３に格納されている全体バージョン番号を無効な値に書き換えるとともに、フラグＦ２を外部メモリ１３に格納されている全体バージョン番号が有効であることを示すように設定してもよい。
【００６５】
また、アップグレード機能によるファームウェアの更新に失敗した場合にも、元のファームウェアで起動できるようにするために、各デバイスが２つのファームウェア格納領域を備えていてもよい。図７は、変形例の光トランシーバを模式的に示す構成図である。図７に示される光トランシーバ１は、図１の光トランシーバ１と比較して、メモリ２１が領域２１ｂをさらに含んでいる点、メモリ２２が領域２２ｂをさらに含んでいる点、及び、外部メモリ１３が領域１３ｂをさらに含んでいる点において相違している。
【００６６】
領域２１ｂには、第１デバイス１１のファームウェアが格納される。つまり、メモリ２１は、２つのファームウェアの格納領域を有している。同様に、領域２２ｂには、第２デバイス１２のファームウェアが格納される。つまり、メモリ２２は、２つのファームウェアの格納領域を有している。領域１３ｂには、全体バージョン番号が格納される。つまり、外部メモリ１３は、２つの全体バージョン番号の格納領域を有している。領域１３ａに格納されている全体バージョン番号は、第１デバイス１１のメモリ２１の領域２１ａに格納されているファームウェアのバージョン番号と、第２デバイス１２のメモリ２２の領域２２ａに格納されているファームウェアのバージョン番号と、の組み合わせを一意的に識別可能な番号である。領域１３ｂに格納されている全体バージョン番号は、第１デバイス１１のメモリ２１の領域２１ｂに格納されているファームウェアのバージョン番号と、第２デバイス１２のメモリ２２の領域２２ｂに格納されているファームウェアのバージョン番号と、の組み合わせを一意的に識別可能な番号である。
【００６７】
この場合、フラグＦ１は、インターフェースＤ１によってメモリ２１の領域２１ａまたは領域２１ｂにファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定される。同様に、フラグＦ２は、インターフェースＤ２によってメモリ２２の領域２２ａまたは領域２２ｂにファームウェアが書き込まれたことに応じて、外部メモリ１３に格納されている全体バージョン番号が無効であることを示すように設定される。
【００６８】
第１デバイス１１は、光トランシーバ１の起動処理において、フラグＦ１が外部メモリ１３に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ１３の領域１３ａ及び領域１３ｂのそれぞれに格納されている全体バージョン番号を無効な値に書き換えるとともに、外部メモリ１３に格納されている全体バージョン番号が有効であることを示すようにフラグＦ１を設定し、残りの起動処理を行う。
【００６９】
第２デバイス１２は、光トランシーバ１の起動処理において、フラグＦ２が外部メモリ１３に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ１３に格納されている全体バージョン番号が無効であることを示す無効信号を第１デバイス１１に送信するとともに、外部メモリ１３に格納されている全体バージョン番号が有効であることを示すようにフラグＦ２を設定し、第２デバイス１２の残りの起動処理を行う。そして、第１デバイス１１は、第２デバイス１２から無効信号を受信したことに応じて、外部メモリ１３の領域１３ａ及び領域１３ｂのそれぞれに格納されている全体バージョン番号を無効な値に書き換える。
【００７０】
第１デバイス１１は、光トランシーバ１の動作中に、ホスト装置２から接続バスＢ１を介して第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアの少なくともいずれかと全体バージョン番号とを含むアップグレードデータを受信し、受信したアップグレードデータを一旦外部メモリ１３に格納する。アップグレードデータには、領域２１ａに格納されているファームウェアと領域２２ａに格納されているファームウェアとの組み合わせの更新か、領域２１ｂに格納されているファームウェアと領域２２ｂに格納されているファームウェアとの組み合わせの更新か、がホスト装置２によって予め指定されている。
【００７１】
そして、アップグレードデータにおいて、領域２１ａに格納されているファームウェアと領域２２ａに格納されているファームウェアとの組み合わせの更新が指定されている場合、光トランシーバ１の再起動時において、例えばアップグレードデータに含まれる第１デバイス１１のファームウェアがメモリ２１の領域２１ｂに書き込まれ、第１デバイス１１は、領域２１ａ及び領域２１ｂのそれぞれに格納されているファームウェアのいずれか指定された方で動作する。第１デバイス１１は、ファームウェアの更新に成功したら、ホスト装置２から受信したアップグレードデータに含まれる全体バージョン番号を外部メモリ１３の領域１３ａに格納する。
【００７２】
また、ホスト装置２は、実際に市場にて通信に使用される装置に限定される必要はなく、例えば、光トランシーバ１の製造段階において、光トランシーバ１を組み立てた後に、上述したように、第１デバイス１１のファームウェア及び第２デバイス１２のファームウェアの少なくとも１つを新しく書き込むか、更新した場合に、ホスト装置２の代わりに光トランシーバ１に正しい全体バージョン番号を書き込むための専用の電子機器が使用されてもよい。その場合、最新の状態の第１デバイス１１の複数のファームウェアのそれぞれバージョン番号及び第２デバイス１２の複数のファームウェアのそれぞれのバージョン番号に対応する正しい全体バージョン番号をその専用の電子機器の内部に予め記憶させておくことで、容易に正しい全体バージョンを取得し、それを第１デバイス１１に送信して、複数の正しい全体バージョン番号を外部メモリ１３に書き込ませることができる。
【００７３】
このように、変形例の光トランシーバ１では、第１デバイス１１のメモリ２１に格納されているいずれか一方のファームウェアと、第２デバイス１２のメモリ２２に格納されているいずれか一方のファームウェアのファームウェアと、の組み合わせに含まれるファームウェアを更新するとともに、更新対象となるファームウェアの組み合わせを一意的に識別可能な全体バージョン番号を更新することによって、アップグレード処理を行うことができる。そして、光トランシーバ１の起動処理において、フラグＦ１が外部メモリ１３に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ１３の領域１３ａ及び領域１３ｂのそれぞれに格納されている全体バージョン番号を無効な値に書き換えることによって、第１デバイス１１及び第２デバイス１２が２つのファームウェアを格納する構成においても、ホスト装置２による誤った全体バージョンの取得を防止できる。
【符号の説明】
【００７４】
１…光トランシーバ、２…ホスト装置（外部装置）、１１…第１デバイス、１２…第２デバイス、１３…外部メモリ（補助記憶回路）、２１…メモリ（第１記憶回路）、２２…メモリ（第２記憶回路）、Ｄ１…インターフェース（第１インターフェース）、Ｄ２…インターフェース（第２インターフェース）、Ｆ１，Ｆ２…フラグ（状態変数）。
【図１】
0006350308.tif 000002
【図２】
0006350308.tif 000003
【図３】
0006350308.tif 000004
【図４】
0006350308.tif 000005
【図５】
0006350308.tif 000006
【図６】
0006350308.tif 000007
【図７】
0006350308.tif 000008