[本願発明の実施形態の説明]
最初に本発明の実施形態の内容を列記して説明する。
本発明の一態様に係る光トランシーバは、外部装置と通信可能な光トランシーバである。この光トランシーバは、第1記憶回路と、第1記憶回路にファームウェアを書き込むための第1インターフェースと、を有するプログラム可能な第1デバイスと、第2記憶回路と、第2記憶回路にファームウェアを書き込むための第2インターフェースと、を有するプログラム可能な第2デバイスと、第1デバイスに電気的に接続され、第1記憶回路に書き込まれているファームウェアの版数番号及び第2記憶回路に書き込まれているファームウェアの版数番号と一意に対応する全体版数番号を格納するための補助記憶回路と、を備える。第1デバイスには、補助記憶回路に格納されている全体版数番号が有効か無効かを示す状態変数が格納され、状態変数は、第1インターフェースを介して第1記憶回路にファームウェアが書き込まれたか、または、第2インターフェースを介して第2記憶回路にファームウェアが書き込まれたことに応じて、無効を示すように設定され、第1デバイスは、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号を無効な値に書き換えるとともに、状態変数を有効を示すように設定する。
この光トランシーバによれば、第1インターフェースを介して第1記憶回路にファームウェアが書き込まれたか、または、第2インターフェースを介して第2記憶回路にファームウェアが書き込まれたことに応じて、補助記憶回路に格納されている全体版数番号が無効であることを示すように状態変数が設定される。そして、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号が無効な値に書き換えられるとともに、状態変数が有効を示すように設定される。このため、光トランシーバの起動処理が完了して、外部装置との通信を開始した時点では、補助記憶回路に格納されている全体版数番号は無効な値に書き換えられているので、外部装置が全体版数番号を取得しても、無効な値の全体版数番号が取得され、誤った全体版数番号が取得されることを防止できる。
第1デバイスは、第2デバイスと電気的に接続され、第2インターフェースを介して第2記憶回路にファームウェアが書き込まれたときに第2デバイスが送信する無効信号を受信して、無効信号に応じて状態変数を無効を示すように設定してもよい。この場合、第2デバイスから送信される無効信号によって、第1デバイスは、第2インターフェースを介して第2記憶回路にファームウェアが書き込まれたことを認識できる。そして、第1デバイスが無効信号を受信したことに応じて、状態変数が無効を示すように設定されるので、外部装置による誤った全体版数番号の取得をさらに確実に防止できる。
第1デバイスは、外部装置から全体版数番号を受信し、受信した全体版数番号を補助記憶回路に格納してもよい。この場合、全体版数番号を補助記憶回路に直接的に書き込むことができないとしても、第1デバイスによって全体版数番号を補助記憶回路に格納することができる。
第1デバイスは、外部装置からの指示に応じて、補助記憶回路に格納されている全体版数番号を読み出して、読み出した全体版数番号を外部装置に送信し、第1デバイスは、全体版数番号が無効な値である場合には、外部装置から全体版数番号を受信し、受信した全体版数番号を補助記憶回路に格納してもよい。この場合、外部装置によって取得された全体版数番号が無効な値である場合には、外部装置からの全体版数番号を補助記憶回路に格納することができるので、補助記憶回路に正しい全体版数番号を保存することが可能となる。
第1記憶回路は、別のファームウェアをさらに格納してもよく、第2記憶回路は、別のファームウェアをさらに格納してもよく、補助記憶回路は、第1記憶回路に格納されている別のファームウェアの版数番号及び第2記憶回路に格納されている別のファームウェアの版数番号と一意に対応する別の全体版数番号をさらに格納してもよい。第1デバイスは、光トランシーバの起動処理において、状態変数が無効を示している場合に、補助記憶回路に格納されている全体版数番号及び別の全体版数番号を無効な値に書き換えるとともに、状態変数を有効を示すように設定してもよい。この場合、第1デバイス及び第2デバイスが2つのファームウェアを格納する構成においても、外部装置による誤った全体版数番号の取得を防止できる。
[本願発明の実施形態の詳細]
本発明の実施形態に係る光トランシーバの具体例を、以下に図面を参照しつつ説明する。なお、本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
図1は、一実施形態に係る光トランシーバを模式的に示す構成図である。図1に示される光トランシーバ1は、例えば、100Gbpsのフォームファクタの一つであるCFP MSA(100G Form-factor Pluggable Multi-Source Agreement)に準拠した光トランシーバである。光トランシーバ1は、接続バスB1を介してホスト装置(外部装置)2に通信可能に接続されている。ホスト装置2は、上位監視装置であり、光トランシーバ1の監視及び制御を行う。接続バスB1は、例えば、シリアルバスであり、MDIO(Management Data Input/Output)バスである。なお、CFP以外の光トランシーバでは、接続バスB1は、例えば、他のシリアルバスであり、I2C(Inter Integrated Circuit)バス、SPI(SerialPeripheral Interface)バス等である。また、光トランシーバ1の製造工程において、接続バスB1には、ホスト装置2以外にも検査装置及び製造用のパソコン等が接続される場合がある。光トランシーバ1には、光信号を送信するための発光素子及び光信号を受信するための受光素子等、さらにそれらを制御するための電子回路等も搭載されるが、図示していない。
光トランシーバ1は、第1デバイス11と、第2デバイス12と、外部メモリ13(補助記憶回路)と、を備えている。第1デバイス11は、プログラム可能なデバイス(プログラマブルデバイス)であり、例えば、メインCPU(Central Processing Unit)である。第1デバイス11は、接続バスB1を介して電気的にホスト装置2等に接続されており、ホスト装置2との通信制御を行う。第1デバイス11は、例えば、ホスト装置2等との通信用のレジスタ(不図示)と、メモリ21(第1記憶回路)と、インターフェースD1(第1インターフェース)と、を備えている。インターフェースD1は、主に光トランシーバ1の製造工程において、特定の製造用の機器に接続される。光トランシーバ1がホスト装置2に組み込まれて市場にて伝送装置の一部として使用される際には、インターフェースD1はホスト装置2等に接続されていなくてもよい。インターフェースD1の詳細は後述する。
メモリ21は、内部の記憶情報の書き換えが可能な不揮発性の記憶素子であり、例えば、フラッシュROM(Read Only Memory)である。メモリ21は、領域21aと、領域21fと、を含む。領域21aには、第1デバイス11のファームウェアが格納される。ファームウェアには、第1デバイス11の起動処理等に関するシステムプログラム、第1デバイス11の制御に関するプログラム、及び、そのファームウェアの版数を示すバージョン番号(版数番号)が含まれている。光トランシーバ1の起動時において、第1デバイス11は領域21aに書き込まれたファームウェアを読み出して、そのファームウェアに従って動作する。
領域21fには、フラグF1(状態変数)が格納される。フラグF1は、外部メモリ13に格納されている全体バージョン番号(全体版数番号)が有効か無効かを示すフラグである。フラグF1は、例えば、少なくとも1ビットのバイナリデータであり、「0」が設定されている場合に、外部メモリ13に格納されている全体バージョン番号が有効であることを示し、「1」が設定されている場合に、外部メモリ13に格納されている全体バージョン番号が無効であることを示す。なお、全体バージョン番号が有効か無効かというのは、後述するように、インターフェースD1を介してメモリ21に新たにファームウェアが書き込まれたか否かという情報と対応している。すなわち、「全体バージョン番号が無効である」とは、インターフェースD1を介してメモリ21に新たにファームウェアが書き込まれた場合には、全体バージョン番号はそれに応じて新しい正しい番号に書き換えられなければならないという意味において無効である、ということを意味する。また、「全体バージョン番号が有効である」とは、そのようにインターフェースD1を介してメモリ21に書込まれることがなければ、全体バージョン番号はそのままの値で正しい番号となっているという意味において有効である、ということを意味する。このように、有効か無効かというのは、全体バージョン番号を正しい番号に更新する必要があるか否かという2つの状態に対応している。従って、フラグF1が「0(有効)」か「1(無効)」かは、全体バージョン番号の更新が必要か否かの何れかであることを判別できればよいので、「0(無効)」と「1(有効)」というように互いに入れ替えた定義が用いられてもよく、さらに「00(有効)」と「11(無効)」といった2ビット以上のバイナリデータが使用されてもよい。
第2デバイス12は、プログラム可能なデバイス(プログラマブルデバイス)であり、例えば、サブCPUである。第2デバイス12は、接続バスB2を介して電気的に第1デバイス11に接続されている。第2デバイス12は、例えば、レーザ制御等の光トランシーバ1の制御を行う。第2デバイス12は、メモリ22(第2記憶回路)と、インターフェースD2(第2インターフェース)と、を備えている。インターフェースD2は、主に光トランシーバ1の製造工程において、特定の製造用の機器に接続される。光トランシーバ1がホスト装置2に組み込まれて市場にて伝送装置の一部として使用される際には、インターフェースD2はホスト装置2等に接続されていなくてもよい。インターフェースD2の詳細は後述する。
メモリ22は、内部の記憶情報の書き換えが可能な不揮発性の記憶素子であり、例えば、フラッシュROMである。メモリ22は、領域22aと、領域22fと、を含む。領域22aには、第2デバイス12のファームウェアが格納される。ファームウェアには、第2デバイス12の起動処理等に関するシステムプログラム、第2デバイス12の制御に関するプログラム、及び、そのファームウェアのバージョン番号が含まれている。光トランシーバ1の起動時において、第2デバイス12は領域22aに書き込まれたファームウェアを読み出して、そのファームウェアに従って動作する。
領域22fには、フラグF2(状態変数)が格納される。フラグF2は、外部メモリ13に格納されている全体バージョン番号が有効か無効かを示すフラグである。フラグF2は、例えば、少なくとも1ビットのバイナリデータであり、「0」が設定されている場合に、外部メモリ13に格納されている全体バージョン番号が有効であることを示し、「1」が設定されている場合に、外部メモリ13に格納されている全体バージョン番号が無効であることを示す。なお、全体バージョン番号が有効か無効かというのは、後述するように、インターフェースD2を介してメモリ22に新たにファームウェアが書き込まれたか否かという情報と対応している。すなわち、「全体バージョン番号が無効である」とは、インターフェースD2を介してメモリ22に新たにファームウェアが書き込まれた場合には、全体バージョン番号はそれに応じて新しい正しい番号に書き換えられなければならないという意味において無効である、ということを意味する。また、「全体バージョン番号が有効である」とは、そのようにインターフェースD2を介してメモリ22に書込まれることがなければ、全体バージョン番号はそのままの値で正しい番号となっているという意味において有効である、ということを意味する。このように、有効か無効かというのは、全体バージョン番号の更新が必要な否かという2つの状態を便宜的に表している。従って、フラグF2が「0(有効)」か「1(無効)」かは、全体バージョン番号の更新が必要か否かの何れかであることを判別できればよいので、「0(無効)」と「1(有効)」と互いに入れ替えた定義が用いられてもよく、さらに「00(有効)」と「11(無効)」といった2ビット以上のバイナリデータが使用されてもよい。
外部メモリ13は、内部の記憶情報の書き換えが可能な不揮発性の記憶素子であり、例えば、フラッシュROMである。外部メモリ13は、接続バスB3を介して電気的に第1デバイス11に接続されている。外部メモリ13は、領域13aを含む。領域13aには、全体バージョン番号が格納される。光トランシーバ1では、モジュールとして1つのファームウェアのバージョン番号である全体バージョン番号が定義されている。全体バージョン番号は、第1デバイス11のファームウェアのバージョン番号と第2デバイス12のファームウェアのバージョン番号との組み合わせを一意的に識別可能な番号である。すなわち、これは、全体バージョン番号が一つに特定されれば、相互の対応関係を示す情報(例えば、対応表)を参照して、全体バージョン番号に対応する個々のファームウェアのバージョン番号が一意的に求まる状態にあることを意味する。
光トランシーバ1では、第1デバイス11が行う制御と、第2デバイス12が行う制御とは、処理内容が大きく異なるので、第1デバイス11のファームウェア及び第2デバイス12のファームウェアのいずれか一方のみが修正されることがある。例えば、ホスト装置2との通信用のレジスタのアドレスマッピングが変更された場合には、第2デバイス12が行う制御は変更されないので、第1デバイス11のファームウェアのみが修正される。一方、レーザ制御等の処理が変更された場合には、第1デバイス11が行う制御は変更されないので、第2デバイス12のファームウェアのみが修正される。つまり、第1デバイス11のファームウェア及び第2デバイス12のファームウェアとは個別に更新され得るので、第1デバイス11のファームウェア及び第2デバイス12のファームウェアの少なくともいずれかが更新されると、全体バージョン番号も更新される。
図2は、全体バージョン番号と各デバイスのファームウェアのバージョン番号との関係の一例を示す図である。図2に示されるように、第1デバイス11のファームウェアのバージョン番号が「1.0」であり、第2デバイス12のファームウェアのバージョン番号が「1.0」である場合、全体バージョン番号は「1.0」である。この状態で、第1デバイス11のファームウェアがバージョン番号「1.1」のファームウェアに更新された場合、全体バージョン番号は「1.1」となる。さらに、第2デバイス12のファームウェアがバージョン番号「1.1」のファームウェアに更新された場合、全体バージョン番号は「1.2」となる。さらに、第1デバイス11のファームウェアがバージョン番号「1.2」のファームウェアに更新されるとともに、第2デバイス12のファームウェアがバージョン番号「1.2」のファームウェアに更新された場合、全体バージョン番号は「1.3」となる。このように、デバイスのファームウェアのバージョン番号に対して、全体バージョン番号が1つ以上割り当てられることがある。例えば、第1デバイス11のバージョン番号「1.1」のファームウェアに対して、全体バージョン番号は「1.1」及び「1.2」が割り当てられる。
図1に戻って、光トランシーバ1の説明を続ける。インターフェースD1は、第1デバイス11のメモリ21に第1デバイス11のファームウェアを直接書き込むためのインターフェースである。つまり、インターフェースD1は、第1デバイス11に固有のインターフェースであって、直接ダウンロード用のインターフェースである。第1デバイス11のファームウェアは、光トランシーバ1の非動作時にインターフェースD1を介してメモリ21の領域21aに直接書き込まれる。なお、この実施形態では、直接ダウンロードを行う前に、領域21aにファームウェアが格納されている場合には、領域21aに格納されているファームウェアが、インターフェースD1を介して第1デバイス11に送信されたファームウェアによって書き換えられる。また、後述するように、インターフェースD1は、光トランシーバ1の製造段階において第1デバイス11のメモリ21の領域21aに最初にファームウェアを書き込む場合にも使用することができる。
インターフェースD1を介して第1デバイス11に送信されるデータには、起動処理等に関するシステムプログラム、第1デバイス11の制御に関するプログラム、及び、ファームウェアのバージョン番号を有するファームウェア部分と、フラグF1の値(=1)を有する部分と、が含まれる。このため、インターフェースD1を介して第1デバイス11のメモリ21にファームウェアを書き込む場合、起動処理等に関するシステムプログラム、第1デバイス11の制御に関するプログラム、及び、ファームウェアのバージョン番号が領域21aに書き込まれ、フラグF1の値が領域21fに書き込まれる。つまり、フラグF1は、インターフェースD1によってメモリ21にファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定される。全体バージョン番号が無効であることを示す値としては、例えば、正常な全体バージョン番号の範囲が1.00から99.99であった場合に、その範囲外の0.00または999.00などを使用することができる。
インターフェースD2は、第2デバイス12のメモリ22に第2デバイス12のファームウェアを直接書き込むためのインターフェースである。つまり、インターフェースD2は、第2デバイス12に固有のインターフェースであって、直接ダウンロード用のインターフェースである。第2デバイス12のファームウェアは、光トランシーバ1の非動作時にインターフェースD2を介してメモリ22の領域22aに直接書き込まれる。なお、この実施形態では、直接ダウンロードを行う前に、領域22aにファームウェアが格納されている場合には、領域22aに格納されているファームウェアが、インターフェースD2を介して第2デバイス12に送信されたファームウェアによって書き換えられる。また、後述するように、インターフェースD2は、光トランシーバ1の製造段階において第2デバイス12のメモリ22の領域22aに最初にファームウェアを書き込む場合にも使用することができる。
インターフェースD2を介して第2デバイス12に送信されるデータには、起動処理等に関するシステムプログラム、第2デバイス12の制御に関するプログラム、及び、ファームウェアのバージョン番号を有するファームウェア部分と、フラグF2の値(=1)を有する部分と、が含まれる。このため、インターフェースD2を介して第2デバイス12のメモリ22にファームウェアを書き込む場合、起動処理等に関するシステムプログラム、第2デバイス12の制御に関するプログラム、及び、ファームウェアのバージョン番号が領域22aに書き込まれ、フラグF2の値が領域22fに書き込まれる。つまり、フラグF2は、インターフェースD2によってメモリ22にファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定される。
第1デバイス11は、光トランシーバ1の起動処理において、フラグF1をチェックする。第1デバイス11は、フラグF1が外部メモリ13に格納されている全体バージョン番号が有効であることを示している場合、残りの起動処理を行う。第1デバイス11は、フラグF1が外部メモリ13に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ13に格納されている全体バージョン番号を無効な値に書き換えるとともに、外部メモリ13に格納されている全体バージョン番号が有効であることを示すようにフラグF1を設定し、残りの起動処理を行う。
第1デバイス11は、第2デバイス12から後述の無効信号を受信したことに応じて、外部メモリ13に格納されている全体バージョン番号を無効な値に書き換える。この場合、第1デバイス11は、第2デバイス12から無効信号を受信したことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すようにフラグF1を設定してもよい。つまり、フラグF1は、インターフェースD2によってメモリ22にファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定されてもよい。第1デバイス11は、光トランシーバ1の起動処理が完了したことに応じて、ホスト装置2との通信が可能であることを示すレディー信号をホスト装置2に送信する。
第1デバイス11は、光トランシーバ1の全体バージョン番号の取得指示をホスト装置2から受信したことに応じて、外部メモリ13に格納されている全体バージョン番号を読み出して、読み出した全体バージョン番号をホスト装置2に送信する。第1デバイス11は、光トランシーバ1に含まれるデバイスのファームウェアのバージョン番号の取得指示をホスト装置2から受信したことに応じて、メモリ21からバージョン番号を取得するとともに、第2デバイス12のファームウェアのバージョン番号の取得指示を第2デバイス12に出力する。そして、第1デバイス11は、第2デバイス12から第2デバイス12のファームウェアのバージョン番号を受信し、第1デバイス11のファームウェアのバージョン番号及び第2デバイス12のファームウェアのバージョン番号をホスト装置2に送信する。第1デバイス11は、全体バージョン番号とともに全体バージョン番号書き込み指示をホスト装置2から受信したことに応じて、受信した全体バージョン番号を外部メモリ13に格納する。
光トランシーバ1は、ファームウェアのアップグレード機能を備えてもよい。この場合、第1デバイス11は、光トランシーバ1の動作中に、ホスト装置2から接続バスB1を介して第1デバイス11のファームウェア及び第2デバイス12のファームウェアの少なくともいずれかと全体バージョン番号とを含んだアップグレードデータを受信する。第1デバイス11は、アップグレードデータを保存する際に光トランシーバ1がホスト装置2との通信を継続するために、受信したアップグレードデータを一旦外部メモリ13に格納する。
第2デバイス12は、光トランシーバ1の起動処理において、フラグF2をチェックする。第2デバイス12は、フラグF2が外部メモリ13に格納されている全体バージョン番号が有効であることを示している場合、第2デバイス12の残りの起動処理を行う。第2デバイス12は、フラグF2が外部メモリ13に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ13に格納されている全体バージョン番号が無効であることを示す無効信号を第1デバイス11に送信するとともに、フラグF2を有効を示すように設定し、第2デバイス12の残りの起動処理を行う。つまり、第2デバイス12は、インターフェースD2を介してメモリ22にファームウェアが書き込まれたことによって、無効信号を送信する。
第2デバイス12は、第2デバイス12のファームウェアのバージョン番号の取得指示を第1デバイス11から受信すると、メモリ22からバージョン番号を取得して、取得したバージョン番号を第1デバイス11に出力する。
なお、光トランシーバ1を製造する時に、光トランシーバ1を組み立てた直後は、第1デバイス11及び第2デバイス12にはファームウェアが書き込まれていないので、インターフェースD1及びインターフェースD2を経由して、第1デバイス11のメモリ21及び第2デバイス12のメモリ22に直接ファームウェアが書き込まれる。また、第1デバイス11のファームウェア及び第2デバイス12のファームウェアが一度書き込まれた後であっても、アップグレード機能で更新可能な範囲外に存在するルーチン(システムプログラム)の変更が必要になった場合等には、インターフェースD1及びインターフェースD2を経由して、第1デバイス11のメモリ21及び第2デバイス12のメモリ22に直接ファームウェアが書き込まれる。
次に、図2〜図5を用いて、光トランシーバ1の動作を説明する。図3は、光トランシーバ1の直接ダウンロード時の動作を説明するための図である。図4は、図3の光トランシーバ1の起動時の動作を説明するための図である。図5は、光トランシーバ1の起動処理を示すフローチャートである。
まず、第1デバイス11のメモリ21にバージョン番号が「X」のファームウェアが格納されており、第2デバイス12のメモリ22にバージョン番号が「YY」のファームウェアが格納されているとする。このとき、外部メモリ13には、全体バージョン番号として「Z」が格納されている。この状態において、図3に示されるように、直接ダウンロードによって、インターフェースD1を経由して、第1デバイス11のメモリ21にバージョン番号が「XX」のファームウェアが書き込まれる。このとき、メモリ21の領域21fに、フラグF1の値として「1」が書き込まれる。つまり、第1デバイス11のファームウェアを直接ダウンロードによって更新した場合には、全体バージョン番号とは無関係にフラグF1の値が「1」に設定される。
図3の光トランシーバ1の状態において、光トランシーバ1を起動した場合の起動処理について説明する。この場合、まず、第1デバイス11はメモリ21の領域21aに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。また、第2デバイス12は、メモリ22の領域22aに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。そして、第1デバイス11は、メモリ21の領域21fを読み出し、フラグF1の値が「1」であるか否か、つまり、外部メモリ13に格納されている全体バージョン番号が無効であるか否かを判定する(ステップS01)。
ステップS01において、フラグF1の値が「1」であると判定されると(ステップS01;Yes)、第1デバイス11は、外部メモリ13の領域13aに格納されている全体バージョン番号を無効な値に書き換える(ステップS02)。そして、第1デバイス11は、メモリ21の領域21fに格納されているフラグF1の値を「0」に書き換える(ステップS03)。そして、第1デバイス11は、残りの起動処理を行って、ホスト装置2にレディー信号を出力する(ステップS04)。このようにして、光トランシーバ1の起動処理が行われ、光トランシーバ1は図4に示される状態となる。
ホスト装置2は、光トランシーバ1からレディー信号を受信した後、例えば、アップグレード機能で第1デバイス11のファームウェアをアップグレードする際に、光トランシーバ1の現在の全体バージョンを確認するために、光トランシーバ1の全体バージョン番号の取得指示を光トランシーバ1に出力する。第1デバイス11は、ホスト装置2から光トランシーバ1の全体バージョン番号の取得指示を受信すると、外部メモリ13の領域13aから全体バージョン番号を読み出す。このとき、外部メモリ13の領域13aには無効な値が格納されているので、第1デバイス11は、全体バージョン番号として無効な値をホスト装置2に送信する。
続いて、ホスト装置2は、全体バージョン番号として無効な値を受信すると、光トランシーバ1に含まれる各デバイスのファームウェアのバージョン番号の取得指示を光トランシーバ1に送信する。そして、第1デバイス11は、光トランシーバ1に含まれるデバイスのファームウェアのバージョン番号の取得指示を受信すると、メモリ21からバージョン番号「XX」を取得するとともに、第2デバイス12のファームウェアのバージョン番号の取得指示を第2デバイス12に出力する。そして、第2デバイス12は、第2デバイス12のファームウェアのバージョン番号の取得指示を受信すると、メモリ22からバージョン番号「YY」を取得して、取得したバージョン番号「YY」を第1デバイス11に出力する。
続いて、第1デバイス11は、第2デバイス12から第2デバイス12のファームウェアのバージョン番号「YY」を取得すると、第1デバイス11のファームウェアのバージョン番号「XX」及び第2デバイス12のファームウェアのバージョン番号「YY」をホスト装置2に送信する。そして、ホスト装置2は、第1デバイス11のファームウェアのバージョン番号「XX」及び第2デバイス12のファームウェアのバージョン番号「YY」を受信すると、第1デバイス11のファームウェアのバージョン番号「XX」及び第2デバイス12のファームウェアのバージョン番号「YY」に対応付けられた光トランシーバ1の全体バージョン番号「ZZ」を、予め格納されているテーブルから取得し、取得した全体バージョン番号「ZZ」とともに、全体バージョン番号の書き込み指示を光トランシーバ1に送信する。そして、第1デバイス11は、ホスト装置2から全体バージョン番号「ZZ」を受信すると、外部メモリ13の領域13aに全体バージョン番号「ZZ」を書き込む。このようにして、ホスト装置2は、ファームウェア更新後の正しい全体バージョン番号を取得するとともに、光トランシーバ1は、ファームウェア更新後の正しい全体バージョン番号を外部メモリ13に格納する。
一方、第1デバイス11のメモリ21にバージョン番号が「X」のファームウェアが格納されており、第2デバイス12のメモリ22にバージョン番号が「YY」のファームウェアが格納されており、外部メモリ13には、全体バージョン番号として「Z」が格納されている状態で、ファームウェアの更新を行うことなく光トランシーバ1を起動した場合の起動処理について説明する。この場合、まず、第1デバイス11はメモリ21の領域21aに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。また、第2デバイス12は、メモリ22の領域22aに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。そして、第1デバイス11は、メモリ21の領域21fを読み出し、フラグF1の値が「1」であるか否か、つまり、外部メモリ13に格納されている全体バージョン番号が無効であるか否かを判定する(ステップS01)。
ステップS01において、フラグF1の値が「0」であると判定されると(ステップS01;No)、第1デバイス11は、残りの起動処理を行って、ホスト装置2にレディー信号を出力する(ステップS04)。このようにして、光トランシーバ1の起動処理が行われる。
ホスト装置2は、光トランシーバ1からレディー信号を受信した後、例えば、アップグレード機能で第1デバイス11のファームウェアをアップグレードする際に、光トランシーバ1の現在の全体バージョンを確認するために、光トランシーバ1の全体バージョン番号の取得指示を光トランシーバ1に出力する。第1デバイス11は、ホスト装置2から光トランシーバ1の全体バージョン番号の取得指示を受信すると、外部メモリ13の領域13aから全体バージョン番号を読み出す。このとき、外部メモリ13の領域13aには有効な値である「Z」が格納されているので、第1デバイス11は、全体バージョン番号として「Z」をホスト装置2に送信する。このようにして、ホスト装置2は、光トランシーバ1の全体バージョン番号を取得する。
アップグレード機能によって、第1デバイス11のファームウェアを更新する場合、ホスト装置2から第1デバイス11に送信されるアップグレードデータには、第1デバイス11の制御に関するプログラム(ファームウェア)、ファームウェアのバージョン番号、及び、全体バージョン番号が含まれる。そして、光トランシーバ1の再起動時において、外部メモリ13に格納されている第1デバイス11のファームウェアがメモリ21の領域21aに書き込まれ、第1デバイス11は領域21aに書き込まれたファームウェアを読み出して、そのファームウェアで動作する。第1デバイス11は、ファームウェアの更新に成功したら、ホスト装置2から受信した全体バージョン番号を外部メモリ13に格納する。このように、アップグレード機能によるファームウェアの更新では、システムプログラム及びフラグF1の値は書き換えられない。
また、アップグレード機能によって、第2デバイス12のファームウェアを更新する場合、ホスト装置2から第1デバイス11に送信されるアップグレードデータには、第2デバイス12の制御に関するプログラム(ファームウェア)、ファームウェアのバージョン番号及び全体バージョン番号が含まれる。そして、光トランシーバ1の再起動時において、外部メモリ13に格納されている第2デバイス12のファームウェアが、第1デバイス11を介してメモリ22の領域22aに書き込まれ、第2デバイス12は領域22aに書き込まれたファームウェアを読み出して、そのファームウェアで動作する。第2デバイス12は、ファームウェアの更新に成功したら、第1デバイス11に更新が成功したことを通知し、第1デバイス11はホスト装置2から受信した全体バージョン番号を外部メモリ13に格納する。このように、アップグレード機能によるファームウェアの更新では、システムプログラム及びフラグF2の値は書き換えられない。
次に、図6を参照して、比較例の光トランシーバと比較しながら光トランシーバ1の作用効果を説明する。図6は、比較例の光トランシーバを模式的に示す構成図である。図6に示されるように、光トランシーバ100は、光トランシーバ1と比較して、第1デバイス11がメモリ21に領域21fを備えていない点、及び、第2デバイス12がメモリ22に領域22fを備えていない点において相違している。
光トランシーバ100において、例えば、第1デバイス11のメモリ21にバージョン番号が「X」のファームウェアが格納されており、第2デバイス12のメモリ22にバージョン番号が「YY」のファームウェアが格納されており、外部メモリ13には、全体バージョン番号として「Z」が格納されているとする。この状態において、直接ダウンロードによって、インターフェースD1を経由して、第1デバイス11のメモリ21にバージョン番号が「XX」のファームウェアが書き込まれる。このとき、第1デバイス11のファームウェアを変更する際には第1デバイス11は停止しているので、外部メモリ13の全体バージョン番号が更新されることはなく、外部メモリ13には、全体バージョン番号として引き続き「Z」が格納されている。そして、第1デバイス11のファームウェアを変更した後に第1デバイス11を動作させるために、光トランシーバ100を再起動する。
光トランシーバ100の起動処理において、第1デバイス11はメモリ21の領域21aに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。また、第2デバイス12は、メモリ22の領域22aに格納されているファームウェアを読み出し、そのファームウェアで動作を開始する。光トランシーバ100の起動処理において外部メモリ13に格納されている全体バージョン番号は更新されない。そして、第1デバイス11及び第2デバイス12の起動処理が完了すると、第1デバイス11は、ホスト装置2にレディー信号を出力する。
このとき、ホスト装置2は第1デバイス11のファームウェアがインターフェースD1を使用して更新されたことを認識することができないので、ホスト装置2は、光トランシーバ100からレディー信号を受信した後、例えば、アップグレード機能で第1デバイス11のファームウェアをアップグレードする際に、光トランシーバ100の全体バージョン番号の取得指示を光トランシーバ100に出力する。第1デバイス11は、ホスト装置2から光トランシーバ1の全体バージョン番号の取得指示を受信すると、外部メモリ13の領域13aから全体バージョン番号を読み出す。このとき、外部メモリ13の領域13aには「Z」が格納されているので、第1デバイス11は、全体バージョン番号として「Z」をホスト装置2に送信する。ホスト装置2は、光トランシーバ100の全体バージョン番号「Z」を取得するが、この全体バージョン番号が誤っていることを認識することはできない。
一方、光トランシーバ1では、上述のように、インターフェースD1によってメモリ21にファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すようにフラグF1が設定される。そして、光トランシーバ1の起動処理において、外部メモリ13に格納されている全体バージョン番号が無効であることをフラグF1が示している場合に、外部メモリ13に格納されている全体バージョン番号が無効な値に書き換えられる。つまり、ファームウェアがメモリ21に書き込まれてからホスト装置2との通信を開始するまでの間に、外部メモリ13に格納されている全体バージョン番号が無効な値に書き換えられる。このため、光トランシーバ1の起動処理が完了して、ホスト装置2との通信を開始した時点では、外部メモリ13に格納されている全体バージョン番号は無効な値に書き換えられているので、ホスト装置2が全体バージョン番号を取得しても、無効な値の全体バージョン番号が取得され、誤った全体バージョン番号が取得されることを防止できる。また、外部メモリ13に格納されている全体バージョン番号が無効な値に書き換えられるとともに、フラグF1が有効を示すように設定される。これにより、インターフェースD1によるファームウェアの直接ダウンロードの後、外部メモリ13に格納されている全体バージョン番号を無効な値に書き換える処理を一度だけ行うことができる。また、フラグF1の書き換えはホスト装置2との通信を開始する前の起動処理時に行われるので、フラグF1の書き換え中にプログラムが停止されてもホスト装置2との通信が停止することはない。
第1デバイス11は、ホスト装置2から全体バージョンを受信し、受信した全体バージョン番号を外部メモリ13に格納する。このため、インターフェースD1及びインターフェースD2に加えて、外部メモリ13への書き込みインターフェースを光トランシーバ1のコネクタ端子に接続する余裕が無く、全体バージョン番号を外部メモリ13に直接的に書き込むことはできないとしても、第1デバイス11によって全体バージョン番号を外部メモリ13に格納することができる。
ホスト装置2が無効な値の全体バージョン番号を取得した場合には、ホスト装置2によって第1デバイス11のファームウェアのバージョン番号及び第2デバイス12のファームウェアのバージョン番号が取得され、そのバージョン番号の組み合わせに基づいて正しい全体バージョンが取得される。そして、第1デバイス11は、ホスト装置2から正しい全体バージョン番号を受信し、外部メモリ13に格納する。このように、ホスト装置2は、無効な値の全体バージョン番号を取得することによって、全体バージョン番号の書き込み忘れを検出でき、外部メモリ13に正しい全体バージョン番号を保存することが可能となる。
なお、本発明に係る光トランシーバは上記実施形態に限定されない。例えば、光トランシーバ1は、第1デバイス11及び第2デバイス12に限られず、2以上のプログラマブルデバイスを備えていればよい。この場合、フラグF1は、直接ダウンロード用のインターフェースによって2以上のプログラマブルデバイスのいずれかにファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定されればよい。従って、フラグF1またはフラグF2は、ファームウェアが格納されるメモリ21及びメモリ22とは別にそれぞれのデバイス内に用意されたメモリ内に設定されてもよい。また、ホスト装置2は、実際に市場にて通信に使用される装置に限定される必要はなく、例えば、光トランシーバ1の製造段階において、光トランシーバ1を組み立てた後に、上述したように、第1デバイス11のファームウェアおよび第2デバイス12のファームウェアの少なくとも1つを新しく書き込むか、または更新した場合に、ホスト装置2の代わりに光トランシーバ1に正しい全体バージョン番号を書き込むための専用の電子機器が使用されてもよい。その場合、最新の状態の第1デバイス11のファームウェアのバージョン番号及び第2デバイス12のファームウェアのバージョン番号に対応する正しい全体バージョン番号をその専用の電子機器の内部に予め記憶させておくことができる。
また、フラグF1は、直接ダウンロード用のインターフェースによって2以上のプログラマブルデバイスのいずれかにファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定されるのであれば、第2デバイス12のメモリ22は、領域22fを有しなくてもよい。つまり、フラグF2は省略され得る。例えば、インターフェースD2を介して第2デバイス12のメモリ22の領域22aにファームウェアが書き込まれるとともに、インターフェースD1を介して第1デバイス11のメモリ21の領域21fに外部メモリ13に格納されている全体バージョン番号が無効であることを示す値のフラグF1が書き込まれるようにしてもよい。
また、外部メモリ13は、接続バスを介して第2デバイス12に接続されていてもよい。この場合、光トランシーバ1の起動処理において、外部メモリ13に格納されている全体バージョン番号が無効であることをフラグF2が示している場合に、第2デバイス12は、外部メモリ13に格納されている全体バージョン番号を無効な値に書き換えるとともに、フラグF2を外部メモリ13に格納されている全体バージョン番号が有効であることを示すように設定してもよい。
また、アップグレード機能によるファームウェアの更新に失敗した場合にも、元のファームウェアで起動できるようにするために、各デバイスが2つのファームウェア格納領域を備えていてもよい。図7は、変形例の光トランシーバを模式的に示す構成図である。図7に示される光トランシーバ1は、図1の光トランシーバ1と比較して、メモリ21が領域21bをさらに含んでいる点、メモリ22が領域22bをさらに含んでいる点、及び、外部メモリ13が領域13bをさらに含んでいる点において相違している。
領域21bには、第1デバイス11のファームウェアが格納される。つまり、メモリ21は、2つのファームウェアの格納領域を有している。同様に、領域22bには、第2デバイス12のファームウェアが格納される。つまり、メモリ22は、2つのファームウェアの格納領域を有している。領域13bには、全体バージョン番号が格納される。つまり、外部メモリ13は、2つの全体バージョン番号の格納領域を有している。領域13aに格納されている全体バージョン番号は、第1デバイス11のメモリ21の領域21aに格納されているファームウェアのバージョン番号と、第2デバイス12のメモリ22の領域22aに格納されているファームウェアのバージョン番号と、の組み合わせを一意的に識別可能な番号である。領域13bに格納されている全体バージョン番号は、第1デバイス11のメモリ21の領域21bに格納されているファームウェアのバージョン番号と、第2デバイス12のメモリ22の領域22bに格納されているファームウェアのバージョン番号と、の組み合わせを一意的に識別可能な番号である。
この場合、フラグF1は、インターフェースD1によってメモリ21の領域21aまたは領域21bにファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定される。同様に、フラグF2は、インターフェースD2によってメモリ22の領域22aまたは領域22bにファームウェアが書き込まれたことに応じて、外部メモリ13に格納されている全体バージョン番号が無効であることを示すように設定される。
第1デバイス11は、光トランシーバ1の起動処理において、フラグF1が外部メモリ13に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ13の領域13a及び領域13bのそれぞれに格納されている全体バージョン番号を無効な値に書き換えるとともに、外部メモリ13に格納されている全体バージョン番号が有効であることを示すようにフラグF1を設定し、残りの起動処理を行う。
第2デバイス12は、光トランシーバ1の起動処理において、フラグF2が外部メモリ13に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ13に格納されている全体バージョン番号が無効であることを示す無効信号を第1デバイス11に送信するとともに、外部メモリ13に格納されている全体バージョン番号が有効であることを示すようにフラグF2を設定し、第2デバイス12の残りの起動処理を行う。そして、第1デバイス11は、第2デバイス12から無効信号を受信したことに応じて、外部メモリ13の領域13a及び領域13bのそれぞれに格納されている全体バージョン番号を無効な値に書き換える。
第1デバイス11は、光トランシーバ1の動作中に、ホスト装置2から接続バスB1を介して第1デバイス11のファームウェア及び第2デバイス12のファームウェアの少なくともいずれかと全体バージョン番号とを含むアップグレードデータを受信し、受信したアップグレードデータを一旦外部メモリ13に格納する。アップグレードデータには、領域21aに格納されているファームウェアと領域22aに格納されているファームウェアとの組み合わせの更新か、領域21bに格納されているファームウェアと領域22bに格納されているファームウェアとの組み合わせの更新か、がホスト装置2によって予め指定されている。
そして、アップグレードデータにおいて、領域21aに格納されているファームウェアと領域22aに格納されているファームウェアとの組み合わせの更新が指定されている場合、光トランシーバ1の再起動時において、例えばアップグレードデータに含まれる第1デバイス11のファームウェアがメモリ21の領域21bに書き込まれ、第1デバイス11は、領域21a及び領域21bのそれぞれに格納されているファームウェアのいずれか指定された方で動作する。第1デバイス11は、ファームウェアの更新に成功したら、ホスト装置2から受信したアップグレードデータに含まれる全体バージョン番号を外部メモリ13の領域13aに格納する。
また、ホスト装置2は、実際に市場にて通信に使用される装置に限定される必要はなく、例えば、光トランシーバ1の製造段階において、光トランシーバ1を組み立てた後に、上述したように、第1デバイス11のファームウェア及び第2デバイス12のファームウェアの少なくとも1つを新しく書き込むか、更新した場合に、ホスト装置2の代わりに光トランシーバ1に正しい全体バージョン番号を書き込むための専用の電子機器が使用されてもよい。その場合、最新の状態の第1デバイス11の複数のファームウェアのそれぞれバージョン番号及び第2デバイス12の複数のファームウェアのそれぞれのバージョン番号に対応する正しい全体バージョン番号をその専用の電子機器の内部に予め記憶させておくことで、容易に正しい全体バージョンを取得し、それを第1デバイス11に送信して、複数の正しい全体バージョン番号を外部メモリ13に書き込ませることができる。
このように、変形例の光トランシーバ1では、第1デバイス11のメモリ21に格納されているいずれか一方のファームウェアと、第2デバイス12のメモリ22に格納されているいずれか一方のファームウェアのファームウェアと、の組み合わせに含まれるファームウェアを更新するとともに、更新対象となるファームウェアの組み合わせを一意的に識別可能な全体バージョン番号を更新することによって、アップグレード処理を行うことができる。そして、光トランシーバ1の起動処理において、フラグF1が外部メモリ13に格納されている全体バージョン番号が無効であることを示している場合に、外部メモリ13の領域13a及び領域13bのそれぞれに格納されている全体バージョン番号を無効な値に書き換えることによって、第1デバイス11及び第2デバイス12が2つのファームウェアを格納する構成においても、ホスト装置2による誤った全体バージョンの取得を防止できる。