(57)【要約】  ＩＣ無線通信デバイスは、プロセシング手段と、メモリと、無線通信回路とを備える。メモリは、（ｉ）ブートローダと、（ｉｉ）ファームウェア用メモリ領域にファームウェアモジュール（ＦＷ）と、（ｉｉｉ）ソフトウェアアプリケーション用メモリ領域にソフトウェアアプリケーションとを格納する。ＦＷは、所定の無線プロトコルに従って無線通信回路を制御する命令を含み、ソフトウェアアプリケーションは、ＦＷの無線通信機能を呼び出す命令を含む。ブートローダまたはＦＷは、無線通信回路を用いて新ＦＷを受信する命令を含むとともに、少なくとも一部のソフトウェアアプリケーションが新ＦＷによって上書きされるように、新ＦＷをソフトウェアアプリケーション用メモリ領域に格納する命令を含む。ブートローダは、新ＦＷをソフトウェアアプリケーション用メモリ領域からファームウェア用メモリ領域に移動またはコピーする命令を含む。【選択図】図４
2017504112.tif 000002
【特許請求の範囲】
【請求項１】
ＩＣ無線通信デバイスを更新する方法であって、
前記デバイスは、プロセシング手段と、メモリと、無線通信回路とを備え、
前記メモリは、（ｉ）ブートローダと、（ｉｉ）ファームウェア用メモリ領域に、所定の無線プロトコルに従って前記無線通信回路を制御する命令を含むファームウェアモジュールと、（ｉｉｉ）ソフトウェアアプリケーション用メモリ領域に、前記ファームウェアモジュールの無線通信機能を呼び出す命令を含むソフトウェアアプリケーションとを格納し、
前記方法は
前記プロセシング手段が、前記無線通信回路を用いて新ファームウェアモジュールを受信する、前記ブートローダまたは前記ファームウェアモジュールの命令を実行するとともに、少なくとも一部の前記ソフトウェアアプリケーションが前記新ファームウェアモジュールによって上書きされるように、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域に格納する、前記ブートローダまたは前記ファームウェアモジュールの命令を実行することと、
前記プロセシング手段が、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域から前記ファームウェア用メモリ領域に移動またはコピーする前記ブートローダの命令を実行することと、を含む
ことを特徴とする、ＩＣ無線通信デバイスを更新する方法。
【請求項２】
前記ソフトウェアアプリケーションは前記新ファームウェアモジュールによって完全に上書きされる
ことを特徴とする、請求項１に記載の方法。
【請求項３】
前記ブートローダまたは前記新ファームウェアモジュールは、前記無線通信回路を用いて新ソフトウェアアプリケーションを受信する命令を含むとともに、前記新ソフトウェアアプリケーションを前記ソフトウェアアプリケーション用メモリ領域に格納する命令を含む
ことを特徴とする、請求項１または請求項２に記載の方法。
【請求項４】
前記ファームウェア用メモリ領域および前記ソフトウェアアプリケーション用メモリ領域は、不揮発性で読み書き可能なメモリを各々含む
ことを特徴とする、請求項１乃至請求項３のいずれかに記載の方法。
【請求項５】
前記新ファームウェアモジュールの前記ソフトウェアアプリケーション用メモリ領域への格納は、前記新ファームウェアモジュールの受信と時間的に重なる
ことを特徴とする、請求項１乃至請求項４のいずれかに記載の方法。
【請求項６】
前記ソフトウェアアプリケーションは、所定のソフトウェアアプリケーション用メモリアドレスに配置され、前記方法は、前記新ファームウェアモジュールを前記所定のソフトウェアアプリケーション用メモリアドレスに格納することを含む
ことを特徴とする、請求項１乃至請求項５のいずれかに記載の方法。
【請求項７】
前記ブートローダは、個別に消去可能な一つ以上のメモリページに格納される
ことを特徴とする、請求項１乃至請求項６のいずれかに記載の方法。
【請求項８】
前記ブートローダは、前記無線通信回路を直接に使用する命令は何も含んでいない
ことを特徴とする、請求項１乃至請求項７のいずれかに記載の方法。
【請求項９】
前記ファームウェアモジュールは予めリンクされたバイナリイメージであり、前記ソフトウェアアプリケーションも予めリンクされたバイナリイメージである
ことを特徴とする、請求項１乃至請求項８のいずれかに記載の方法。
【請求項１０】
前記ソフトウェアアプリケーションは、前記無線通信回路を用いて前記新ファームウェアモジュールを受信する、前記ファームウェアモジュールの命令を前記プロセッサに実行させる命令を含む
ことを特徴とする、請求項１乃至請求項９のいずれかに記載の方法。
【請求項１１】
前記新ファームウェアモジュールはリモートデバイスから受信され、前記方法は、接続が失われた場合、前記ソフトウェアアプリケーションが前記リモートデバイスとの無線接続を再確立する情報を前記ブートローダまたは前記ファームウェアモジュールに渡すことを含む
ことを特徴とする、請求項１乃至請求項１０のいずれかに記載の方法。
【請求項１２】
前記プロセシング手段が、前記新ファームウェアモジュールが正しく受信されたことを確認する命令を実行することを含む
ことを特徴とする、請求項１乃至請求項１１のいずれかに記載の方法。
【請求項１３】
プロセシング手段と、
メモリと、
無線通信回路と、
を備えるＩＣ無線通信デバイスであって、
前記メモリは、（ｉ）ブートローダと、（ｉｉ）ファームウェア用メモリ領域に、所定の無線プロトコルに従って前記無線通信回路を制御する命令を含むファームウェアモジュールと、（ｉｉｉ）ソフトウェアアプリケーション用メモリ領域に、前記ファームウェアモジュールの無線通信機能を呼び出す命令を含むソフトウェアアプリケーションとを格納し、
前記ブートローダまたは前記ファームウェアモジュールは、前記無線通信回路を用いて新ファームウェアモジュールを受信する命令を含むとともに、少なくとも一部の前記ソフトウェアアプリケーションが前記新ファームウェアモジュールによって上書きされるように、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域に格納する命令を含み、
前記ブートローダは、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域から前記ファームウェア用メモリ領域に移動またはコピーする命令を含む
ことを特徴とするＩＣ無線通信デバイス。
【請求項１４】
前記ブートローダまたは前記ファームウェアモジュールは、前記ソフトウェアアプリケーションを前記新ファームウェアモジュールで完全に上書きする命令を含む
ことを特徴とする、請求項１３に記載のＩＣ無線通信デバイス。
【請求項１５】
前記ブートローダまたは前記新ファームウェアモジュールは、前記無線通信回路を用いて新ソフトウェアアプリケーションを受信する命令を含むとともに、前記新ソフトウェアアプリケーションを前記ソフトウェアアプリケーション用メモリ領域に格納する命令を含む
ことを特徴とする、請求項１３または請求項１４に記載のＩＣ無線通信デバイス。
【請求項１６】
前記ファームウェア用メモリ領域および前記ソフトウェアアプリケーション用メモリ領域は、不揮発性で読み書き可能なメモリを各々含む
ことを特徴とする、請求項１３乃至請求項１５のいずれかに記載のＩＣ無線通信デバイス。
【請求項１７】
前記ブートローダおよび／または前記ファームウェアモジュールの前記命令は、前記新ファームウェアモジュールの前記ソフトウェアアプリケーション用メモリ領域への格納が、前記新ファームウェアモジュールの受信と時間的に重なるように実行される
ことを特徴とする、請求項１３乃至請求項１６のいずれかに記載のＩＣ無線通信デバイス。
【請求項１８】
前記ソフトウェアアプリケーションは、所定のソフトウェアアプリケーション用メモリアドレスに配置され、前記ブートローダまたは前記ファームウェアモジュールは、前記新ファームウェアモジュールを前記所定のソフトウェアアプリケーション用メモリアドレスに格納する命令を含む
ことを特徴とする、請求項１３乃至請求項１７のいずれかに記載のＩＣ無線通信デバイス。
【請求項１９】
前記ブートローダは、個別に消去可能な一つ以上のメモリページに格納される
ことを特徴とする、請求項１３乃至請求項１８のいずれかに記載のＩＣ無線通信デバイス。
【請求項２０】
前記ブートローダは、前記無線通信回路を直接に使用する命令は何も含んでいない
ことを特徴とする、請求項１３乃至請求項１９のいずれかに記載のＩＣ無線通信デバイス。
【請求項２１】
前記ファームウェアモジュールは予めリンクされたバイナリイメージであり、前記ソフトウェアアプリケーションも予めリンクされたバイナリイメージである
ことを特徴とする、請求項１３乃至請求項２０のいずれかに記載のＩＣ無線通信デバイス。
【請求項２２】
前記ソフトウェアアプリケーションは、前記無線通信回路を用いて新ファームウェアモジュールを受信する、前記ファームウェアモジュールの命令を前記プロセッサに実行させる命令を含む
ことを特徴とする、請求項１３乃至請求項２１のいずれかに記載のＩＣ無線通信デバイス。
【請求項２３】
前記ブートローダまたは前記ファームウェアモジュールは、前記新ファームウェアモジュールをリモートデバイスから受信する命令を含み、前記ソフトウェアアプリケーションは、接続が失われた場合、前記リモートデバイスとの無線接続を再確立する情報を前記ブートローダまたは前記ファームウェアモジュールに渡す命令を含む
ことを特徴とする、請求項１３乃至請求項２２のいずれかに記載のＩＣ無線通信デバイス。
【請求項２４】
前記ブートローダまたは前記ファームウェアモジュールは、前記新ファームウェアモジュールが正しく受信されたことを確認する命令を含む
ことを特徴とする、請求項１３乃至請求項２３のいずれかに記載のＩＣ無線通信デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＣ無線通信デバイスおよびそのデバイスを更新する方法に関する。
【背景技術】
【０００２】
ＩＣ無線通信デバイスは、通常、プロセッサと、メモリと、無線通信回路とをシリコンチップ上で統合したものである。アンテナは、シリコン上に組まれても、外部接続してもよい。該デバイスは、通常、電源と、クロック源と、センサ、タイマー、デジタルアナログ変換器および出力装置などの外部周辺機器とに接続するためのピンを有している。該プロセッサは、該デバイスが無線メッセージを送信および／または受信するのを管理するために、無線通信回路とインタフェースをとる。
【０００３】
このような無線通信デバイスは、ワイヤレスのマウスとキーボード、ゲーム用コントローラ、自転車の速度計、リモートコントロール機器、ガレージドア開閉器、ワイヤレススピーカのような広範囲の無線製品で使用することができる。
【０００４】
このようなデバイスのプロセッサは、ブルートゥース(登録商標)やジグビーなどの所定の無線プロトコルに従って無線通信回路を制御するために、デバイス上の（ＥＥＰＲＯＭやフラッシュなどの）不揮発性メモリに格納されたソフトウェアを実行することができる。
【０００５】
そのようなデバイスの一例として、出願人のオンチップ無線ｎＲＦ５１８２２が挙げられる。ｎＲＦ５１８２２は、無線トランシーバと、２５６キロバイトの内蔵フラッシュメモリおよび１６キロバイトのＲＡＭを備えた３２ビットのＡＲＭ(登録商標)  ＣＯＲＴＥＸ(登録商標)−Ｍ０  ＣＰＵとを含んでいる。ｎＲＦ５１８２２は、予めコンパイル・リンクされたバイナリのファームウェアモジュールが既にフラッシュメモリにロードされた状態で顧客に供給されるが、該顧客が該デバイスにロードするためのバイナリイメージとして、ファームウェアモジュールを供給してもよい。該ファームウェアモジュールは、無線機のソフトウェア制御ならびに他の機能を提供することができる。顧客は、その後、ＩＣ化された無線デバイスを組み込んだ（無線コンピュータキーボードなどの）最終製品をエンドユーザに出荷する前に、予めリンクされた別のバイナリモジュールとして、独自のソフトウェアアプリケーションを該フラッシュメモリに追加することもできる。 
【０００６】
本出願人は、ファームウェアモジュールおよびソフトウェアアプリケーションがデバイスにロードされた後でも、（例えば、新しい機能を追加したり、バグを修正したりするために）該ファームウェアモジュールのコードを変更したり更新したりすることが望ましい場合があることを認識するに至った。いくつかの例では、該デバイスがエンドユーザの所有物となっている段階で、このようなコードを変更することが望ましい場合がある。
【発明の概要】
【０００７】
本発明は、そのようなコード更新を容易にする効率的な方法を提供することを目的とする。
【０００８】
第一の態様から見ると、本発明は、ＩＣ無線通信デバイスを更新する方法を提供するものであって、
前記デバイスは、プロセシング手段と、メモリと、無線通信回路とを備え、
前記メモリは、（ｉ）ブートローダと、（ｉｉ）ファームウェア用メモリ領域に、所定の無線プロトコルに従って前記無線通信回路を制御する命令を含むファームウェアモジュールと、（ｉｉｉ）ソフトウェアアプリケーション用メモリ領域に、前記ファームウェアモジュールの無線通信機能を呼び出す命令を含むソフトウェアアプリケーションとを格納し、
前記方法は
前記プロセシング手段が、前記無線通信回路を用いて新ファームウェアモジュールを受信する、前記ブートローダまたは前記ファームウェアモジュールの命令を実行するとともに、少なくとも一部の前記ソフトウェアアプリケーションが前記新ファームウェアモジュールによって上書きされるように、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域に格納する、前記ブートローダまたは前記ファームウェアモジュールの命令を実行することと、
前記プロセシング手段が、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域から前記ファームウェア用メモリ領域に移動またはコピーする前記ブートローダの命令を実行することと、を含む。
【０００９】
第二の側面から見ると、本発明は、
プロセシング手段と、
メモリと、
無線通信回路と、
を備えるＩＣ無線通信デバイスを提供するものであって、
前記メモリは、（ｉ）ブートローダと、（ｉｉ）ファームウェア用メモリ領域に、所定の無線プロトコルに従って前記無線通信回路を制御する命令を含むファームウェアモジュールと、（ｉｉｉ）ソフトウェアアプリケーション用メモリ領域に、前記ファームウェアモジュールの無線通信機能を呼び出す命令を含むソフトウェアアプリケーションとを格納し、
前記ブートローダまたは前記ファームウェアモジュールは、前記無線通信回路を用いて新ファームウェアモジュールを受信する命令を含むとともに、少なくとも一部の前記ソフトウェアアプリケーションが前記新ファームウェアモジュールによって上書きされるように、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域に格納する命令を含み、
前記ブートローダは、前記新ファームウェアモジュールを前記ソフトウェアアプリケーション用メモリ領域から前記ファームウェア用メモリ領域に移動またはコピーする命令を含む。
【００１０】
上述のように、本発明によれば、ＩＣ無線通信デバイスは、既存ファームウェアモジュールを用い無線で新ファームウェアモジュールを受信することができ、前記の旧ファームウェアモジュールを更新するか前記新ファームウェアモジュールと置き替える前に、前記新ファームウェアモジュールの一時的格納場所としてソフトウェアアプリケーション用メモリ領域を使用することができることが、当業者によって理解されるであろう。このようにすれば、前記新ファームウェアモジュールを受信するための専用メモリ領域を確保する必要がない。より大きなメモリが必要になれば、前記デバイスのサイズおよびコストを追加することになるので、これは望ましいことである。前記更新作業は、前記無線デバイスをケーブルでホストコンピューティングデバイスに接続する必要がなく無線で行なうことができるので、エンドユーザが適宜実行することもできる。
【００１１】
一連の好ましい実施形態において、前記ブートローダまたは前記新ファームウェアモジュールは、前記無線通信回路を用いて新ソフトウェアアプリケーションを受信する命令を含むとともに、前記新ソフトウェアアプリケーションを前記ソフトウェアアプリケーション用メモリ領域に格納する命令を含む。前記新ソフトウェアアプリケーションを受信するときに前記旧ファームウェアモジュールのコピーが前記ソフトウェアアプリケーション用メモリ領域に残っている場合、少なくとも一部の前記旧ファームウェアモジュールは、前記新ソフトウェアアプリケーションによって上書きされることが好ましい。この新ソフトウェアアプリケーションは、前記旧ソフトウェアアプリケーションと同一であってもよく、新コードまたは削除されたコードのような、少なくともいくつかの相違点を含んでいてもよい。
【００１２】
この新ファームウェアモジュールは、前記ソフトウェアアプリケーション用メモリ領域に格納されるとき、前記旧ソフトウェアアプリケーションを完全に上書きしてもよい。例えば、前記新ファームウェアモジュールが前記ソフトウェアアプリケーションよりも大きい場合がこのケースに該当する。
【００１３】
前記メモリは、ＲＯＭ、不揮発性メモリ、および揮発性メモリのうちの任意の一つ以上を含むことができる。いくつかの実施形態では、前記メモリは、ＥＥＰＲＯＭや（ＮＯＲ型フラッシュなどの）フラッシュや任意の他の適切な技術のような、不揮発性で読み書き可能なメモリを含むか、またはそれだけで構成されている。前記ファームウェア用メモリ領域および／または前記ソフトウェアアプリケーション用メモリ領域は、それぞれ不揮発性で読み書き可能なメモリを含むか、またはそれだけで構成されていることが好ましい。前記メモリは、（必須ではないが）コードを前記メモリから直接実行することができるように、ランダムアクセスが可能であることが好ましい。前記プロセシング手段は、前記ファームウェアモジュールおよび／または前記ソフトウェアアプリケーションの命令を前記メモリから直接に、おそらくプロセッサキャッシュを経由して、しかし最初に前記ファームウェアモジュールまたは前記ソフトウェアアプリケーションの全体をＲＡＭにコピーすることはしないで実行することが好ましい。前記メモリは、個別に消去可能な複数のページを含んでいることが多い。前記メモリの不揮発性部分は、個々のビットやバイトやワードの単位のような、ページよりも微細なスケールでは消去することができないようなものであることが多い。ここで、消去するということは、前記メモリの内容をデフォルトの状態（通常、すべてバイナリ「１」かすべてバイナリ「０」のいずれか）にリセットすることを意味し、個々のビットやバイトはこの状態から書き込み動作で変更される。
【００１４】
上書きは、前記メモリの種類に応じて、消去動作を行なってから書き込み動作を行なうことを含む場合もあるし、単一動作として行なう場合もある。
【００１５】
前記デバイスは、ＲＡＭのような揮発性メモリも含むことが好ましい。しかし、好ましい実施形態においては、ＲＡＭの量、または利用可能ＲＡＭの量は、前記ソフトウェアアプリケーション用メモリ領域よりも小さい。前記新ファームウェアモジュールは、通常、前記ＲＡＭまたは前記利用可能ＲＡＭよりも大きいことが多い。前記新ファームウェアモジュールの前記ソフトウェアアプリケーション用メモリ領域への格納は、前記新ファームウェアモジュールの受信と時間的に重なることが好ましい。
【００１６】
前記ファームウェア用メモリ領域は、単一の連続したメモリアドレス範囲を占めていることが好ましい。しかし、これは必須ではなく、前記ファームウェア用メモリ領域は、複数の非連続的なサブ領域を含んでいてもよい。同様に、前記ソフトウェアアプリケーション用メモリ領域は、単一の連続したメモリアドレス範囲を占めていることが好ましい。しかし、これは必須ではなく、前記ソフトウェアアプリケーション用メモリ領域は、複数の非連続的なサブ領域を含んでいてもよい。前記ファームウェア用メモリ領域は、前記ソフトウェアアプリケーション用メモリ領域とは別個のものである（すなわち、重ならない）ことが好ましい。
【００１７】
前記ソフトウェアアプリケーションは、所定のソフトウェアアプリケーション用メモリアドレスに配置される（すなわち、一部または全ての前記ソフトウェアアプリケーションが、前記所定のメモリアドレスから伸びるメモリアドレス範囲を占める）ことが好ましい。この所定のアドレスは、前記ソフトウェアアプリケーションをリンクしたり前記デバイスにロードしたりする際に使用するために、前記ソフトウェアアプリケーションの開発者に提供されることが多い。このアドレスは、前記ソフトウェアアプリケーションに割り込みを転送するなどの目的で、前記ファームウェアモジュールが使用する場合がある。
【００１８】
前記新ファームウェアモジュールは、前記ソフトウェアアプリケーション用メモリ領域に書き込まれるとき、同一のまたはほぼ同一の所定のソフトウェアアプリケーション用メモリアドレスに格納される（すなわち、一部または全ての前記新ファームウェアモジュールが、前記ソフトウェアアプリケーション用メモリアドレスから伸びるメモリアドレス範囲を占める）ことが好ましい。こうすれば、上書きされる前記ソフトウェアアプリケーションと最大限重なることを保証することによって、メモリを非常に効率的に使用することができる。
【００１９】
前記ブートローダまたは前記新ファームウェアモジュールは、新ソフトウェアアプリケーションを前記所定のソフトウェアアプリケーション用メモリアドレスに書き込む命令を含むことが好ましい。
【００２０】
前記（旧）ファームウェアモジュールは、所定のファームウェア用メモリアドレスに配置される（すなわち、一部または全ての前記ファームウェアモジュールが、前記所定のファームウェア用メモリアドレスから伸びるメモリアドレス範囲を占める）ことが好ましい。前記新ファームウェアモジュールは、同じ前記所定のファームウェア用メモリアドレスに配置される（すなわち、一部または全ての前記新ファームウェアモジュールが、前記ファームウェア用メモリアドレスから伸びるメモリアドレス範囲を占める）ように移動またはコピーされることが好ましい。各々の前記ファームウェアモジュールおよび／または前記ソフトウェアアプリケーションは、命令とともにデータを含むこともできるし、割り込みベクタテーブルを含むこともできる。前記新ファームウェアモジュールは、前記旧ファームウェアモジュールより小さくても大きくてもよいし、互いに実質的に同じサイズであってもよい。
【００２１】
いくつかの実施形態では、一部または全ての前記ソフトウェアアプリケーション用メモリ領域は、前記新ファームウェアモジュールが前記ファームウェア用メモリ領域に移動された後に消去される。他の実施形態では、前記新ファームウェアモジュールのコピーは、前記ソフトウェアアプリケーション用メモリ領域に残したままにしておき、後に（デバイスのリセット後、または新ソフトウェアアプリケーションがロードされたときなどに）消去または上書きされる。
【００２２】
前記ブートローダは、ＲＯＭまたはフラッシュなどの読み書き可能メモリに格納されることが多い。前記ブートローダは、前記ファームウェアモジュールと比べて比較的小さい（例えば、ほぼ１／１０のサイズ以下）ことが好ましい。一連の実施形態では、前記ブートローダはほぼ４キロバイトのサイズである一方、前記ファームウェアモジュールはほぼ８０キロバイト以上のサイズである。前記ブートローダは、前記ファームウェア用メモリ領域に、または別個のブートローダ用メモリ領域に配置することができる。前記ブートローダは、前記ファームウェアモジュールを格納するために使用されていない、個別に消去可能な一つ以上のメモリページに格納されることが好ましい。こうすれば、前記ブートローダのコードに影響を与えずに、前記旧ファームウェアモジュールの消去や上書きを非常に効率的に行なうことができる。
【００２３】
前記プロセシング手段は、電源投入後またはリセット後、前記ブートローダの一つ以上の命令を実行するように構成することができる。前記ブートローダは、前記デバイスを更新する以外の機能を有していてもよいが、少なくともいくつかの実施形態では、他の機能を提供しない。いくつかの実施形態では、前記ブートローダは、前記無線通信回路を直接に使用する（すなわち、前記ファームウェアモジュールまたは前記ソフトウェアアプリケーションに実行を渡さずに前記無線通信回路を直接作動させる）命令は何も含んでいない。こうすれば、前記ブートローダは、可能な限りシンプルで小さい状態のまま保たれ、前記ブートローダのコードでバグが発生する可能性を最小限に抑えることができる。その代わりに、前記ブートローダは、無線通信が必要になると前記旧ファームウェアモジュールおよび／または前記新ファームウェアモジュールに実行を転送する場合がある。いくつかの実施形態では、前記ブートローダは、有効なファームウェアモジュールおよびソフトウェアアプリケーションが既に前記デバイスにロードされていれば常に（電源投入後またはリセット後などに）前記ファームウェアモジュールまたは前記ソフトウェアアプリケーションに実行を分岐させる命令を含む。
【００２４】
前記プロセシング手段は、どのように具体化されてもよいが、いくつかの好ましい実施形態では、ＡＲＭ  ＣＯＲＴＥＸ−Ｍファミリーのプロセッサ（例えば、ＣＯＲＴＥＸ−Ｍ０）のようなＡＲＭ社によって開発されたプロセッサを含むか、またはそれ自体である。前記デバイスは、任意の適切なやり方で命令実行を共有することができる、二つ以上など複数のプロセッサを含む場合がある。いくつかの実施形態では、前記ファームウェアモジュールの命令は第一プロセッサによって実行され、前記ソフトウェアアプリケーションの命令は、前記第一プロセッサとは異なる第二プロセッサによって実行される。前記無線通信回路は、物理的および／または論理的に前記プロセッサとは別個であることが好ましい。前記無線通信回路は、アナログ回路および／またはデジタル回路を備えることができる。前記デバイスは、一体化されたアンテナを備えていてもよいし、外部アンテナ用接続部を備えていてもよい。前記デバイスは、抵抗器、コンデンサ、電源、増幅器、無線アンテナ、水晶発振器、センサ、出力デバイス、などのようなさまざまな外部部品を接続するための複数の接続部を備えていてもよい。
【００２５】
好ましい実施形態において、前記ファームウェアモジュールは、予めリンクされたバイナリイメージである。前記ソフトウェアアプリケーションも、予めリンクされたバイナリイメージであることが好ましい。前記ファームウェアモジュールと前記ソフトウェアアプリケーションとの間ではリンクが行なわれないことが好ましい。いくつかの実施形態では、前記ソフトウェアアプリケーションは、（例えば、無線機能を呼び出すために）前記プロセシング手段にスーパーバイザコール命令を実行させ、該スーパーバイザコール命令が前記ファームウェアモジュールによって処理される割り込みを発生させることによって、前記ファームウェアモジュールに制御権を移転する。
【００２６】
このように前記ファームウェアモジュールと前記ソフトウェアアプリケーションを分離すれば、前記旧ファームウェアモジュールを破損することなく、前記旧ソフトウェアアプリケーションを前記新ファームウェアモジュールで簡単に上書きすることができる。前記ファームウェアモジュールと前記ソフトウェアアプリケーションが単一のバイナリイメージとして一緒にコンパイルおよび／またはリンクされた場合、ソフトウェアアプリケーションのコードだけを含んだ、容易に識別できるメモリ領域が存在する可能性は低いので、これは簡単ではないだろう。だからと言って、不可能であるわけではなく、（例えば、リンカー命令を注意深く使用することによって）前記ファームウェアモジュールが前記ソフトウェアアプリケーションにリンクされて一体化する構成を排除するものではない。
【００２７】
前記デバイスは、前記ソフトウェアアプリケーション用メモリ領域のコードが前記ファームウェア用メモリ領域のアドレスを直接アクセスする（読み出す、および／または、書き込む、および／または、実行する）ことを防止することができるメモリ保護回路を備えていてもよい。
【００２８】
いくつかの実施形態において、前記ソフトウェアアプリケーションは、前記無線通信回路を用いて新ファームウェアモジュールを受信する、前記ファームウェアモジュールの命令を前記プロセッサに実行させる命令を含んでいる。前記ソフトウェアアプリケーションは、前記ファームウェアモジュールに（例えば、システムコールによって）直接に制御権を移転してもよいし、前記ブートローダに制御権を渡し、次に、前記ブートローダが前記ファームウェアモジュールの必要な機能または機能群を呼び出してもよい。こうすれば、前記ソフトウェアアプリケーションは、例えば、人間のユーザからの信号に応答したり、スマートフォンなどのリモートデバイスから無線で受信したメッセージに応答したりして、ファームウェアの更新を開始するかどうかやいつ開始するかを決定することができる。
【００２９】
前記ソフトウェアアプリケーションは、例えば、前記デバイスが前記新ファームウェアモジュールを受信している最中に無線通信の問題が起こった場合、または前記デバイスが予期せず（例えば、停電によって）リセットされた場合、前記デバイスがリモートデバイスとの無線接続を再確立することができる情報を（例えば、一つ以上の機能パラメータとして）前記ブートローダまたは前記ファームウェアモジュールに渡す命令を含むことができる。この情報は、デバイスアドレス、無線チャネル、認証情報、暗号化情報のうち任意の一つまたは複数であるような、結合情報を含んでいてもよい。前記デバイスが前記新ファームウェアモジュールを受信し始めると、前記ソフトウェアアプリケーションの上書きが開始されて（もはや実行可能でなくなって）いるので、これは重要であると言える。前記結合情報は、前記デバイスが前記リモートデバイスから新ソフトウェアアプリケーションを受信するためにも使用してもよい。前記ブートローダが前記結合情報を保存して前記新ソフトウェアアプリケーションを受信するために使用してもよいし、前記旧ファームウェアモジュールが前記結合情報を所定のメモリ位置に格納するなどして前記新ファームウェアモジュールが利用できるようにしてもよい。
【００３０】
前記ブートローダまたは前記ファームウェアモジュールは、前記新ファームウェアモジュールが正しく受信された、および／または、前記ソフトウェアアプリケーション用メモリ領域に正しく格納されたことを確認する命令を含むことが好ましい。前記ブートローダまたは前記ファームウェアモジュールは、前記新ファームウェアモジュールのチェックサムを検証すること、または、暗号署名を検証することを含んでいてもよい。チェックサムやデジタル署名などの前記新ファームウェアモジュール用認証情報は、例えば、前記新ファームウェアモジュールに付随したり前記新ファームウェアモジュールに埋め込まれたりして、前記リモートデバイスから前記デバイスに提供することができる。前記ブートローダまたは前記ファームウェアモジュールは、当該チェックが失敗すると前記無線通信回路を用いてリモートデバイスに通知する命令を含んでいて、前記リモートデバイスに前記新ファームウェアモジュールを再送信することを依頼してもよい。
【００３１】
前記新ファームウェアモジュールが正しく格納されると、前記旧ファームウェアモジュールは、前記ブートローダに戻るか、制御権を移転することができる。これは、直接分岐によって、割り込みを発生させることによって、前記デバイスをリセットさせることによって、または、任意の他の適切なメカニズムによって行なうことができる。
【００３２】
前記ブートローダは、（前記ファームウェア用メモリ領域を全て消去するなどして）前記旧ファームウェアモジュールを消去してから、前記ソフトウェアアプリケーション用メモリ領域から前記新ファームウェアモジュールを読んで、前記ファームウェア用メモリ領域に書き込むことができる。その後、（新ソフトウェアアプリケーションを受信する前か受信した後に）前記新ファームウェアモジュールに制御権を移転することができる。
【００３３】
新ソフトウェアアプリケーションが、前記ブートローダまたは前記新ファームウェアモジュールの命令の下で、続いて受信される場合、それを前記ソフトウェアアプリケーション用メモリ領域に直接書き込むことができる。前記新ソフトウェアアプリケーションの前記ソフトウェアアプリケーション用領域への格納は、前記新ソフトウェアアプリケーションの受信と時間的に重なることが好ましい。前記ブートローダまたは前記新ファームウェアモジュールは、前記新ソフトウェアアプリケーションが正しく受信された、および／または、前記ソフトウェアアプリケーション用メモリ領域に正しく格納されたことを確認する命令を含むことが好ましい。前記ブートローダまたは前記新ファームウェアモジュールは、前記新ソフトウェアアプリケーションのチェックサムまたは暗号署名を検証することを含んでいてもよい。前記ブートローダまたは前記ファームウェアモジュールは、当該チェックが失敗すると前記無線通信回路を用いてリモートデバイスに通知する命令を含んでいてもよい。前記ブートローダまたは前記新ファームウェアモジュールは、前記リモートデバイスに前記新ソフトウェアアプリケーションを再送信することを依頼してもよい。
【００３４】
新ソフトウェアアプリケーションは、前記新ファームウェアモジュールと同一の無線通信セッション中に受信されてもよい。あるいは、新ソフトウェアアプリケーションは、後で発生する無線通信セッションで受信されてもよい。新ソフトウェアアプリケーションは、前記新ファームウェアモジュールとは別のリモートデバイスから受信してもよい。
【００３５】
本明細書に記載した任意の態様または実施形態の特徴は、適切であればどんな場合でも、本明細書に記載した任意の他の態様または実施形態にも適用することができる。異なる実施形態または一連の実施形態に言及する場合、これらは必ずしも別個のものではなく重複してもよいことが理解されるべきである。
【図面の簡単な説明】
【００３６】
ほんの一例として、添付図面を参照しながら、本発明の特定の好ましい実施形態を説明することにする。
【図１】本発明を具現化するマイクロコントローラの概略図である。
【図２】マイクロコントローラアーキテクチャ内の主要なソフトウェア構成要素を示す概略図である。
【図３】マイクロコントローラの模式的なメモリマップである。
【図４】マイクロコントローラを更新する第一段階を示した、不揮発性メモリの概略図である。
【図５】マイクロコントローラを更新する第二段階を示した、不揮発性メモリの概略図である。
【図６】マイクロコントローラを更新する第三段階を示した、不揮発性メモリの概略図である。
【発明を実施するための形態】
【００３７】
図１は、オンチップ無線として知られることもあるＩＣマイクロコントローラ１を示している。これは、無線心拍数モニタなどの製品に組み込まれることも多い。マイクロコントローラ１は、抵抗・コンデンサ発振器を備えるか外部水晶発振器（図示せず）からの入力を受信するクロック回路３と、電力管理回路５と、（ＡＲＭ  ＣＯＲＴＥＸ−Ｍ０などの）プロセッサ７と、メモリ保護回路９と、ＲＡＭ１１と、不揮発性フラッシュメモリ１３と、一つ以上の周辺機器１５と、無線通信回路１７と、入出力回路１９とを備える。
【００３８】
プロセッサ７とＲＡＭ１１とフラッシュメモリ１３とは、回線およびバス（図示せず）を使用するなど従来のやり方で相互接続されている。メモリ保護回路９は、プロセッサ７からＲＡＭ１１およびフラッシュメモリ１３への命令をインターセプトするように位置している。マイクロコントローラ１は、製品に導入されると、電源、無線アンテナ、水晶発振器、コンデンサ、センサ、音声／映像出力デバイス等（図示せず）のような多くの外部構成要素に接続され得る。
【００３９】
図２は、ソフトウェアアーキテクチャの主要構成要素を示している。これらには、ＡＲＭ  ＣＯＲＴＥＸマイクロコントローラのソフトウェアインターフェイス規格のような任意選択のハードウェア抽象化層２１と、ブートローダ２２と、ファームウェアモジュール２３と、ドライバ２５と、ソフトウェアアプリケーション２７とが含まれる。ドライバ２５は、ソフトウェアアプリケーション２７に専用であってもよい。
【００４０】
ブートローダ２２は、フラッシュメモリ１３にある小さなバイナリアプリケーションであり、無線によるソフトウェア更新を管理する命令を含んでいる。ブートローダ２２は、リセット後に必ず入る入り口点である。通常は、更新が進行中でない限り、ファームウェアモジュール２３にすぐに制御を渡す。
【００４１】
ファームウェアモジュール２３は、多くの組込みソフトウェア群を含む、リンク済みバイナリアプリケーションである。無線プロトコル３１は、ブルートゥース低エネルギーのような一つ以上の無線プロトコルスタックを実装している。ライブラリ３５は、共有ハードウェアリソース管理および、乱数生成、割り込みや優先順位の構成、（周辺機器を有効にしたり無効にしたりするなどの）電力管理、暗号化機能などのような機能を提供する。ファームウェアマネージャ３７は、ファームウェアモジュールを有効にしたり無効にしたり、無線プロトコルスタックを有効にしたり無効にしたりすることをサポートする。ファームウェアモジュール２３は、システムベクタテーブルを所有している。
【００４２】
ファームウェアモジュール２３用のアプリケーションプログラミングインタフェース（ＡＰＩ）２９は、ソフトウェアアプリケーション２７がファームウェアモジュール２３の機能を呼び出せるようにする。ＡＰＩ２９は、スーパーバイザコール命令という信号を使用して実行され、ソフトウェアアプリケーション２７からファームウェアモジュール２３に制御権を渡す。スーパーバイザコール命令は、ファームウェアモジュール２３内で処理されるプロセス割り込みを発生させる。ファームウェアモジュール２３は、ソフトウェア割り込みを使用して、ソフトウェアアプリケーション２７に事象を知らせることができる。
【００４３】
ソフトウェアアプリケーション２７は、ファームウェアモジュール２３を使用してマイクロコントローラ１のハードウェアを間接的に使用することができることに加えて、該ハードウェアを直接に、または、アプリケーション専用のドライバ２５を用いるなどによりハードウェア抽象化層２１を介して、アクセスすることができる。
【００４４】
図３は、ＲＡＭ１１とフラッシュ１３が、ファームウェアモジュール２３と（任意のアプリケーション固有のドライバ２５を含む）ソフトウェアアプリケーション２７との間でどのように共有されるのかを示している。 ＡＲＭ  ＣＯＲＴＥＸ−Ｍ０のプロセッサ７を使用すると、フラッシュ１３は０（0x0000 0000）から上方にその容量であるSizeOfProgMemまでアドレスを割り当てられるとともに、ＲＡＭ１１は0x2000 0000から上方に「0x2000 0000 + ＲＡＭサイズ」までアドレスが割り当てられる。他の実施形態では、もちろん、異なるアドレス値を使用することができる。
【００４５】
フラッシュ１３は、アドレスCLENR0（符号長領域０）の両側にニつの異なる領域を備えている。ゼロとCLENR0の間にある領域０は、ブートローダ２２とファームウェアモジュール２３が配置されているところである。ファームウェアモジュールの割り込みベクタテーブルは、アドレスのゼロに格納される。CLENR0から上方に延設される領域１は、ソフトウェアアプリケーション２７および任意のアプリケーション用データがあるところである。この領域もまた、ファームウェアモジュール２３から（そしておそらくブートローダ２２から）の転送割り込みを受け取る割り込みベクタテーブルがアドレスCLENR0にある。デバイス１は、構成情報やフラグを格納するなど他の目的に使用することができる別の不揮発性メモリ（図示せず）を有してもよいことが理解されるであろう。
【００４６】
ＲＡＭ１１も同様に、基底アドレス0x2000 0000からRLENR0までの領域０、および、RLENR0から上方に伸びる領域１を有している。ＲＡＭ領域０はブートローダ２２とファームウェアモジュール２３用のデータストレージを提供し、一方、ＲＡＭ領域１はソフトウェアアプリケーション２７用のデータストレージを提供する。コールスタックは、ファームウェアモジュール２３とソフトウェアアプリケーション２７との間で共有され、例えば、「0x2000 0000 +ＲＡＭサイズ」から下方に拡がる。コールスタックに割り当てられたメモリは、ソフトウェアアプリケーション２７とファームウェアモジュール２３の両方の必要性を考慮に入れて十分大きくなければいけない。所定の共有メモリアドレスは、ＲＡＭ１１の領域１にあってもよく、ＲＡＭ１１内で領域０および領域１以外の別の場所にあってもよい。
【００４７】
メモリ保護回路９は、プロセッサ７からフラッシュ１３およびＲＡＭ１１への（読み取り要求など）すべてのメモリアクセス要求をインターセプトするように構成されている。メモリ保護回路９は、アクセス要求命令の発行元を決定する（例えば、該要求は、ファームウェアモジュール２３からのものかどうか、または、ソフトウェアアプリケーション２７からのものかどうか）。メモリ保護回路９は、また、さまざまな発行元に対してアクセス権限をそれぞれ指定し、それに応じてアクセス要求を許可するか拒否する（例えば、一つ以上の専用レジスタに格納されている）メモリ保護構成データにアクセスする。
【００４８】
本発明のいくつかの好ましい実施形態において、ソフトウェアアプリケーション２７は、フラッシュ領域０およびＲＡＭ領域０への読み取りおよび／または書き込みのアクセスを拒否される。こうすれば、ファームウェアモジュール２３に対する機密性を保護し、ファームウェアモジュール２３に割り当てられたメモリ位置にソフトウェアアプリケーション２７が不注意に、または、悪意を持って書き込むのを防止することができ、堅牢性とセキュリティを向上することができる。ソフトウェアアプリケーションのフラッシュ領域１もまた、外部デバッグインタフェースを経由したリードバックに対して保護するなど、読み取りアクセスから保護することができる。
【００４９】
図４〜図６は、デバイス１のファームウェアモジュールおよびソフトウェアアプリケーションの更新を示している。南京錠シンボルは、メモリ保護回路９によってなんらかのアクセス保護が実施されているメモリ領域を示している。
【００５０】
ソフトウェアアプリケーション２７は、ブートローダ２２の更新機能を呼び出すことによって更新プロセスを開始する。ソフトウェアアプリケーション２７は、リモートの相手方デバイスと接続するための無線プロトコル結合情報をブートローダ２２に渡す。相手方デバイスは、例えば、スマートフォンでもラップトップコンピュータでもよい。結合情報は、接続が切れた場合に、マイクロコントローラ１が相手方デバイスに再接続するために使用することができる。ブートローダ２２またはソフトウェアアプリケーション２７は、その後、（例えば、ファームウェアモジュール２３の更新動作を呼び出すためにシステムコールを使用して）ファームウェアモジュール２３に制御権を渡す。ファームウェアモジュール２３は、制御権を持つと、無線通信回路１７を用いて、相手方デバイスに新ファームウェアモジュール４０を要求する。
【００５１】
図４に示すように、ファームウェアモジュール２３は、新ファームウェアモジュール４０を受信し始める。ファームウェアモジュール２３は、一部の受信データを一時的にＲＡＭにバッファリングしてもよいが、新ファームウェアモジュール４０を受信するとすぐに、それまでソフトウェアアプリケーション２７を保持していた、フラッシュメモリ１３の領域１へ書き込みを開始する。（アプリケーションベクタテーブルを含む）ソフトウェアアプリケーション２７は、書き込みが開始される前に完全に消去されるか、または、必要に応じて一度に一ページずつ消去されてもよい。
【００５２】
新ファームウェアモジュール４０全体が受信されてフラッシュメモリ１３に書き込まれると、旧ファームウェアモジュール２３は、相手方デバイスから受信した、新ファームウェアモジュール４０のチェックサムを検証する。チェックサムが正しくない場合、旧ファームウェアモジュール２３は、相手方デバイスによる新ファームウェアモジュール４０の再送信を要求する。
【００５３】
マイクロコントローラ１が新ファームウェアモジュール４０を受信している最中に（停電などで）予期せずリセットされた場合、ブートローダ２２で実行が再開されて、相手方デバイスに再び新ファームウェアモジュール２３を要求するようファームウェアモジュール２３に命令する。
【００５４】
新ファームウェアモジュール４０のチェックサムが正しいと、ファームウェアモジュール２３は、ブートローダ２２に制御権を渡す。ブートローダ２２は、リモートの相手方デバイスとの接続を切り、フラッシュメモリ１３の領域０から旧ファームウェアモジュール２３（およびそのベクタテーブル）を消去する。ブートローダ２２は、もちろん、領域０のブートローダ２２のコードを消去することはない。これを容易にするために、ブートローダ２２は、領域０の他の部分とは別の専用フラッシュページに格納されていて、ブートローダ２２を含むページ以外の領域０をすべて消去するのが簡単にできることが好ましい。
【００５５】
図５に示すように、ブートローダ２２は、次に、新ファームウェアモジュール４０を領域１から領域０の該当アドレスにコピーする。
【００５６】
ブートローダ２２は、次に、（例えば、システムコールを介して）新ファームウェアモジュール４０の機能を呼び出して、無線でリモートの相手方デバイスに再接続するとともに新ソフトウェアアプリケーション４２の送信を要求するよう命令する。ブートローダ２２は、無線結合情報を新ファームウェアモジュール４０に渡してこれを実行することができるようにする。
【００５７】
図６に示すように、新ファームウェアモジュール４０は、新ソフトウェアアプリケーション４２を受信し始める。新ファームウェアモジュール４０は、一部の受信データを一時的にＲＡＭにバッファリングしてもよいが、（アプリケーションベクタテーブルを含む）新ソフトウェアアプリケーション４２を受信するとすぐに、フラッシュメモリ１３の領域１へ書き込みを開始する。領域１は、書き込みが開始される前に完全に消去されるか、または、必要に応じて、一度に一ページずつ消去されてもよい。完了すると、ブートローダ２２は、相手方デバイスから受信した、新ソフトウェアアプリケーション４２のチェックサムを検証する。チェックサムが正しくない場合、ブートローダ２２は、相手方デバイスによる新ソフトウェアアプリケーション４２の再送信を要求する。
【００５８】
マイクロコントローラ１が新ソフトウェアアプリケーション４２を受信している最中に（停電などで）予期せずリセットされた場合、ブートローダ２２で実行が再開されて、相手方デバイスに再び新ソフトウェアアプリケーション４２を要求するよう新ファームウェアモジュール４０に命令する。
【００５９】
新ソフトウェアアプリケーション４２のチェックサムが正しいと、ブートローダ２２は、マイクロコントローラ１が新ソフトウェアアプリケーション４２および新ファームウェアモジュール４０を通常のやり方で使用し始めることができるように、新ソフトウェアアプリケーション４２に制御権を渡す。
【００６０】
この構成では、ブートローダ２２は、必要に応じて結合情報を渡すことを含めて、更新を実行するために旧ファームウェアモジュールと新ファームウェアモジュールの適切な機能を呼び出すことと、予期しないリセットから回復することを担う。
【００６１】
別の一連の実施形態において、旧ファームウェアモジュール２３は、結合情報を保存することと、更新プロセスの状態を記憶することを担う。旧ファームウェアモジュール２３は、新ファームウェアモジュール４０を領域１に書き込み、それが正しく受信されたことを確認する。更新処理におけるブートローダ２２の主なまたは唯一のタスクは、新ファームウェアモジュール４０を領域１から領域０にコピーすることだけであってもよい。旧ソフトウェアアプリケーション２７が新ファームウェアモジュール４０によって完全に上書きされる前にマイクロコントローラ１が（停電などで）予期せずリセットされた場合、ブートローダ２２で実行が再開されても、旧ファームウェアモジュール２３に制御権を渡すだけである。旧ファームウェアモジュール２３は、新ファームウェアモジュール４０を最初から受信をやり直す必要があることを知ることができるように状態を維持し、メモリに格納された結合情報を用いて再び新ファームウェアモジュール２３を要求する。旧ファームウェアモジュール２３は、新ファームウェアモジュール４０がアクセスできるように、結合情報を適切なメモリ領域へ（例えば、ＲＡＭに、または、好ましくはフラッシュ内の永続性のあるデータ記憶域に）書き込む。
【００６２】
新ファームウェアモジュール４０が正しく受信されブートローダ２２によって領域０にコピーされると、ブートローダ２２は、新ファームウェアモジュール４０に制御権を渡す。新ファームウェアモジュール４０は、いつの時点で初めて処理を開始するのかが分かるように設定され、相手方デバイスに接続して新ソフトウェアアプリケーション４２を受信することによって対応する。旧ファームウェアモジュール２３は、それ以前に結合情報を適切なメモリ領域へ（例えば、ＲＡＭに、または、好ましくはフラッシュ内の永続性のあるデータ記憶域に）書き込み、新ファームウェアモジュール４０が相手方デバイスに再接続するためにそれにアクセスできるようにしておく必要がある。
【００６３】
あるいは、新ファームウェアモジュール４０は、新ソフトウェアアプリケーション４２を受信するために、同一のリモートデバイスまたは別のリモートデバイスと新たな結合情報を設定することができる。これは、新ファームウェアモジュール４０を受信した直後に行なわれてもよいし、時間的に遅れてもよい。
【図１】
2017504112.tif 000003
【図２】
2017504112.tif 000004
【図３】
2017504112.tif 000005
【図４】
2017504112.tif 000006
【図５】
2017504112.tif 000007
【図６】
2017504112.tif 000008
【国際調査報告】
2017504112.tif 000009
2017504112.tif 000010