JP2004005637A - インシステムプログラミングのための方法および構成 - Google Patents
インシステムプログラミングのための方法および構成 Download PDFInfo
- Publication number
- JP2004005637A JP2004005637A JP2003130523A JP2003130523A JP2004005637A JP 2004005637 A JP2004005637 A JP 2004005637A JP 2003130523 A JP2003130523 A JP 2003130523A JP 2003130523 A JP2003130523 A JP 2003130523A JP 2004005637 A JP2004005637 A JP 2004005637A
- Authority
- JP
- Japan
- Prior art keywords
- usb
- device memory
- programming
- request
- program data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
Abstract
【解決手段】方法は、USBバス上の第1のハードウェア構成を備えた少なくとも1つのデバイスを列挙するステップと、カスタムプロトコルに従いプログラミングコマンドとプログラムデータとをカプセル化してUSBパケットにするステップと、カプセル化されたプログラミングコマンドとプログラムデータとを含むUSBパケットをUSBバスを介して少なくとも1つのデバイスに送信するステップと、少なくとも1つのデバイスでのプログラミングコマンドとプログラムデータとの受信に応じてデバイスメモリの少なくとも一部をプログラムするステップとを含む。第1のハードウェア構成が定義する少なくとも1つのデバイスの少なくとも部分的な機能は、デバイスメモリがプログラムされる間維持される。
【選択図】 図6
Description
【背景】
この発明は、不揮発性メモリをプログラムすることに関し、より具体的には、ユニバーサルシリアルバス(USB)インターフェイスを用いて電気的消去可能な不揮発性メモリをプログラムするための方法および装置に関する。
【0002】
USBは急速に、低速から中速のパーソナルコンピュータ(PC)から周辺デバイスへの相互接続のためのデファクトバスインターフェイススタンダードとなっている。USBインターフェイスは、高速プリンタ、CD品質のオーディオプレイバック、および高解像度スキャナをサポートするのに十分なほど速い転送速度を達成する。USB拡張ハブによって、バスが多数のUSB対応デバイスを同時にサポートすることが可能となる。USBの機能および能力に関する詳細な情報は、ユニバーサルシリアルバス仕様書、改訂版2.0(2000年4月27日)から見つけられ得る。
【0003】
USBは、いくつかの理由から流行した。まず、たとえPCの電源が入っているときでも、USBデバイスは、いつでもバスに接続され得、この特徴は、通例、産業界では「プラグアンドプレイ」と呼ばれる。USBデバイスが接続されたことがPCによって検出されると、PCは自動的にデバイスに対して問合せをしてその能力および要件を知る。この情報を用いて、PCは次に、デバイスのドライバをオペレーティングシステムへと自動的にロードする。後に、デバイスがバスから抜かれると、オペレーティングシステムは自動的にバスからデバイスを「ログオフ」し、そのドライバをシステムからアンロードする。
【0004】
USBインターフェイスの人気が高まりつつある別の理由は、バスに装着されるデバイスを適切に構成するためにDIPスイッチを手作業で設定し、ジャンパを挿入し、または構成プログラムをロードする必要性が、組込まれたプラグアンドプレイ能力によって解消されるためである。また、デバイスを今日の従来のシリアルおよびパラレルI/Oバスに接続したときに通常起こるハードウェアコンフリクト(たとえば、IRQ、DMA、メモリ、またはI/Oコンフリクト)が、USBに接続されるデバイスによって結果として生じることはない。
【0005】
USBデバイスは、デバイスの動作を制御する、内部に記憶されたソフトウェア(またはファームウェア)を備えて販売される。このファームウェアは、通例、インテル社(Intel Corporation)によって開発された人気のあるフラッシュメモリ等の不揮発性電気的消去可能なプログラマブルメモリに記憶される。USB対応デバイスを購入したユーザは、場合によっては、このファームウェアを改良バージョンまたはファームウェアパッチを用いてアップグレードする能力を必要とし得、このようなアップグレードはデバイス製造業者から入手可能である。
【0006】
これらのファームウェアのアップグレードは、いくつかのやり方で行なわれ得る。たとえば、ファームウェアがデバイス内の別個のメモリモジュール上に記憶されている場合、モジュールは、デバイスから除去され、ファームウェアの更新を含んだ新しいメモリモジュールと取換えられ得る。この手作業のアップグレード方法は、実行が困難かつ時間のかかるものであると同時に、アップグレードを行なうためにはデバイスの電源を切ることが通例必要とされるという不利な点を有する。また、この手作業の方法は、ファームウェアがデバイス内の専用メモリモジュール上に記憶されていることを必要とし、これは、デバイス内のメモリが非効率的に用いられることにつながるおそれがある。
【0007】
周辺デバイスにインストールされたファームウェアをアップグレードするためのより容易でより効率的な方法は、既存のデバイスI/Oバスを用いてファームウェアコードをアップグレードすることであった。この方法では、全ファームウェアプログラムが、まず消去され、次に新しいファームウェアコードによって上書きされ得るか、または当初インストールされたファームウェアの一部のみが対応のファームウェア「パッチ」で上書きされ得るかのいずれかである。
【0008】
代替的には、ハードウェアは、ファームウェアパッチが特別に確保されたシステムメモリ部分にインストールされ、次に特定のプログラム条件下で自動的に実行されてファームウェアのアップグレードを行なうことを可能にするように構成され得る。このような構成は、この出願と同じ譲受人に譲渡される「記憶されたプログラムを動的に修正するための方法および装置」(“Method and Apparatusfor Dynamically Modifying a Stored Program”)と題された同時係属米国特許出願第09/896,790号に記載される。
【0009】
既存のI/Oバスを用いてデバイスに記憶されたファームウェアコードをアップグレードするためには、ファームウェアアップグレードプロセスを制御および監督する転送プロトコルを開発することがまず必要とされる。一般に、ファームウェアをアップグレードするために用いられる各対応のI/Oバスタイプに対して、異なる転送プロトコルが開発されなければならない。
【0010】
USBの場合、USB対応デバイス内でファームウェアアップグレードを行なうための転送プロトコルが、USB作成者フォーラム(Implementors Forum)(USB−IF)によって提案された。このグループは、「デバイスファームウェアアップグレードのためのユニバーサルシリアルバスデバイスクラス仕様書」(“Universal Serial Bus Device Class Specification for Device Firmware Upgrade”)(バージョン1.0、1999年5月13日)と題された、その提案された転送プロトコルのための文献を発表した。この文献は、グループが提案したデバイスファームウェアアップグレード(DFU)機能をサポートできるUSBデバイスを実現するために提案された要件および仕様を記載する。
【0011】
提案されたDFU解決策についての欠点は、DFU動作と通常のランタイムアクティビティとの両者を並行して実行することは、USBデバイス内では可能ではないことである。提案された仕様書は、すべての通常のランタイムアクティビティがいずれのDFU(アップグレード)動作の持続時間中にも停止しなければならないとしている。したがって、この実現例は、ファームウェアアップグレードを行なうために、デバイスが、再列挙するか、またはその動作モードを変更することを必要とする。たとえば、提案された仕様書によると、ファームウェアアップグレード中は、プリンタはプリンタとして機能しないであろう。代わりに、プリンタは、DFU動作中はファームウェアプログラマーとして動作するであろう。これは、DFU提案書のもとでは、単一のエンドポイント(またはチャネル)のみがプログラミングホストとUSBデバイスとの間でアクティブであるという事実に少なくとも部分的に起因している。通例、再列挙は、デバイスがUSBバスから物理的に切断されることを必要とする。対照的に、以下で説明される技術は、ホストとUSBデバイスとの間でいくつかのエンドポイントを用いて、たとえデバイスファームウェアがプログラムまたは更新されている間も通常のデバイス動作を維持する。
【0012】
DFU提案書に記載されているメモリプログラミングの種類は、「インサーキット」プログラミングと呼ばれる。メモリは、その回路から取出されなくてもよいが、デバイスは、プログラミング段階中には、その通常モードでは動作しない。インサーキットプログラミングは、インシステムプログラミング(ここで説明される技術の特徴)と対比され、ここでは、デバイスはプログラミングプロセス中も(少なくとも部分的に)その通常動作モードで動作し続ける。デバイスファームウェアをインシステムでプログラムすることについての別の重要な利点は、その動作中にデバイスと通信するために用いられるホストデバイスドライバは、ファームウェアがプログラムされている間アンインストールされなくてもよく、さらにはプログラミングプロセスが終了したときに再インストールされなくてもよいことである。デバイスドライバをアンインストールし、さらには再インストールしなくてもよいことによって、時間およびホストシステムリソースが節約される。
【0013】
USBデバイス内でファームウェアアップグレードを行なうことについての問題は、全く異なった様態でもアプローチされた。たとえば、サイプレス半導体(Cypress Semiconductor)は「EZ−USB」と呼ばれる解決策を提供し、これは、USBデバイス自体の中でのプログラムおよびデータ記憶のための内部マイクロプロセッサおよび内部ランダムアクセスメモリ(RAM)を含む。他のUSBデバイス内で用いられる不揮発性メモリではなく、デバイスファームウェアを記憶するために揮発性RAMを用いることによって、EZ−USB製品は、いわゆる「ソフトソリューション」製品となる。通常の動作中、USBホスト(たとえば、PC)は、デバイス内部のマイクロプロセッサへのプログラム命令のダウンロード、およびUSBバスを介してのデバイス内部のRAMへのデバイス「パーソナリティ」ファームウェアのダウンロードを開始し得る。ダウンロードが完了した後、EZ−USBデバイスは、ダウンロードされたパーソナリティファームウェアによって定義された、新しくカスタマイズされたデバイスとしてPCに再接続される。
【0014】
この解決策は、デバイス動作中いつでもUSBインターフェイスを介して新しいファームウェアをダウンロードする能力を実際に提供するが、この解決策にはいくつかの欠点がある。第1に、ある他の形の不揮発性メモリの代わりにRAM内にファームウェアが記憶されるため、動作中にデバイスへの電力が誤って切断されると、ファームウェアは損失する。ファームウェアの損失は、バスによって電力供給されるデバイスにおいてデバイスがUSBインターフェイスから誤って切断されたときにも起こり得る。第2に、ファームウェアダウンロードがPCホストによって開始される度に、EZ−USBデバイスはまず、ダウンロードが完了したときにホストから切断されなければならず、次に、アップグレードされたデバイスがその新しい構成で用いられ得る前に、ホストによって再接続(または、いわゆる再列挙)されなければならない。この限界によって、ユーザがファームウェアアップグレード中にデバイスを用いることができなくなる。
【0015】
【特許文献1】
米国特許出願第09/896,790号明細書
【0016】
【非特許文献1】
ユニバーサルシリアルバス仕様書、改訂版2.0、2000年4月27日
【0017】
【非特許文献2】
「デバイスファームウェアアップグレードのためのユニバーサルシリアルバスデバイスクラス仕様書」、バージョン1.0、USB作成者フォーラム(USB−IF)、1999年5月13日
【0018】
【概要】
したがって、USBデバイスのメモリ内に記憶されるファームウェアを迅速かつ容易に更新するための解決策が必要とされる。
【0019】
これらの必要性に対処するために、出願人は、USBインターフェイスを用いて不揮発性プログラマブル電気的消去可能なメモリをプログラムするための特定の方法および装置を発明した。1つの局面に従うと、USBインターフェイスを用いての不揮発性プログラマブル電気的消去可能なデバイスメモリのインシステムプログラミングのための方法が提供され、この方法は、USBバス上の、第1のハードウェア構成を備えた少なくとも1つのデバイスを列挙するステップと、カスタムプロトコルに従ってプログラミングコマンドおよびプログラムデータをカプセル化してUSBパケットにするステップと、カプセル化されたプログラミングコマンドおよびプログラムデータを含むUSBパケットをUSBバスを介して少なくとも1つのデバイスに送信するステップと、少なくとも1つのデバイスでプログラミングコマンドおよびプログラムデータを受信したことに応答して、デバイスメモリの少なくとも一部をプログラムするステップとを含む。第1のハードウェア構成によって定義されるような少なくとも1つのデバイスの少なくとも部分的な機能は、デバイスメモリがプログラムされている間、維持される。
【0020】
関連の局面に従うと、方法はさらに、少なくとも1つのデバイスで第1のプログラミングコマンドを受信したことに応答して、少なくとも1つのデバイスの第1のハードウェア構成を少なくとも部分的に変更するステップと、デバイスメモリの一部に記憶されたコードモジュールの複数の制御機能のうちの少なくとも1つをRAMにロードするステップと、少なくとも1つのデバイスで受信されるプログラミングコマンドおよびプログラムデータを用いてRAMからの少なくとも1つの制御機能を実行してデバイスメモリをプログラムするステップと、デバイスメモリがプログラムされた後、少なくとも1つのデバイスで第2のプログラミングコマンドを受信したことに応答して、デバイスのハードウェア構成を第1のハードウェア構成へと復元するステップとを含む。
【0021】
別の関連の局面に従うと、コードモジュールは少なくとも、USBバスを介して送信されるプログラミングコマンドの処理を管理するためのメインループ機能と、USBパケットをUSBバスを介して転送するためのパケット交換機能と、カスタムプロトコルに従ってプログラミングコマンドおよびプログラムデータをカプセル化してUSBパケットにし、USBパケットからプログラミングコマンドおよびプログラムデータを抽出するためのベンダーリクエスト機能と、デバイスメモリの少なくとも一部に記憶された情報を消去するための消去機能と、ベンダーリクエスト機能によってUSBパケットから抽出されたプログラムデータをデバイスメモリの少なくとも一部に書込むための書込機能と、デバイスメモリの少なくとも一部に記憶されたプログラム情報を読出すための読出機能とを含む。
【0022】
さらなる別の関連の局面に従うと、方法はさらに、第1のプログラミングコマンドを受信したことに応答して第1のハードウェア構成に関連する割込をディセーブルにするステップと、第1のハードウェア構成に関連した割込を処理するための割込ベクトルテーブルをRAMにコピーするステップと、第1のハードウェア構成に関連した割込がRAMから処理されることを可能にするステップとを含む。
【0023】
さらなる別の関連の局面に従うと、方法はさらに、少なくとも1つのデバイスで第3のプログラミングコマンドを受信したことに応答して、プログラミングステップの前にデバイスメモリの少なくとも一部に記憶された情報を消去するステップを含む。デバイスメモリの少なくとも一部に記憶された情報を消去するステップは、第3のプログラミングコマンド内に含まれる情報から消去されるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断するステップと、デバイスメモリの一部に記憶された消去機能をRAMにロードするステップと、RAMからの消去機能を実行してデバイスメモリの少なくとも一部に記憶された情報を消去するステップと、デバイスメモリの少なくとも一部に記憶された情報の消去の完了時にUSBバスを介してステータス情報を送信するステップとを含む。
【0024】
さらなる別の関連の局面に従うと、方法はさらに、少なくとも1つのデバイスで第4のプログラミングコマンドを受信したことに応答して、プログラミングステップの後にデバイスメモリの少なくとも一部に記憶された情報を読出すステップを含む。デバイスメモリの少なくとも一部に記憶された情報を読出すステップは、第4のプログラミングコマンド内に含まれる情報から読出されるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断するステップと、デバイスメモリの一部に記憶された読出機能をRAMにロードするステップと、RAMからの読出機能を実行してデバイスメモリの少なくとも一部に記憶された情報を読出し、読出した情報をUSBバスを介して送信するステップと、デバイスメモリの少なくとも一部に記憶された情報の読出および送信の完了時にUSBバスを介してステータス情報を送信するステップとを含む。
【0025】
さらなる別の関連の局面に従うと、方法はさらに、デバイスメモリの少なくとも一部から読出された情報を検証して情報が適切にデバイスメモリにプログラムされているかを判断するステップと、検証ステップで無効であると判断された情報をデバイスメモリの少なくとも一部へ再プログラムするステップとを含む。デバイスメモリの少なくとも一部をプログラムするステップは、プログラミングコマンド内に含まれる情報からプログラムされるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断するステップと、RAMバッファの1つが一杯になり、プログラムデータが受信されなくなるまで、USBバスを介してRAMバッファへと送信されるプログラムデータを受信するステップと、デバイスメモリの一部に記憶されたプログラムデータ機能をRAMにロードするステップと、RAMからのプログラムデータ機能を実行して受信したプログラムデータをデバイスメモリの少なくとも一部に記憶するステップと、RAMバッファが一杯であり、かつ追加のプログラムデータが依然としてデバイスメモリに記憶されるべきとき、プログラムデータを受信するステップとプログラムデータ機能を実行するステップとを繰返すステップと、デバイスメモリの少なくとも一部へのプログラムデータの記憶の完了時にUSBバスを介してステータス情報を送信するステップとを含む。
【0026】
さらなる別の関連の局面に従うと、方法はさらに、USBバス上の、各々がそれぞれの第1のハードウェア構成を備えた多数のUSBデバイスを列挙するステップと、USBバス上で列挙されるデバイスの各々へとUSBバスを介して送信されるプログラミングコマンドおよびプログラムデータのフローを制御してそれぞれのデバイスの各々の中に含まれるデバイスメモリの少なくとも一部の同時プログラミングを管理するステップとを含む。
【0027】
さらなる別の関連の局面に従うと、複数のエンドポイントが用いられて、カスタムプロトコルに従ってカプセル化されてUSBパケットになる情報をUSBバスを介して交換し、エンドポイントは、カプセル化されたプログラミングコマンドを有するUSBパケットを交換するための制御エンドポイントと、カプセル化されたプログラムデータを有するUSBパケットを少なくとも1つのデバイスに送信するためのバルクINチャネルとカプセル化されたプログラムデータを有するUSBパケットを少なくとも1つのデバイスからUSBバスを介して送信するためのバルクOUTチャネルとを有するバルクエンドポイントと、カプセル化されたステータス情報を有するUSBパケットを少なくとも1つのデバイスからUSBバスを介して送信するための割込INエンドポイントとを含む。
【0028】
さらなる別の関連の局面に従うと、カスタムプロトコルに従ってカプセル化されてUSBパケットになり、さらにはUSBバスを介して交換される情報は、リクエストタイプフィールド、リクエスト識別子フィールド、リクエスト値フィールド、データフィールド、データ長フィールド、およびアドレス指標フィールドに記憶される情報を含む。
【0029】
さらなる別の関連の局面に従うと、リクエストタイプフィールドに記憶される情報は、標準タイプリクエスト、クラスタイプリクエスト、およびベンダータイプリクエストのうちの1つである。リクエストタイプフィールドに記憶される情報がベンダータイプリクエストならば、リクエスト識別子フィールドに記憶される情報は、少なくとも消去リクエスト、デバイスメモリ書込リクエスト、デバイスメモリ読出リクエスト、check_idリクエスト、get_device_infoリクエスト、RAM読出リクエスト、RAM書込リクエスト、およびジャンプツーファンクションリクエストのうちの1つを含む。
【0030】
「含む」および「含んでいる」という表現は、この明細書および請求項において用いられるとき、述べられる特徴、ステップ、または構成要素の存在を特定していると解釈されるが、これらの表現を用いることによって、他の1つ以上の特徴、ステップ、構成要素、またはそれらのグループの存在または追加が排除されないことが強調されるべきである。
【0031】
この発明の上述および他の目的、特徴、および利点は、同じ参照番号が同様または同一の要素を識別する図とともに以下の詳細な説明を参照することにより、より明らかとなるであろう。
【0032】
[詳細な説明]
この発明の好ましい実施例が、添付の図を参照しながら以下で説明される。以下の説明では、不必要な詳細事項でこの発明を曖昧にしないために、周知の機能および/または構造は詳細に説明されない。さらに、用語「フラッシュ」メモリが詳細な説明全体を通して用いられ得るが、説明される技術は、USBインターフェイスを介していずれの種類の不揮発性プログラマブル電気的消去可能なメモリをプログラムすることにも同様に好適であることが理解されるであろう。
【0033】
好ましい実施例を詳細に説明する前に、USBプロトコルに関連したいくつかの基本的な概念をまず定義することが役立つだろう。これらの概念は、以下の通りである。
【0034】
・列挙(enumeration):デバイスが最初にホストPCに接続されたときに行なわれる検出および最初の通信である。概念上、列挙は、USBデバイスとホストPCとの間での発見段階として動作し、この間、どのようにして最適に互いと通信するべきかが判断される。
【0035】
・デバイスドライバ:PCアプリケーションが外部デバイス(たとえば、USBデバイス)と通信することを可能にするホストソフトウェアである。
【0036】
・構成:USB仕様は、デバイスが多数の構成または「フェース」を有することに備える。これらの構成は、性質上動的であり、デバイスが動作的である間に選択可能である。
【0037】
・NAK/ACK:パケット送信ステータスまたはUSBインターフェイスを介して受信されるべき新しいパケットのための利用可能な帯域幅を決定するために用いられるフロー制御トークンである。
【0038】
・DMA:ダイレクトメモリアクセスコントローラである。これは、通例、デバイスの異なるメモリ領域間での迅速なデータ転送を可能にするマイクロコントローラブロックである。
【0039】
・パケット:USBインターフェイスを介してPCと目標デバイスとの間で送信されるデータの集合である。
【0040】
・相対アドレス指定:絶対アドレス指定とは対照的に、相対アドレス指定は、通例((場所)、オフセット)の形である、可変ポインタを用いて行なわれる指標付けを用いる。
【0041】
・構造化アセンブラ:アセンブリコードを書込むときにプログラマーが「C」言語型構造体を用いることを可能にするマクロ言語である。
【0042】
・ベンダーリクエスト:ユーザがエンドポイントゼロ(EP0)を介して制御データをデバイスに渡すことを可能にするUSB標準リクエストバージョンである。再フラッシュ動作中のホストPCとデバイスとの間の通信の大部分は、これらのリクエストを用いて起こる。他の種類のUSBリクエストは、標準リクエストとクラスリクエストとの両方を含む。これらのさまざまな種類のリクエストのより詳細な説明については、USB仕様書を参照されたい。
【0043】
図1は、USBインターフェイスを用いてUSB互換のデバイスのファームウェアをプログラムするための好ましい技術のハイレベル概要を示すフローチャートである。技術は、ステップ101で開始し、デバイスは、既に列挙されており、その通常の動作を行なっているものとして示される(たとえば、デバイスは、プリンタ、カメラ、およびマイクロコントローラ等として動作している)。構成変更がステップ103で起こり、デバイスがファームウェア「再書込」モードに入らされる。構成変更は、ユーザ、デバイスドライバ、または他の方法による介入の結果として起こり得る。一旦構成が起こると、デバイスとホストPCとの間で転送されるデータおよびリクエストを適切に組立てる(フラッシュオーバーUSBまたは「FOUSB」プロトコルと呼ばれる)USBベースのプロトコルを用いてデバイスは書込まれ、読出され得る。
【0044】
情報のこの流れを管理するために、ステップ105で、デバイスは適切な制御プログラムをRAMにロードする。次に、デバイス内のプログラム実行は、RAM内の制御プログラムの場所へと「方向付け」され、制御が実行される。次にステップ107で、デバイスは、FOUSBプロトコルに従ってホストPCから受信されたコマンドを実行する。次に、ホストPCからのすべてのコマンドが実行されて所望のタスクが行なわれた後、デバイスは再びステップ109で変更構成コマンドを受信する。この第2の変更構成コマンドが用いられて、デバイスに制御プログラムの実行を停止するように指示し、プログラム実行をROMへと方向付けし直して通常のデバイス動作を再開する。
【0045】
重要なことに、制御プログラムの実行中、デバイスは、たとえばプリンタ、カメラ、およびマイクロコントローラ等として依然として列挙されたままである。すべてのデバイス機能が制御プログラムの実行中に利用可能であり得るわけではないが、少なくとも基本的なデバイス機能セットが依然として動作したままにされ得る。さらに、ユーザ、デバイスドライバ、または他の方法による制御プログラムの実行中の介入は、ホストPCによって検出され得、必要であれば、制御プログラムの実行が停止されて所望のタスクを実行する。
【0046】
好ましい実施例に従うと、以下の機能リストが、デバイスファームウェアのプログラミングおよび再プログラミングを行なうために少なくとも実現される。
【0047】
・(デバイス仕様書内で通例定義されている)特定のブロックまたは全メモリブロックの消去と、
・好ましくは1バイトほど小さい単位での全メモリのプログラミングと、
・メモリ内容の読出、および検証のためにそのデータをホストPCに戻すことと、
・特に、ファームウェアへの望ましくないアクセスを阻止するための(再び、デバイス仕様書内で通例定義される)ソフトウェアセキュリティ機能と、
・迅速な分析またはデバック能力のための、RAM領域の読出および書込のためのサポート機能とが実現される。
【0048】
特定のユーザ要件に対処するための他の機能が、必要であれば追加されてもよい。これらの機能は、適切な機能のための実行コードをメモリ内におき、DMAを用いてこれらをRAMに転送して実行することによって、追加され得る。
【0049】
図2は、ここで説明されるFOUSB技術をサポートするために用いられ得るRAMの例示的なメモリマップを示す。例示的なメモリマップは、再書込FOUSBプロセス中に用いられる変数を記憶するためのゼロページ領域201を含む。マップはさらに、フラッシュメモリをプログラムするために必要な機能を実行するRAMメインループ203を含む。これらの機能は、以下でより詳細に説明される。メモリマップはさらに、USB機能割込サブルーチン(ISR)205を含む。このサブルーチンは、FOUSBプロセス中に活動化される種々の割込を処理する。メモリマップはまた、ファームウェアプログラミングプロセスをサポートするために必要とされる種々の機能を行なうためのいくつかの実行コードモジュール207を含む。これらの機能のうちのいくつかが、以下でより詳細に説明される。
【0050】
図2で示されるメモリマップからわかるように、FOUSBプロセスをサポートするためのメモリ使用によって、全RAM領域のかなりの部分が必要とされ得る。しかし、RAM/SFRメモリ等の追加のメモリ、チェックID、および(以下で説明される)入来データバッファ領域209を必要とするFOUSB機能の多くは任意であるため、メモリ使用量は減じられ得る。加えて、すべてのUSBプロトコルリクエストが実現され、RAMに記憶されるというわけでなくてもよい。プログラミングプロセスの開始前に、デバイスは既に列挙されたため、標準USBリクエストのうちのいくつかをサポートする追加のオーバーヘッドを加える必要はない。メモリマップの全レイアウトおよびここに含まれる機能の相対的なサイズは、単なる例示にすぎず、この発明の思想から逸脱することなく、マップ構造の変形例が作られ得ることが理解されるであろう。
【0051】
ここで説明されるインシステムFOUSBプログラミング技術に関連した重要な概念は、フラッシュメモリをプログラムする間にRAM記憶場所へと方向付けする(または実行を切換える)割込の使用である。例示的な実施例に従うと、割込ベクトル化機能をサポートするために、特別なモードレジスタビットが設定される。モードレジスタビットが設定されると、新しい割込ベクトルセットが、元のベクトルテーブルの「後ろ」にあるRAM領域にコピーおよび転送される。このRAM領域211は、図2で示されるメモリマップの底部に示される。
【0052】
RAM領域211は、好ましくは、ベクトルテーブルのコピーを保持するのに十分なほど大きくなるように設計される。RAM領域211は、データが記憶されるミラーメモリ領域になるようにセットアップされ得る。活動時には、デバイスROM内に記憶されるベクトルアドレスを用いるファームウェアではなく、この新しいRAM領域211が、RAM内の他の場所(たとえば、適切な制御プログラムが記憶される場所)への新しい割込ポインタ場所の方向付けをサポートする活動中の方向付け領域となる。この様態でRAM領域211を用いることについての有利な点は、実行中にRAMメインループ203が特定のROM割込ビットをポーリングする必要がないことであり、したがって、ループがペンディングリクエストにより応答することが可能となる。
【0053】
この発明の例示的な実施例による割込方向付けは、以下のように動作する。通常のデバイスの起動後、元のデバイス割込ベクトルがデバイスROM内に置かれる。セットアップ前に生成される第2のテーブルも、ROMスペースに記憶される。この第2のテーブルは、RAMからの割込を処理することが望まれる度に、たとえば、特別なモードレジスタビットが設定される度に、一時的なRAMスペース209にロードされる。このビットを設定することによって、USBインターフェイスを介してプログラムされている間に、デバイス動作中にデバイスによってRAM領域211がアクセスおよび書込まれることが可能となる。一時的なRAMスペース209にロードされる第2のテーブルは次に、RAM領域211に書込まれ、用いられて、プログラミングプロセス中に開始される割込サービスルーチンのために他のRAM領域へと方向付けし得る。代替的には、特別なモードレジスタビットが設定されているとき、第2のテーブルは直接RAM領域211に記憶され得る。
【0054】
説明されるFOUSBプロセスの別の重要な局面は、構成を変更するという概念を含む。上述のように、そうすることによって、USBケーブルを抜かなくても、またはデバイスを再起動しなくても、その「フェース」(または動作)を流れの中ほどで変更する能力がデバイスに与えられる。デバイスの構成を変更することは、USBプロトコル規格で実現される、予め定められた標準リクエストタイプセットの機能である。デバイスの構成を変更するために用いられるリクエストタイプは、“Set_Configuration”リクエストである。リクエストは、EP0制御エンドポイント401を介してUSBパケットでホストPCからデバイスへと伝達される。変更構成コマンドのための標準的なリクエストタイプ定義が、図3に示される。
【0055】
図3に示される変更構成コマンドのための標準的なリクエストタイプ定義は、すべてのUSB標準リクエスト、クラスリクエスト、またはベンダータイプリクエストによく見られる。定義はbmRequesttypeフィールド301を含み、これは、この場合、16進値0x00に設定され、リクエストタイプが標準的なUSBリクエストであることを表わす。bRequestフィールド303がさらに、特定のタイプのリクエストを定義する。この例では、特定のリクエストは、デバイスの構成を変更するために用いられる“Set_Configuration”リクエストである。wValueフィールド305を用いて、転送されている特定のリクエストに関連したデバイスまたはホストPCが用いる値が記憶され得る。この例では、wValueフィールド305は、構成値(Config Value)であって(たとえば、例としてプリンタからスキャナへのデバイス動作の変更を実行するために)デバイスがそれへと変更される構成値(Config Value)を記憶する。wValueフィールド305に記憶される値は、転送されている特定のリクエストに応じて、ゼロでもあり得る。
【0056】
リクエスト定義内の次のフィールドは、wIndexフィールド307である。このフィールドを用いて、特定のリクエストを実行するときにデータが読出されるか、または書込まれるべき記憶場所を記憶する。したがって、wIndexフィールド307は、転送される特定のリクエストに応じて、読出アドレスまたは書込アドレスのいずれかを記憶する。wLengthフィールド309が、転送されるべきデータブロックの長さを定義する。この値は、示される例でのように、特定のリクエストに応じてゼロであってもよい。最終的に、リクエスト定義は、リクエストによって転送されているデータのタイプを定義するデータフィールド311を含む。このフィールドは、示される例でのように、特定のリクエストを実行するときにデータが交換されない場合には値「なし」を保持し得る。
【0057】
USB周辺デバイスに関連した識別子テーブル内に変更構成リクエストのための定義を含むことが有利であり得る。これによって、列挙時にデバイスがリクエスト定義をホストPCに送信することが可能となる。リクエスト定義は、構成に含まれるべきエンドポイント識別子およびデバイス独自のインターフェイスを含み得る。ホストPCは、今後の参照のために列挙時にこれらのリクエスト定義を解釈およびログし得る。これによって、デバイス構成を変更するときにホストPCがエンドポイントサイズおよび機能を再び定義することが可能となる。エンドポイント定義および利用については、さらに詳細に説明される。
【0058】
上述のように、ここで説明されるFOUSB技術を用いてのフラッシュメモリのプログラミングは、いくつかのエンドポイントの使用および/または再構成を採用する。好ましい実施例では、ホストPCとUSBデバイスとの間で情報を転送するための3つのエンドポイントが定義される。エンドポイントは、ホストPCとUSB周辺デバイスとの間に存在し得る通信チャネルである。USB規格は、標準的なUSBプロトコルを用いて通信するための5つのエンドポイントを定義する。
【0059】
図4は、フラッシュプログラミングプロセスに関連した3つのエンドポイントを例示および定義する。第1のエンドポイント401は、上述のようなEP0制御エンドポイント401である。このエンドポイントを用いて、制御情報(たとえば、変更構成リクエスト)をホストPC407とUSBデバイス(図示せず)との間で転送する。第2のエンドポイント403を用いて、オンボードフラッシュメモリをプログラムするためのデータが転送される。エンドポイントは、2つのサブエンドポイント、BULK INエンドポイント403AとBULK OUTエンドポイント403Bとに論理的に分けられる。サブエンドポイントBULK IN403AとBULK OUT403Bとを用いてそれぞれ、オンボードフラッシュメモリに記憶されたデータを検証のためにUSBデバイスからホストPC407へと送信し、データをプログラミングのためにホストPCからUSBデバイスへと送信する。割込IN405と呼ばれる第3のエンドポイントを用いて、USBデバイスからホストPC407へとステータス情報が渡される。
【0060】
Set_Configurationリクエストを用いてデバイスの構成が変更されると、ホストPCとUSBデバイスとの間の前の転送モード(つまり、エンドポイント定義)が潜在的に変更される。前のインターフェイスに関連したいずれのデータ送信も完了させてから新しい構成のためのエンドポイント定義が確立されることが好まれる。たとえば、デバイスがプリンタとして構成され、Set_Configurationリクエストが受信されたときにページがプリントされている場合、データ損失を防ぐために、デバイスは、そのエンドポイントを再構成する前に、そのプリント動作を終了すべきである。データの安全保護は、(たとえば、ホストPCのそばの)ドライバ側とエンドポイントインターフェイスのデバイス側との両方の上で対処されるべきである。したがって、PCドライバは、構成変更リクエストをデバイスに送信する前に、いずれのペンディングリクエストも終了させる責任があるべきであり、デバイスは、変更リクエストが受信されても、そのエンドポイントを再構成する前にいずれのデータ転送動作も終了させるべきである。デバイス内のエンドポイントサイズおよび構成レジスタへのシンプルな再書込が、通例、エンドポイントインターフェイスの再構成に必要とされるすべてである。
【0061】
以下の段落では、FOUSBプロセス内に含まれる主な制御機能のうちのいくつかが詳細に説明される。これらの機能は、1)初期化、2)ファームウェア消去、3)ファームウェアプログラミング、4)ファームウェア検証、および5)再構成を含む。SFR/RAM領域の読出およびセキュリティチェックの実行等の他のサポート機能は、FOUSBプロセス内に含まれ得る。
【0062】
しかし、主な制御機能を詳細に考察する前に、まずデバイス起動手順を考察することが役立つだろう。ここで説明されるプログラミング技術の重要な特徴は、プログラミングプロセス中、周辺デバイスがその主要な機能として、たとえば、プリンタまたはスキャナとしてUSBコアを使い続けることであることを思い出されたい。したがって、USBコアの電源が投入され、プログラミングプロセスを開始する前にデバイスがバス上で列挙されることが必要である。
【0063】
典型的なデバイス起動シーケンスは、以下のステップを含み得る。
・デバイスリセット−デバイス内のすべての周辺ブロックがディセーブルにされる。
【0064】
・初期起動−変数が初期化され、レジスタが設定され、他のいずれかの必要な起動手順が実行される。
【0065】
・USBコアのイネーブル−ホストPCとデバイスとの両方が安定化され得、エンドポイントが初期化される。
【0066】
この時点では、割込がデバイス内でイネーブルされる。USBケーブルがデバイス間で接続されると、列挙プロセスが始まる。列挙の間、デバイスは、ホストPCにその能力および必要とされる転送タイプを知らせる。また、デバイスドライバローディングがホストPC内で起こり、ホストPCとデバイスとの間で必要とされるいずれかの初期通信がこの時点で行なわれる。この段階では、デバイスは、その「ベース構成」にあると言われるようなその通常動作を行ない、たとえば、デバイスはプリンタ、スキャナ等として動作する。
【0067】
一旦そのベース構成内に入ると、デバイスファームウェアは、説明されるFOUSBプログラミング手順に従ってUSBインターフェイスを用いてプログラムされるか、またはインシステムで更新され得る。フラッシュメモリのインシステムプログラミングを実行するときの第1の段階は、初期化段階である。初期化において実行されるステップは、図5で示されるフローチャートで詳細に説明される。
【0068】
初期化プロセスはステップ501で始まり、Set_ConfigurationリクエストがホストPCからデバイスへとエンドポイントゼロ401を介して送信され、デバイス内でのエンドポイント再構成を要求する。この時点では、現在のエンドポイントインターフェイス上で起こっているいずれのデータ転送も完了され、さらなるデータ転送は停止されて構成変更中の情報損失のおそれを防ぐ。次に、デバイスは、要求された構成変更を実行し、次に、適切なステータスビットを割込INエンドポイント405を介して設定して、ホストPCにモード変更がうまく行なわれたことを知らせる。リクエストを完了した後、デバイス内の割込が一時的にディセーブルされる。
【0069】
次に、ステップ503で、デバイスは、DMAを用いて実行のために既存の機能をROMからRAMへと転送する機能を実行する。これらの転送の完了時に、初期化プロセスはステップ505に進み、ROMベクトルテーブルのコピーが一時的なRAM領域209にコピーされる。次に、テーブルはRAM領域211にコピーされ、特別なモードレジスタビットが設定されてデータがRAM領域211に書込まれることが可能となり、再び、メモリを再フラッシュする間にデバイスからの割込が再び処理され得る。次に、ステップ507で、プログラム実行はRAMメインループ203へとジャンプし、ここから、フラッシュメモリのプログラミングを行なうためのすべてのさらなるコード実行が行なわれる。初期化プロセスは、モードレジスタ内に含まれるCPU再書込ビットの設定とともにステップ509で終了する。この段階では、デバイスは、ホストPCからコマンドを受入れてそのオンボードメモリをプログラムまたは更新する準備ができている。
【0070】
オンボードメモリのプログラミングが開始し得る前に、新しいデータでプログラムされるであろうファームウェアメモリのこれらの領域がまず消去されなければならない。例示的な消去動作が図6で示されるフローチャート内で詳細に説明される。プロセスはステップ601で始まり、消去コマンドがEP0を介してベンダーリクエストによってデバイスに送信される。典型的には、ユーザまたはデバイスドライバのいずれかが、制御データパケットで渡される制御コードによってどのメモリブロックを消去すべきかを選択する。次に、ステップ603で、デバイスは、受信されたベンダーリクエストに基づいて消去されるべきファームウェアメモリ内のこれらのブロックを識別する。消去フラグがセットされ、制御権がRAMメインループ203に渡される。ステップ605では、RAMメインループ203が、図2に示されるRAM消去機能207を呼出す。次に、RAM消去制御機能207が、ステップ607で実行され、どのメモリブロックが消去されるべきかに基づいて、適切なコマンドを発行する。消去動作の完了後、ステップ609で、デバイスは、割込INエンドポイント405を介してホストPCにステータス情報を戻す。次に、ステップ613で、制御権がRAMメインループ203に戻される。
【0071】
一旦消去されると、オンボードメモリは、新しいファームウェアデータでプログラムされる準備ができている。プログラミング段階は、好ましくは、2つのステッププロセスとして実行され、データが、まずRAMにダウンロードされ、次に適切なファームウェア記憶場所へプログラムされる。この2つのステップのプロセスをサポートするために、図2に示されるメモリマップは、好ましくは、デバイスオンボードメモリへの最終的な転送の前にプログラムデータが記憶されるバッファ領域209を含む。
【0072】
オンボードメモリをプログラムするための例示的なプロセスが、図7のフローチャートで示される。プロセスはステップ701で始まり、プログラムコマンドがホストPCによって発行される。コマンドは、図3で示される構造と同様のリクエスト定義構造を有するベンダーリクエストでデバイスに伝達される。リクエストを搬送するUSBデータパケットが、EP0を介してデバイスに送信され、プログラムデータが書込まれるべき開始アドレスと、オンボードメモリにプログラムされるべきデータの量を特定する情報との両方とともに組込まれる。次に、ステップ703で、制御権が、デバイス内のデータポインタをリセットするルーチンに渡され、次に、受信されるベンダーリクエストパケット内に含まれる開始アドレスおよびサイズ情報をポインタにロードする。次に、ステップ705で、制御権がRAMメインループ203に戻され、この時点で、メインループは、データがBULK OUTエンドポイント403B上で受信されるのを待つ。
【0073】
プログラムデータがBULK OUTエンドポイント403B上で受信されると、ステップ707で、制御権が別のルーチンに渡され、これが、受信されたUSBパケットからデータを抽出する。プログラムデータは、好ましくは、バッファ領域209に一時的に記憶され、後にオンボードメモリへとプログラミングされる。ステップ709では、バッファ209が一杯になるまで、または転送されるべきデータがなくなるまで、データはバッファ209にロードされ続ける。
【0074】
バッファ209は一杯ではあるが、さらなるデータが依然としてオンボードメモリにプログラムされるべき場合、ホストPCからのさらなるデータ送信は、割込INエンドポイント405を介してNAKフロー制御トークンを送信することにより、デバイスによって一時的に拒否される。追加のプログラムデータを含んだ、受入れられないパケットは損失せず、ホストPCはパケットをデバイスに順番に再送信し続け、これは、割込INエンドポイント405を介して送信されるACKフロー制御トークンによって、デバイスが、成功したデータ受信を再び通知するまで行なわれる。バッファ209が一杯になったとき、またはデバイスに転送されるべきプログラムデータが存在しないとき、ステップ711において、データ抽出ルーチンは、プログラムフラグをセットして、データがオンボードメモリにプログラムされる準備ができていることを表わし、次に、制御権をRAMメインループ203に戻す。
【0075】
プログラムフラグがセットされたことに応答して、ステップ713において、RAMメインループ203は、オンボードメモリをプログラムするためのルーチンを呼出す。ステップ715で、プログラムルーチンは、デバイス仕様に従ってデータをオンボードメモリに書込む。書込まれるプログラムデータブロックのサイズおよび開始アドレスを保持するデータポインタが減分され、チェックが行なわれていつプログラミングプロセスが完了するかが判断される。バッファ領域209が空になると、プログラム動作は、ステップ717またはステップ719のいずれかにおいて停止する。ステップ719で、プログラムルーチンは、さらなるデータがオンボードメモリにプログラムされるために残っているかを判断する。さらなるデータが残っているならば、ステップ705で、制御権はRAMメインループ203に戻され、ここで、ループは、さらなるデータがBULK OUTエンドポイント403Bに到着するのを待つ。プロセスステップ707から711が再び実行されて、バッファが再び一杯になるか、またはプログラムされるべきデータがなくなるまで、BULK OUTエンドポイント403B上で受信されるプログラムデータをバッファ領域209に記憶する。上述のように、プログラミングはステップ713から719において行なわれる。すべてのデータがオンボードメモリにプログラムされると、プログラムルーチンは、割込INエンドポイント405を介してステータス情報をホストPCに送信する。
【0076】
オンボードメモリに記憶されたプログラムデータを読出すための例示的な方法が図8で示される。プロセスはステップ801で始まり、デバイスは、EP0制御エンドポイント401を介して搬送されるUSBパケット内の読出コマンドを受信する。再び、読出コマンドは、図3で示されるものと同様の構造を有するベンダーリクエストとして送信される。リクエストは、wValue値およびwLength値を含み、これらはそれぞれ、プログラムが読出されるべきデバイス内の開始アドレスと、読出されるべきデータブロックのサイズとを定義する。これらの値は、USBパケットから抽出され、読出動作を行なうために用いられるデバイス内のポインタをロードするために用いられる。
【0077】
ポインタがうまくロードされると、ステップ803で、読出フラグがセットされ、RAMメインループ203は、プログラムデータを読出すための適切なルーチンを呼出す。ステップ805で、読出ルーチンは、BULK INエンドポイント403AのためのFIFOレジスタに読出プログラムデータを置き、ホストPCに転送し返す。転送が完了すると、適切なステータス情報が割込INエンドポイント405を介してホストPCに送信される。次に、ステップ807で、制御権がRAMメインループ203に戻される。
【0078】
オンボードメモリにプログラムされたデータを検証するためのいくつかの方法が採用され得る。好ましい実施例に従うと、上述のように、プログラムされたデータがデバイスからホストPCへと読出された後、ホストPCは、読出されたデータをPC上に記憶されたプログラムデータのイメージと比較する。デバイスではなくホストPCに検証を行なわせることによって、検証プロセスが高速化し、簡素化される。読出されたデータ内でエラーが検出された場合、エラーはホストPCによってトラップされ、オンボードメモリを再びプログラムしてデータエラーを訂正するなどの訂正動作が行われ得る。
【0079】
プログラムされたデータが一旦検証されると、デバイスは、プログラミングモードから戻るように再構成され得、その完全な通常動作を再開する。どのようにデバイスがプログラミングモードから戻るのかは、どれほどのオンボードメモリがプログラムされたのかに応じ得る。オンボードメモリのわずかな部分しかプログラムされていない場合、プログラミングモードから戻ることは、他のいずれかの種類の機能呼出から戻ることと同じほど簡素である。関連のステップは、以下を含み得る。すなわち、
・Set_ConfigurationリクエストをUSBパケットでデバイスに送信し、デバイスがその完全な通常動作に戻ることを要求するステップを含み、受信されたパケットは、パーズされるが、構成はUSBコアに転送されず、代わりに、リクエストがステータスステージで保持され、ステップはさらに、
・一時的にデバイス内の割込をディセーブルにするステップと、
・エンドポイントをそれらの元の構成に戻すステップと、
・デバイス内のCPU再書込機能をディセーブルにし、オンボードメモリが再びデバイスによって読出されることを可能にするステップと、
・RAM割込をディセーブルにし、割込方向付けをRAMから元のベクトルテーブルに戻すステップと、
・制御権をメインプログラムループに戻すようにRAMメインループ203に知らせるステップと、
・一旦メインプログラムループ内に入ると、Set_ConfigurationリクエストがUSBコアに転送されることを可能にし、デバイスが完全な通常動作を再開することを可能にするステップとを含み得る。
【0080】
プログラミングプロセスによって結果として、全オンボードメモリスペースが再プログラムされるならば、プログラミングモードから戻るときにデバイス内で問題が生じないことを確実にするために、特定の対策がとられるべきである。実行コードがもはや存在しないメモリ内の領域へと、または実行コードが正確ではない領域へとプログラム実行が戻る結果として、問題が起こるおそれがある。この問題に対処するためにいくつかのやり方が存在し、これらは、プログラミングプロセスが完了した後にデバイスをリセットすること、または、ことによると、決して変化しないメモリ内の固有の「立上げ」コード領域を保つことを含む。
【0081】
ここで説明されるFOUSBプログラミング技術は、1度にいくつかのUSBデバイスの並行プログラミングを行うことができるUSBの多デバイス連結性能力と組合せられてもよい。このような構成は、図9で示される。構成は、マルチFOUSBプログラムを実行するホストPC901を含む。このプログラムは、消去−プログラム−検証コマンドを、上述のようにプログラムされるべきデバイス907の各々に送信する。ホストPC901は、USBホスト903に接続されてFOUSBコマンドをデバイス907に送り得るか、またはUSBホスト機能がホストPC901自体の中に含まれ得る。USBホスト903は、ホストPC901とデバイス907との間で共有される通信および帯域幅を管理する。シリアルプログラミングプロトコルを採用する従来のマルチプログラマーシステムは、非効率的なことには、プログラムされているデバイスがそれら自身でこれらのタスクを管理することを必要とする。USBホスト903はさらにUSBハブ905に接続され、これは、次に、専用のUSB接続をプログラムされるべきデバイス907の各々に提供する。
【0082】
デバイス907がUSBハブ905に接続されると、上述のように、それらは、自動的にホストPC901と列挙通信を開始する。一旦新しいデバイス907がバス上で活動状態になると、デバイスドライバがホストPC901内でロードされ、マルチFOUSBプログラムには、新しいデバイスがそのUSBバスに接続されたことが知らされる。次に、プログラムは、消去−プログラム−検証コマンドを新しく接続されたデバイスに送信する。好ましくは、各デバイス内のUSBブートコードは同じである。これによって、ホストPC901オペレーティングシステムが同じデバイスドライバに結合され、新しいデバイスが列挙プロセスを開始するたびに、ドライバの別の「インスタンス」を生成する。マルチFOUSBプログラムは、「新しいドライバ」が接続されたことが知らされるが、同じデバイスドライバのインスタンスを区別する能力を有する。これによって、プログラムが異なるデバイス間で別々に別個の通信を維持することが可能となり、したがって、多数のデバイスが同じドライバを用いてプログラムされることが効率的に可能となる。
【0083】
プログラムされている各デバイスは独立してホストPC901と通信しているため、多数のチップが一度にプログラムされ得る。通信の性質の結果として、帯域幅はUSBバス上で共有される。バスを介して新しいプログラムデータを受信するデバイスは、バスを介して追加の情報を要求する前に、まずこのデータをそれらのそれぞれのオンボードメモリにプログラムしなければならない。これらのプログラミング時間中、他のデバイスはUSBバスにアクセスできる。USBホスト903も、バスを介して情報を要求する接続されたデバイスの各々上の帯域幅を均等にタイムシェアすることができる。
【0084】
上述のように、デバイス907はインシステムでプログラムされ得るか、または、別個の多デバイスプログラマー909が、デバイス907を同時にプログラムするタスクのために特別に設けられ得る。多デバイスプログラマー909は、好ましくは、プログラムされるべきデバイス907を保持するためのソケット911およびUSBハブ905の機能を含む。ソケット911は、「クラムシェル」タイプであり得、好ましくは、コネクタカバーを閉じたとき、コネクタ内にあるデバイスが自動的にUSBホスト903に対して列挙し始めるように、構成される。このような構成でのデバイス907は、「インサーキット」でプログラムされているため、デバイス907とホストPC901との間でのさらなるハードウェアインタラクションは必要とされない。
【0085】
上述の方法ステップは、好適なプロセッサが実行するソフトウェア、または特定用途向け集積回路(ASIC)等のハードウェアのいずれかによって、容易に実現され得ることが理解されるであろう。
【0086】
この発明の種々の局面が、いくつかの例示的な実施例に関連して説明されてきた。この発明の理解を促すために、この発明の多くの局面が、コンピュータシステムの要素によって実行され得る動作シーケンスに関連して説明された。たとえば、各実施例において、種々の動作は、特化された回路(たとえば、特化された機能を実行するために相互接続された別個の論理ゲート)によって、1つ以上のプロセッサが実行しているプログラム命令によって、または両方の組合せによって、実行され得ることが理解されるであろう。
【0087】
さらに、ここで説明される技術をプロセッサに実行させるであろう適切なコンピュータ命令セットを記憶したいずれかの形のコンピュータ読出可能な記憶媒体内に、この発明を全面的に組み入れることもさらに考慮され得る。したがって、この発明の種々の局面が、多くの異なる形で具体化され得、このようなすべての形がこの発明の範囲内にあると企図される。この発明の種々の局面の各々に関して、このような形の実施例のいずれも、説明された動作を「行なうように構成された論理」とここで呼ばれ得るか、または代わりに、説明された動作を「行なう論理」と呼ばれ得る。
【0088】
出願人の発明の種々の実施例が説明されたが、これらの実施例は単なる例示にすぎず、他の多くの実施例が可能であることが当業者によって理解されるであろう。この発明の意図される範囲は、上の説明ではなく、前掲の請求項によって示され、請求項の範囲内に入るすべての変更例がここに包含されることが意図される。
【図面の簡単な説明】
【図1】USBインターフェイスを用いてUSB互換デバイスのファームウェアをプログラムするための技術のハイレベル概要を示すフローチャートの図である。
【図2】ここで説明されるプログラミング技術をサポートするために用いられ得るRAMの例示的なメモリマップを示す図である。
【図3】すべてのUSB標準リクエスト、クラスリクエスト、またはベンダータイプリクエストに特有であるとされる変更構成コマンドのための標準的なリクエストタイプ定義を示す図である。
【図4】ここで説明されるフラッシュプログラミング技術に関連した3つのエンドポイントを例示および定義する図である。
【図5】フラッシュメモリのインシステムプログラミングのための説明される技術に関連した初期化段階で実行されるステップを例示するフローチャートの図である。
【図6】説明されるプログラミング技術で用いられる例示的な消去動作を例示するフローチャートの図である。
【図7】オンボードメモリをプログラムするための例示的なプロセスを示したフローチャートの図である。
【図8】オンボードメモリに記憶されたプログラムデータを読出すための例示的な方法を示したフローチャートの図である。
【図9】いくつかのUSBデバイスを一度に並行プログラミングすることに備えた構成を例示する図である。
【符号の説明】
901 FOUSBプログラム、903 USBホスト、907 デバイス。
Claims (33)
- USBインターフェイスを用いた不揮発性プログラマブル電気的消去可能なデバイスメモリのインシステムプログラミングのための方法であって、前記方法は、
USBバス上の、第1のハードウェア構成を備えた少なくとも1つのデバイスを列挙するステップと、
カスタムプロトコルに従ってプログラミングコマンドおよびプログラムデータをカプセル化してUSBパケットにするステップと、
カプセル化されたプログラミングコマンドおよびプログラムデータを含むUSBパケットをUSBバスを介して少なくとも1つのデバイスに送信するステップと、
少なくとも1つのデバイスでプログラミングコマンドおよびプログラムデータを受信したことに応答して、デバイスメモリの少なくとも一部をプログラムするステップとを含み、
第1のハードウェア構成によって定義されるような少なくとも1つのデバイスの少なくとも部分的な機能は、デバイスメモリがプログラムされている間、維持される、インシステムプログラミングのための方法。 - 少なくとも1つのデバイスで第1のプログラミングコマンドを受信したことに応答して、少なくとも1つのデバイスの第1のハードウェア構成を少なくとも部分的に変更するステップと、
デバイスメモリの一部に記憶されたコードモジュールの複数の制御機能のうちの少なくとも1つをRAMにロードするステップと、
少なくとも1つのデバイスで受信されるプログラミングコマンドおよびプログラムデータを用いてRAMからの少なくとも1つの制御機能を実行してデバイスメモリをプログラムするステップと、
デバイスメモリがプログラムされた後、少なくとも1つのデバイスで第2のプログラミングコマンドを受信することに応答して、デバイスのハードウェア構成を第1のハードウェア構成へと復元するステップとを含む、請求項1に記載の方法。 - コードモジュールは少なくとも、
USBバスを介して送信されるプログラミングコマンドの処理を管理するためのメインループ機能と、
USBバスを介してUSBパケットを転送するためのパケット交換機能と、
カスタムプロトコルに従って、プログラミングコマンドおよびプログラムデータをカプセル化してUSBパケットにし、プログラミングコマンドおよびプログラムデータをUSBパケットから抽出するためのベンダーリクエスト機能と、
デバイスメモリの少なくとも一部に記憶された情報を消去するための消去機能と、
ベンダーリクエスト機能によってUSBパケットから抽出されたプログラムデータをデバイスメモリの少なくとも一部に書込むための書込機能と、
デバイスメモリの少なくとも一部に記憶されたプログラム情報を読出すための読出機能とを含む、請求項2に記載の方法。 - 第1のプログラミングコマンドを受信したことに応答して、第1のハードウェア構成に関連した割込をディセーブルにするステップと、
第1のハードウェア構成に関連した割込を処理するための割込ベクトルテーブルをRAMにコピーするステップと、
第1のハードウェア構成に関連した割込がRAMから処理されることを可能にするステップとをさらに含む、請求項2に記載の方法。 - ダイレクトメモリアドレス指定を用いてデバイスメモリの一部に記憶された少なくとも1つの制御機能をRAMにロードする、請求項2に記載の方法。
- 少なくとも1つのデバイスで第3のプログラミングコマンドを受信したことに応答して、プログラミングステップの前にデバイスメモリの少なくとも一部に記憶された情報を消去するステップをさらに含む、請求項1に記載の方法。
- デバイスメモリの少なくとも一部に記憶された情報を消去するステップは、
第3のプログラミングコマンド内に含まれる情報から消去されるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断するステップと、
デバイスメモリの一部に記憶された消去機能をRAMにロードするステップと、
RAMからの消去機能を実行してデバイスメモリの少なくとも一部に記憶された情報を消去するステップと、
デバイスメモリの少なくとも一部に記憶された情報の消去の完了時にUSBバスを介してステータス情報を送信するステップとを含む、請求項6に記載の方法。 - 少なくとも1つのデバイスで第4のプログラミングコマンドを受信したことに応答してプログラミングステップの後にデバイスメモリの少なくとも一部に記憶された情報を読出すステップをさらに含む、請求項1に記載の方法。
- デバイスメモリの少なくとも一部に記憶された情報を読出すステップは、
第4のプログラミングコマンド内に含まれる情報から読出されるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断するステップと、
デバイスメモリの一部に記憶された読出機能をRAMにロードするステップと、
RAMからの読出機能を実行してデバイスメモリの少なくとも一部に記憶された情報を読出し、読出された情報をUSBバスを介して送信するステップと、
デバイスメモリの少なくとも一部に記憶された情報の読出および送信の完了時にUSBバスを介してステータス情報を送信するステップとを含む、請求項8に記載の方法。 - デバイスメモリの少なくとも一部から読出された情報を検証して情報がデバイスメモリへと適切にプログラムされているかを判断するステップと、
検証ステップで無効であると判断された情報をデバイスメモリの少なくとも一部へ再プログラムするステップとをさらに含む、請求項8に記載の方法。 - デバイスメモリの少なくとも一部をプログラムするステップは、
プログラミングコマンド内に含まれる情報からプログラムされるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断するステップと、
RAMバッファの1つが一杯になり、プログラムデータが受信されなくなるまで、USBバスを介してRAMバッファへと送信されるプログラムデータを受信するステップと、
デバイスメモリの一部に記憶されたプログラムデータ機能をRAMにロードするステップと、
RAMからのプログラムデータ機能を実行して受信されたプログラムデータをデバイスメモリの少なくとも一部に記憶するステップと、
RAMバッファが一杯であり、追加のプログラムデータが依然としてデバイスメモリに記憶されるべきとき、プログラムデータを受信するステップとプログラムデータ機能を実行するステップとを繰返すステップと、
デバイスメモリの少なくとも一部に対するプログラムデータの記憶の完了時にUSBバスを介してステータス情報を送信するステップとを含む、請求項1に記載の方法。 - USBバス上の、各々がそれぞれの第1のハードウェア構成を備えた多数のUSBデバイスを列挙するステップと、
USBバス上で列挙されるデバイスの各々へとUSBバスを介して送信されるプログラミングコマンドおよびプログラムデータのフローを制御してそれぞれのデバイスの各々の中に含まれるデバイスメモリの少なくとも一部の同時プログラミングを管理するステップとをさらに含む、請求項1に記載の方法。 - 複数のエンドポイントを用いて、カスタムプロトコルに従ってカプセル化されてUSBパケットになる情報をUSBバスを介して交換し、エンドポイントは、
カプセル化されたプログラミングコマンドを有するUSBパケットを交換するための制御エンドポイントと、
カプセル化されたプログラムデータを有するUSBパケットを少なくとも1つのデバイスに送信するためのバルクINチャネルと、カプセル化されたプログラムデータを有するUSBパケットを少なくとも1つのデバイスからUSBバスを介して送信するためのバルクOUTチャネルとを有するバルクエンドポイントと、
カプセル化されたステータス情報を有するUSBパケットを少なくとも1つのデバイスからUSBバスを介して送信するための割込INエンドポイントとを含む、請求項1に記載の方法。 - カスタムプロトコルに従ってカプセル化されてUSBパケットになり、USBバスを介して交換される情報は、
リクエストタイプフィールドと、
リクエスト識別子フィールドと、
リクエスト値フィールドと、
データフィールドと、
データ長フィールドと、
アドレス指標フィールドとに記憶される情報を含む、請求項1に記載の方法。 - リクエストタイプフィールドに記憶される情報は、標準タイプリクエスト、クラスタイプリクエスト、およびベンダータイプリクエストのうちの1つである、請求項14に記載の方法。
- リクエストタイプフィールドに記憶される情報がベンダータイプリクエストならば、リクエスト識別子フィールドに記憶される情報は、少なくとも消去リクエスト、デバイスメモリ書込リクエスト、デバイスメモリ読出リクエスト、check_idリクエスト、get_device_infoリクエスト、RAM読出リクエスト、RAM書込リクエスト、およびジャンプツーファンクションリクエストのうちの1つを含む、請求項15に記載の方法。
- USBインターフェイスを用いた不揮発性プログラマブル電気的消去可能なデバイスメモリのインシステムプログラミングのための構成であって、前記構成は、
USBバスに結合されるホストと、
USBバス上で列挙される、第1のハードウェア構成を備えた少なくとも1つのデバイスと、
プログラミングコマンドおよびプログラムデータを生成して少なくとも1つのデバイスのデバイスメモリの少なくとも一部のプログラミングを管理するホスト上で実行されるFOUSBプログラムと、
FOUSBプログラムが生成するプログラミングコマンドおよびプログラムデータをカプセル化して、ホストによってUSBバスを介して少なくとも1つのデバイスに送信されるUSBパケットにするためのカスタムプロトコルと、
少なくとも1つのデバイスのメモリの一部に記憶されるコードモジュールとを含み、コードモジュールは複数の制御機能を有し、前記構成はさらに、
FOUSBプログラムが生成するプログラミングコマンドおよびプログラムデータに応答してデバイスメモリの少なくとも一部をプログラムする論理を含み、第1のハードウェア構成が定義するような少なくとも1つのデバイスの少なくとも部分的な機能は、デバイスメモリがプログラムされる間、維持される、インシステムプログラミングのための構成。 - 少なくとも1つのデバイスで第1のプログラミングコマンドを受信したことに応答して、少なくとも1つのデバイスの第1のハードウェア構成を少なくとも部分的に変更する論理ステップと、
デバイスメモリの一部に記憶された複数の制御機能のうちの少なくとも1つをRAMにロードする論理ステップと、
少なくとも1つのデバイスで受信されるプログラミングコマンドおよびプログラムデータを用いてRAMからの少なくとも1つの制御機能を実行してデバイスメモリをプログラムする論理ステップと、
デバイスメモリがプログラムされた後、少なくとも1つのデバイスで第2のプログラミングコマンドを受信したことに応答してデバイスのハードウェア構成を第1のハードウェア構成へと復元する論理ステップとをさらに含む、請求項17に記載の構成。 - コードモジュールは、少なくとも、
USBバスを介して送信されるプログラミングコマンドの処理を管理するためのメインループ機能と、
USBパケットをUSBバスを介して転送するためのパケット交換機能と、
カスタムプロトコルに従って、プログラミングコマンドおよびプログラムデータをカプセル化してUSBパケットにし、プログラミングコマンドおよびプログラムデータをUSBパケットから抽出するためのベンダーリクエスト機能と、
デバイスメモリの少なくとも一部に記憶された情報を消去するための消去機能と、
ベンダーリクエスト機能によってUSBパケットから抽出されたプログラムデータをデバイスメモリの少なくとも一部に書込むための書込機能と、
デバイスメモリの少なくとも一部に記憶されたプログラム情報を読出すための読出機能とを含む、請求項18に記載の構成。 - 第1のプログラミングコマンドを受信したことに応答して第1のハードウェア構成に関連した割込をディセーブルにする論理と、
第1のハードウェア構成に関連した割込を処理するための割込ベクトルテーブルをRAMにコピーする論理と、
第1のハードウェア構成に関連した割込がRAMから処理されることを可能にする論理とをさらに含む、請求項18に記載の構成。 - デバイスメモリの一部に記憶された少なくとも1つの制御機能をRAMにロードするダイレクトメモリアドレス指定をさらに含む、請求項18に記載の構成。
- 少なくとも1つのデバイスで第3のプログラミングコマンドを受信したことに応答してプログラミングステップの前にデバイスメモリの少なくとも一部に記憶された情報を消去する論理をさらに含む、請求項17に記載の構成。
- デバイスメモリの少なくとも一部に記憶された情報を消去する論理は、
第3のプログラミングコマンド内に含まれる情報から消去されるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断する論理と、
デバイスメモリの一部に記憶された消去機能をRAMにロードする論理と、
RAMからの消去機能を実行してデバイスメモリの少なくとも一部に記憶された情報を消去する論理と、
デバイスメモリの少なくとも一部に記憶された情報の消去の完了時にUSBバスを介してステータス情報を送信する論理とを含む、請求項22に記載の構成。 - 少なくとも1つのデバイスで第4のプログラミングコマンドを受信したことに応答してプログラミングステップの後にデバイスメモリの少なくとも一部に記憶された情報を読出す論理をさらに含む、請求項17に記載の構成。
- デバイスメモリの少なくとも一部に記憶された情報を読出す論理は、
第4のプログラミングコマンド内に含まれる情報から読出されるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断する論理と、
デバイスメモリの一部に記憶された読出機能をRAMにロードする論理と、
RAMからの読出機能を実行してデバイスメモリの少なくとも一部に記憶された情報を読出し、読出された情報をUSBバスを介して送信する論理と、
デバイスメモリの少なくとも一部に記憶された情報の読出および送信の完了時にUSBバスを介してステータス情報を送信する論理とを含む、請求項24に記載の構成。 - デバイスメモリの少なくとも一部から読出された情報を検証して情報が適切にデバイスメモリへプログラムされているかを判断する論理と、
検証ステップで無効であると判断された情報をデバイスメモリの少なくとも一部へ再プログラムする論理とをさらに含む、請求項24に記載の構成。 - デバイスメモリの少なくとも一部をプログラムする論理は、
プログラミングコマンド内に含まれる情報からプログラムされるべきデバイスメモリの少なくとも一部のサイズおよび場所を判断する論理と、
RAMバッファの1つが一杯になり、プログラムデータが受信されなくなるまで、USBバスを介してRAMバッファに送信されるプログラムデータを受信する論理と、
デバイスメモリの一部に記憶されたプログラムデータ機能をRAMにロードする論理と、
RAMからのプログラムデータ機能を実行して受信されたプログラムデータをデバイスメモリの少なくとも一部に記憶する論理と、
RAMバッファが一杯であり、追加のプログラムデータが依然としてデバイスメモリに記憶されるべきとき、プログラムデータを受信するステップとプログラムデータ機能を実行するステップとを繰返す論理と、
デバイスメモリの少なくとも一部に対するプログラムデータの記憶の完了時にUSBバスを介してステータス情報を送信する論理とを含む、請求項17に記載の構成。 - USBバス上で列挙される、各々がそれぞれの第1のハードウェア構成を備えた複数のUSBデバイスと、
USBバス上で列挙されるデバイスの各々へとUSBバスを介して送信されるプログラミングコマンドおよびプログラムデータのフローを制御してそれぞれのデバイスの各々の中に含まれるデバイスメモリの少なくとも一部の同時プログラミングを管理する論理とをさらに含む、請求項17に記載の構成。 - USBバスを介して送信されるプログラミングコマンドおよびプログラムデータのフローを制御するホストに結合されたUSBホストコントローラと、
第1のUSBリンクによってUSBホストコントローラに結合され、かつそれぞれのUSBリンクによって複数のUSBデバイスの各々に結合されるUSBハブとをさらに含み、USBリンクはUSBバスを形成する、請求項28に記載の構成。 - ホストと少なくとも1つのデバイスとの間で結合される複数のエンドポイントをさらに含み、前記エンドポイントは、
カプセル化されたプログラミングコマンドを有するUSBパケットを交換するための制御エンドポイントと、
カプセル化されたプログラムデータを有するUSBパケットを少なくとも1つのデバイスに送信するためのバルクINチャネルと、カプセル化されたプログラムデータを有するUSBパケットを少なくとも1つのデバイスからUSBバスを介して送信するためのバルクOUTチャネルとを有するバルクエンドポイントと、
カプセル化されたステータス情報を有するUSBパケットを少なくとも1つのデバイスからUSBバスを介して送信するための割込INエンドポイントとを含む、請求項17に記載の構成。 - カスタムプロトコルに従ってカプセル化されてUSBパケットになり、USBバスを介して交換される情報は、
リクエストタイプフィールドと、
リクエスト識別子フィールドと、
リクエスト値フィールドと、
データフィールドと、
データ長フィールドと、
アドレス指標フィールドとに記憶される情報を含む、請求項17に記載の構成。 - リクエストタイプフィールドに記憶される情報は、標準タイプリクエスト、クラスタイプリクエスト、およびベンダータイプリクエストのうちの1つである、請求項31に記載の構成。
- リクエストタイプフィールドに記憶される情報がベンダータイプリクエストならば、リクエスト識別子フィールドに記憶される情報は、少なくとも消去リクエスト、デバイスメモリ書込リクエスト、デバイスメモリ読出リクエスト、check_idリクエスト、get_device_infoリクエスト、RAM読出リクエスト、RAM書込リクエスト、およびジャンプツーファンクションリクエストのうちの1つを含む、請求項32に記載の構成。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/142,318 US6795872B2 (en) | 2002-05-09 | 2002-05-09 | Maintaining at least partial functionality of a device as defined by a hardware configuration at a USB bus enumeration while the device memory is programmed |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2004005637A true JP2004005637A (ja) | 2004-01-08 |
JP2004005637A5 JP2004005637A5 (ja) | 2004-11-04 |
JP4037317B2 JP4037317B2 (ja) | 2008-01-23 |
Family
ID=29418427
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003130523A Expired - Fee Related JP4037317B2 (ja) | 2002-05-09 | 2003-05-08 | インシステムプログラミングのための方法および構成 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6795872B2 (ja) |
JP (1) | JP4037317B2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008217263A (ja) * | 2007-03-01 | 2008-09-18 | Seiko Epson Corp | 記憶端末、情報処理装置および情報処理システム |
JP2008217264A (ja) * | 2007-03-01 | 2008-09-18 | Seiko Epson Corp | 記憶端末および情報処理システム |
JP2012069166A (ja) * | 2004-07-27 | 2012-04-05 | Fujitsu Component Ltd | 情報処理システムの制御方法 |
KR101502147B1 (ko) * | 2013-03-08 | 2015-03-13 | 김대환 | 네트워크 상에서 usb 호스트와 usb 디바이스 간의 통신 방법, 장치 및 기록매체 |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3743323B2 (ja) * | 2001-08-02 | 2006-02-08 | コニカミノルタビジネステクノロジーズ株式会社 | 画像処理装置、画像形成装置管理ユニット、および、画像処理装置もしくは画像処理装置の管理ユニットにおいて実行されるプログラム |
US6978339B2 (en) * | 2002-02-22 | 2005-12-20 | Canon Kabushiki Kaisha | Communication system and method of controlling same |
US6959350B1 (en) * | 2002-06-28 | 2005-10-25 | Cypress Semiconductor Corp. | Configurable USB interface with virtual register architecture |
US7953899B1 (en) * | 2002-08-21 | 2011-05-31 | 3Par Inc. | Universal diagnostic hardware space access system for firmware |
US7562360B2 (en) * | 2003-12-01 | 2009-07-14 | Texas Instruments Incorporated | Method and system for firmware downloads |
KR100546764B1 (ko) * | 2003-12-05 | 2006-01-26 | 한국전자통신연구원 | 재구성 데이터 메모리 관리 방법 및 장치 |
JP2005227920A (ja) * | 2004-02-12 | 2005-08-25 | Yokogawa Electric Corp | バスパワード伝送器 |
US7334117B2 (en) * | 2004-08-04 | 2008-02-19 | National Instruments Corporation | Device boot loader for processing one or more requests from a host computer system concurrently with loading or updating the firmware of the device |
US20060070055A1 (en) * | 2004-09-24 | 2006-03-30 | Hodder Leonard B | Method of updating printer firmware and printing device employing the method |
US7606951B2 (en) * | 2004-11-12 | 2009-10-20 | Woodbridge Nancy G | Memory reuse for multiple endpoints in USB device |
US7712131B1 (en) | 2005-02-09 | 2010-05-04 | David Lethe | Method and apparatus for storage and use of diagnostic software using removeable secure solid-state memory |
US20060200612A1 (en) * | 2005-03-02 | 2006-09-07 | Laurence Hamid | Method and protocol for transmitting extended commands to USB devices |
US7676605B1 (en) * | 2005-04-06 | 2010-03-09 | Teradici Corporation | Methods and apparatus for bridging a bus controller |
US7908335B1 (en) * | 2005-04-06 | 2011-03-15 | Teradici Corporation | Methods and apparatus for bridging a USB connection |
US20060284876A1 (en) * | 2005-06-15 | 2006-12-21 | Low Yun S | Method and apparatus for programming an input/output device over a serial bus |
US8024500B2 (en) * | 2005-08-15 | 2011-09-20 | Research In Motion Limited | Universal peripheral connector |
US7640424B2 (en) * | 2005-10-13 | 2009-12-29 | Sandisk Corporation | Initialization of flash storage via an embedded controller |
US20070169086A1 (en) * | 2005-12-30 | 2007-07-19 | Siliconmotion Inc. | System and method for updating in-system program |
US20070261046A1 (en) * | 2006-05-04 | 2007-11-08 | Syntax Brillian Corp. | Television and display device with a USB port for updating firmware |
US8200856B2 (en) * | 2006-05-25 | 2012-06-12 | Qualcomm Incorporated | Flow control for universal serial bus (USB) |
CN100507849C (zh) * | 2006-12-13 | 2009-07-01 | 北京中星微电子有限公司 | 软件在线更新方法及软件在线更新系统 |
KR101147131B1 (ko) * | 2006-12-22 | 2012-05-25 | 삼성전자주식회사 | 휴대용 단말기에서 컴퓨터 연결모드 설정 방법 및 장치 |
US7853725B2 (en) * | 2007-06-19 | 2010-12-14 | Micron Technology, Inc. | USB device communication apparatus, systems, and methods |
US8260971B2 (en) * | 2007-06-30 | 2012-09-04 | Hewlett-Packard Development Company, L.P. | Techniques to exchange information for multiple modems |
JP4980809B2 (ja) * | 2007-07-10 | 2012-07-18 | 株式会社リコー | 画像形成装置、画像形成装置の起動方法、およびプログラム |
US8145894B1 (en) * | 2008-02-25 | 2012-03-27 | Drc Computer Corporation | Reconfiguration of an accelerator module having a programmable logic device |
KR101566004B1 (ko) * | 2009-03-05 | 2015-11-06 | 삼성전자주식회사 | 엔드 포인트를 복수개로 분할 가능한 반도체 장치 |
JP5362010B2 (ja) * | 2009-07-29 | 2013-12-11 | パナソニック株式会社 | メモリ装置、ホスト装置およびメモリシステム |
US8402180B2 (en) * | 2010-03-26 | 2013-03-19 | Atmel Corporation | Autonomous multi-packet transfer for universal serial bus |
US8631284B2 (en) | 2010-04-30 | 2014-01-14 | Western Digital Technologies, Inc. | Method for providing asynchronous event notification in systems |
US8762682B1 (en) | 2010-07-02 | 2014-06-24 | Western Digital Technologies, Inc. | Data storage apparatus providing host full duplex operations using half duplex storage devices |
US9141538B2 (en) | 2010-07-07 | 2015-09-22 | Marvell World Trade Ltd. | Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive |
US9135168B2 (en) | 2010-07-07 | 2015-09-15 | Marvell World Trade Ltd. | Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error |
US8868852B2 (en) * | 2010-07-07 | 2014-10-21 | Marvell World Trade Ltd. | Interface management control systems and methods for non-volatile semiconductor memory |
CN102592648A (zh) * | 2012-01-19 | 2012-07-18 | 上海格州电子有限公司 | 微控制器编程器 |
US9411761B2 (en) * | 2012-06-22 | 2016-08-09 | Microsoft Technology Licensing, Llc | Platform neutral device protocols |
US8909818B2 (en) | 2012-09-27 | 2014-12-09 | Qualcomm Incorporated | Method for shortening enumeration of tightly coupled USB device |
US8954631B2 (en) * | 2013-04-08 | 2015-02-10 | International Business Machines Corporation | Continuously transferring data using a USB mass storage device |
CN103616830B (zh) * | 2013-12-02 | 2017-04-12 | 北京经纬恒润科技有限公司 | 汽车控制器刷写控制方法、装置及一种汽车总线系统 |
US10515025B2 (en) * | 2016-08-08 | 2019-12-24 | Cirrus Logic, Inc. | Communication protocol adapter |
US10699013B2 (en) * | 2017-03-20 | 2020-06-30 | Honeywell International Inc. | Systems and methods for USB/firewire port monitoring, filtering, and security |
ES2827790T3 (es) * | 2017-08-21 | 2021-05-24 | Carrier Corp | Sistema antiincendios y de seguridad que incluye bucle accesible por dirección y mejora automática de firmware |
CN109254937B (zh) * | 2018-07-19 | 2021-08-06 | 芯启源(上海)半导体科技有限公司 | Usb集线器、usb设备枚举异常检测方法及计算机存储介质 |
CN112286097B (zh) * | 2020-10-28 | 2022-07-26 | 湖南汽车工程职业学院 | 智能驾驶单片机控制方法、系统及计算机存储介质 |
CN114385525A (zh) * | 2021-12-08 | 2022-04-22 | 航天信息股份有限公司 | 一种并发访问usb设备的方法及系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6134628A (en) | 1998-01-30 | 2000-10-17 | Ricoh Company, Ltd. | Method and computer-based system for rewriting a nonvolatile rewritable memory |
JPH11219299A (ja) | 1998-02-02 | 1999-08-10 | Mitsubishi Electric Corp | マイクロコンピュータ |
US6237091B1 (en) * | 1998-10-29 | 2001-05-22 | Hewlett-Packard Company | Method of updating firmware without affecting initialization information |
US6148354A (en) * | 1999-04-05 | 2000-11-14 | M-Systems Flash Disk Pioneers Ltd. | Architecture for a universal serial bus-based PC flash disk |
US6357021B1 (en) * | 1999-04-14 | 2002-03-12 | Mitsumi Electric Co., Ltd. | Method and apparatus for updating firmware |
US6609127B1 (en) * | 1999-06-09 | 2003-08-19 | Amx Corporation | Method for dynamically updating master controllers in a control system |
US6188602B1 (en) * | 2000-01-25 | 2001-02-13 | Dell Usa, L.P. | Mechanism to commit data to a memory device with read-only access |
-
2002
- 2002-05-09 US US10/142,318 patent/US6795872B2/en not_active Expired - Lifetime
-
2003
- 2003-05-08 JP JP2003130523A patent/JP4037317B2/ja not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012069166A (ja) * | 2004-07-27 | 2012-04-05 | Fujitsu Component Ltd | 情報処理システムの制御方法 |
JP2008217263A (ja) * | 2007-03-01 | 2008-09-18 | Seiko Epson Corp | 記憶端末、情報処理装置および情報処理システム |
JP2008217264A (ja) * | 2007-03-01 | 2008-09-18 | Seiko Epson Corp | 記憶端末および情報処理システム |
US7930466B2 (en) | 2007-03-01 | 2011-04-19 | Seiko Epson Corporation | Storage terminal, information processing apparatus, and information processing system |
KR101502147B1 (ko) * | 2013-03-08 | 2015-03-13 | 김대환 | 네트워크 상에서 usb 호스트와 usb 디바이스 간의 통신 방법, 장치 및 기록매체 |
Also Published As
Publication number | Publication date |
---|---|
US6795872B2 (en) | 2004-09-21 |
JP4037317B2 (ja) | 2008-01-23 |
US20030217254A1 (en) | 2003-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4037317B2 (ja) | インシステムプログラミングのための方法および構成 | |
US6389495B1 (en) | Dedicated circuit and method for enumerating and operating a peripheral device on a universal serial bus | |
US7149823B2 (en) | System and method for direct memory access from host without processor intervention wherein automatic access to memory during host start up does not occur | |
US5537654A (en) | System for PCMCIA peripheral to execute instructions from shared memory where the system reset signal causes switching between modes of operation by alerting the starting address | |
US5729767A (en) | System and method for accessing peripheral devices on a non-functional controller | |
US5978862A (en) | PCMCIA card dynamically configured in first mode to program FPGA controlling application specific circuit and in second mode to operate as an I/O device | |
US5797031A (en) | Method and apparatus for peripheral device control by clients in plural memory addressing modes | |
US20070005867A1 (en) | Virtual peripheral device interface and protocol for use in peripheral device redirection communication | |
US20070180223A1 (en) | Computer system and method of booting the system | |
US9886287B2 (en) | Adaptive device driver method and system | |
JPH09508227A (ja) | Pciバス・コンピュータのための使用可/使用不可拡張romを有する追加ボード | |
KR20110098974A (ko) | Usb 디바이스의 빠른 시동을 위한 시스템, 장치, 및 방법 | |
US20050028172A1 (en) | Method and apparatus for installing software | |
US7930535B1 (en) | Method and apparatus for loading configuration data | |
CN105830021B (zh) | 可更新集成电路无线电 | |
US6954815B2 (en) | Microcomputer with universal serial bus interface circuit and method of controlling the same | |
JP7093979B2 (ja) | デバイスプロキシ装置及びそれを含む計算機システム | |
US7680909B2 (en) | Method for configuration of a processing unit | |
JP2003022427A (ja) | アップロード機能付き記憶装置 | |
KR100486244B1 (ko) | 직렬 이이피롬을 이용하여 인터페이스용 카드를초기화하는 반도체 장치 및 초기화 방법 | |
CN116302122A (zh) | 多核异构域控制器、外设适配方法以及存储介质 | |
KR20040018869A (ko) | 화상형성장치 | |
JP2004220575A (ja) | カード型メモリのインターフェース回路、その回路を搭載したasic、及びそのasicを搭載した画像形成装置 | |
KR100303307B1 (ko) | 실시간 오퍼레이팅 시스템에서 디버깅동작을 위한 다운로드장치 및 방법 | |
KR102276696B1 (ko) | 집적 회로 무선장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060217 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060228 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060428 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060627 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060824 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20061017 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061214 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070205 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20071002 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071031 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101109 Year of fee payment: 3 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101109 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |