1-Wire®のチェーン機能を活用した位置情報の取得—シンプルなシグナリングとプロトコルにより、デバイスの物理的な位置を特定
要約
技術が進歩し、コスト削減が可能なプロトコルベースのアドレッシングを採用したシリアルバスシステムへ移行するにつれて、コンポーネントの物理的位置は既知でなくなりました。これは、複数地点で温度を計測する場合などのように、シリアルバスを計測や制御に使用する場合に問題となります。このアプリケーションノートでは、DS28EA00に新たに内蔵されたチェーン機能によって、1-Wireのような低コストのシリアルバスシステムで位置情報を取得する方法を詳述します。
このアーティクルはマキシムの「エンジニアリングジャーナルvol. 60」(PDF、891kB)にも掲載されています。
ディジタルバスシステムには、一般に、共有という特徴があります。マイクロプロセッサが登場とともに一般的になったパラレルバスシステムは、バスに接続されたコンポーネント間でデータとアドレスラインを共有します。チップセレクト信号は、アドレスラインと制御信号からデコードされます。このころ、バスに接続されたコンポーネントの物理的位置は、ハードウェアの設計とワイヤリングから常に認知することができました。しかし、技術が進歩し、コスト削減が可能なシリアルバスシステム1へ移行するにつれて、まず、アドレスラインが廃止されました。チップセレクト機能は、シリアルバスのSPI™とMICROWIRE®ではまだ使用されていましたが、さらに進んだシリアルバスシステムではプロトコルベースのアドレッシングが採用され、アドレス情報はデータの先頭に付加されて送られるようになりました。そのようなバスの代表例が、データ/クロックラインだけを通信インタフェースとするI²C/SMBusです。クロック情報もデータストリームに埋め込めば、コストをさらに削減することができます。そのような形にした例が、1-Wire、LIN、およびSensorPath®の各種バスです。
プロトコルベースのアドレッシングとした結果、コンポーネントの物理的位置は既知でなくなりました。これは、シリアルバスを計測や制御に使用する場合に問題となります。典型的な例は、アプリケーションノート4334 「温度監視でデータセンタのエネルギー消費を削減」で説明しているように、温度監視です。I²Cバスの場合、アドレスピンにロジック1、ロジック0、SCL、またはSDAを割り当てると、この問題を緩和することができます。1本のピンで4種類のディジタル状態、つまり、2ビット相当の情報を定義することができます。このアプローチはシンプルで効率的ではありますが、オリジナルのI²Cプロトコルではアドレスに7ビットしか割り当てられていないため、どうしても限界があります。これに対し、1-Wireバスでは64ビットアドレスが使えるため、高い柔軟性が得られます。しかし、アドレスピンの増加はコスト増に直結するため、歓迎されません。
複数デバイスが接続されたシリアルバスで物理的な位置情報を取得することができるシンプルで低コストな方法として、図1に示すように、あるデバイスをネットワークの始まり(位置#1)とし、接続された残りのデバイスを順番に特定していく方法が考えられます。このメカニズムを実現する接続は、青の太線で表示したラインです。このラインは、最初の位置でグランドに接続されています。
図1. 位置特定のために拡張されたシリアルネットワーク
図1でINとOUTと書かれた2本のピン以外に、IN端子を読んでOUT端子に書きこむオンチップロジックが必要になります。これだけのリソースがあれば、マスタは、最初のデバイスを特定した後、順番に、最後のデバイスまで、相対的な位置を特定することができます。ただし、プロトコルでネットワークのインベントリ機能がサポートされている必要があります。1-Wireバスであれば、この条件を満足することができます。
1-Wireバスはシンプルな信号伝達方式で、1本のデータラインを共有するホスト/マスタコントローラと1つあるいは複数のスレーブ間で半二重双方向通信を行うことができます(図2)。スレーブデバイスへの電源供給とデータ通信は、いずれも、1本だけのこの1-Wireラインを通じて送られます。電源供給は、ラインがハイ状態となっている間にスレーブデバイスが内蔵コンデンサに充電し、ラインがロー状態となってデータ通信が行われている間、その電力を使用してデバイスが動作するという形で行われます。1-Wireマスタは、通常、オープンドレインのI/Oポートピンを持ち、プルアップ抵抗によって3V~5Vを供給します。これは優れた通信方式で、メモリ、認証、およびミックスドシグナルなどの機能を、いつでも簡単かつ効率的に追加することができます。
図2. チェーン機能を持たない標準的な1-Wireネットワークの例
1-Wireシステムが持つ基本的で重要な機能として、各スレーブデバイスが変更不可の一意のROM (リードオンリーメモリ)を持つことがあげられます。工場出荷時に64ビットのシリアル番号(ID)が割り振られ、同じ番号が他のデバイスに割り振られることはありません。この64ビットROM IDは、最終製品にとっても一意の電子的IDとなるほか、これがあるおかげで、1本のバスラインに接続された数多くのスレーブデバイスから所定のデバイスをマスタデバイスが選ぶことができます。この64ビットROM IDには8ビットのファミリコードが含まれており、ここから、デバイスの種類とサポートしている機能を特定することもできます。
システムが最初に立ち上がる際、1-Wireマスタ側では、1-Wireバスに接続されているデバイスの数やそのROM IDなどがわかっていないのが普通です。マスタは、バスのワイヤードANDプロパティを利用し、消去法でデバイスを特定します。「Search ROM*」機能2を使えば、バス上にあるデバイスのROM IDをマスタ側で知ることができます。しかし、Search ROMの結果から、各デバイスの位置を知ることはできません。たとえば、ROM IDが図2のようになっているとき、表1のような順番でデバイスを知ることになります。
表1. デバイスの検出シーケンス
チェーン機能の考え方
チェーン機能を使うことによって、1-Wireによるネットワーク環境におけるデバイスの物理的位置を求めることができる理由は以下のとおりです。
a) 1-Wireネットワークにおける物理的ルーティングというシステムレベルの情報が既知である。つまり、1番目、2番目…と、デバイス/ノードの物理的な位置がわかっている。a)は「設計による」システム情報であり、1-Wireネットワークのワイヤリングという物理的レイアウトによって決定されます。b)は、通常、未知の情報ですが、チェーン機能を使うことによって簡単に知ることができます。チェーン機能(図3)では2つの端子を使用します。入力(アクティブローEN)によってデバイスをイネーブルとし、探索に反応可能な状態とし、出力(アクティブローDONE)により、チェーンの次のデバイスに対し、前のデバイスに対する探索が完了したことを知らせます。アクティブローDONE信号は、次のデバイスのアクティブローEN入力に入力されます。最初のデバイスのアクティブローEN入力は、GNDへの物理的配線です。このメカニズムを実現する接続は、青の太線で表示したラインです。シーケンス検出を行うためには、アクティブローEN端子とアクティブローDONE端子のほかに、「Conditional Read ROM」という新しいネットワーク機能コマンドが必要です。このコマンドは、ある条件(詳細は後述)が満足されている場合にのみ、デバイスのROM IDを返します。これに対し、「Read ROM」コマンドでは、ネットワークに接続されたデバイスのすべてが、いっせいにROM IDを送信してきます。この新しいチェーン機能を実装し、サポートした最初のデバイスがDS28EA00です(図3を参照)。
b) デバイス(ROM ID)が物理的につながれている順番を、1番目から最後まで、順に知ることができる。
図3. DS28EA00を使用した、チェーン機能を持つ1-Wireネットワーク
アクティブローEN端子とアクティブローDONE端子は、シーケンス検出に使うだけでなく、ディジタルPIOとしても使います。これらの機能を両立させるため、チェーン機能では、「OFF」、「ON」、および「DONE」という3種類のチェーン状態が定義されています。チェーン状態の遷移を制御する「Chain」コマンドも用意されています。表2に、チェーン状態と各状態における挙動をまとめます。
表2. チェーン状態
パワーオン時のチェーン状態は、デフォルトでOFFとなっており、この状態では、DS28EA00のデータシートに記載されているように、アクティブローDONE (PIOA)とアクティブローEN (PIOB)は、「PIO Access Read」と「PIO Access Write」という独立したコマンドによって制御されます。Chain ON状態では、アクティブローDONEはオンチップの約40kΩ抵抗(RCO)によりデバイスの内部VDDにプルアップされるため、次のデバイスのアクティブローEN端子がロジック1になります。Conditional Read ROMコマンドが認識されるのは、アクティブローENがロジック0で、Chain ON状態の場合のみです。この条件が成立するのは、順番の探索中、ネットワークにおいて1つのデバイスのみとなります。
デバイスの状態をChain OFFからChain ON、あるいはChain DONEに遷移させるのは、マスタのChainコマンドです。可能な遷移を図4に示します。Chainコマンドコードに続いて、マスタは、適切な「Chain Control」バイトを送出しなければなりません。間違ったChainコマンドを受けとる可能性を最小限におさえるため、このコントロールバイトは、まず、非反転形式で送信し、続いて、反転形式で送信します。確認バイト(AAh)が受信されたら、状態変更が成功したということです。
図4. チェーン状態の遷移を示すダイアグラム
シーケンス検出を行う場合、マスタは、まず、すべてのデバイスをChain ON状態にします。次に、Conditional Read ROMによってひとつのデバイスのROM IDを読み出しては、Chain DONE状態にし、チェーン上の次のデバイスをイネーブルとして、Conditional Read ROMコマンドに応答することができるようにします。このようにシーケンス検出が進むと、全部のデバイスが特定されるまで、デバイスは順番にChain DONE状態に遷移されます。最後に、すべてのデバイスをChain OFF状態にしてアクティブローEN端子とアクティブローDONE端子をPIOとし、パワーオン時のデフォルト状態に戻します。
シーケンス検出の例
前提条件—図3に示すように、1つのマスタがネットワークをコントロールしていなければなりません。また、すべてのデバイスがチェーン機能をサポートしている必要があります。チェーン上にあるデバイスのシーケンスを検出する、つまり、物理的な位置の数とそれぞれの位置におけるデバイスのROM ID (登録番号とも呼ばれる)を特定するためには、マスタは、以下の手順を踏みます。
初期化—マスタが「Skip ROM」コマンドに続けてChain ONコマンドを送信し、すべてのデバイスをChain ON状態とします。RCOがアクティブローDONE端子をプルアップし、チェーンの最初のデバイスを除くすべてのデバイスについて、アクティブローDONE/アクティブローEN接続をロジック1とします。
第1サイクル—マスタがConditional Read ROMコマンドを送出し、チェーンの最初のデバイスから応答として64ビットのROM IDを受けとります。マスタは、このROMIDと、これがチェーンの最初のデバイスであることを記録します。次に、マスタはChain DONEコマンドを送出します。このコマンドは、デバイス#1のアクティブローDONE端子を通過し、2番目のデバイスアクティブローEN端子をロジック0にアサートするとともに、デバイス#1が次回、応答しないようにします。
第2サイクル—マスタがConditional Read ROMコマンドを送出します。チェーン上においてアクティブローEN端子がロジック0であるデバイスはデバイス#2が最初であるため、デバイス#2が応答としてROM IDを返します。マスタは、このROM IDと、シーケンス番号「2」を記録します(デバイス#1はChain DONE状態にあり、Conditional Read ROMコマンドに応答しません)。次に、マスタはChain DONEコマンドを送出します。
追加サイクル—マスタは、Conditional Read ROMとChain DONEによるステップをくり返し、残りのデバイスについてもROM IDとその物理的な順番を特定します。 Conditional Read ROMコマンドに対して応答が返ってこなくなれば、チェーン上にあるすべてのデバイスが特定されたことになります。
終了—検出プロセスの最後には、チェーン上にあるすべてのデバイスがChain DONE状態となっています。マスタは、Skip ROMコマンドに続けてChain OFFコマンドを送出し、シーケンス検出を終了します。これにより、すべてのデバイスがChain OFF状態となり、PIO端子の制御が「PIO Access機能」コマンドに移ります(LEDを点滅させるなど)。Conditional Read ROMコマンドとChainコマンドの詳細やフローチャートについては、DS28EA00データシートを参照してください。
1-Wireの標準的な速度では(リセット/プレゼンス検出サイクルが960µs、1タイムスロットは65µs)、初期化と終了処理で約7msを要します(1回だけのオーバヘッド)。検出と位置確認は、1デバイス当り約7.7msです。同様の条件でSearch ROMを行うと、1デバイス当り約14msを消費します。つまり、たとえば100msの間に、Search ROM関数では7個のデバイスしか特定できないのに対し、チェーン機能であれば12個のデバイスが特定することができます。
その他
ケーブルの静電容量—1-Wireネットワークによく用いられる電話用カテゴリー5ケーブルは、ツイストペアを構成するワイヤ間に約50pF/mの静電容量を持っています。ネットワークのサイズにもよりますが、すべてのデバイスをChain ON状態とするとき、この静電容量が大きな負荷となることが考えられます。特にパラサイト電源動作では、電圧が許容限界以下に低下しないよう、1-Wireラインをアクティブにプルアップしなければならない場合もあります。中央あるいはローカルのVCC電源を使用する場合には、このような対策は不要です。
Conditional Read ROM—1993年に廃止されたシリコンシリアルナンバのDS2400との互換性を保つため、DS2401は、Conditional Read ROMコマンドをRead ROMとしても理解します。そのため、チェーン機能を実装したネットワークにDS2401をつなぐことはできません。1-Wireポートアダプタを使用する場合にも、DS2401を搭載していないものを選んでください。DS2405のrev. Aも、Conditional Read ROMコマンドに対してDS2401と同様の応答をします。1998年以降のDS2405のrev. Bは、Conditional Read ROMコマンドを無視します。
1-Wireマスタ回路—組込み環境では、ICによるディスクリートの低コスト回路が1-Wireマスタとして実装されることがあります。ディスクリートソリューションとしては、抵抗プルアップからスペアµCのポートピン、あるいは、高度なドライバなどが考えられます3、4。1-Wireラインの駆動に最適化された高集積ドライバには、DS2480B (シリアルポート、UART)、およびDS2482 (I²Cポート、図5)があります。8チャネルバージョンのDS2482には、アドレスピンが3本あり、1つのホストコントローラで最大64個もの独立した1-Wireネットワークを動かすことができます。アプリケーションノート192 「DS2480Bシリアル1-Wireラインドライバの使用」では、ソフトウェア開発の視点からDS2480Bが解説されています。DS2482ドライバにも、同様の文書が用意されています5。
図5. シングルチャネルのI²Cから1-WireへのブリッジデバイスDS2482を1-Wireマスタとして使用した例です。アクティブローDONE出力はLEDの駆動にも用いられていますが、これによってチェーン機能が影響を受けることはありません。
電源—VCCが供給されていれば、すべてのDS28EA00で同時に温度変換を実行することができます。その後、「Conditional Search」コマンドを送出すれば、警告温度を検出したデバイスだけを特定することができます。そのデバイスのROM IDと、シーケンス検出によって特定した物理的位置を組み合わせれば、対策が必要な場所をすぐに特定することができます。VCCの供給がない場合は、温度変換はひとつずつ順番に行わなければなりません。また、シーケンス検出の開始時(すべてのデバイスがChain OFFからChain ONに遷移する瞬間)、1-Wireデータラインの電圧が下がりすぎないように対策を講じる必要もあります。
速度—複数のデバイスが存在する場合や、距離が約3mを超える場合、オーバードライブによる高速タイミングで1-Wireネットワークを運用するのは望ましくなく、標準 速度による運用が望まれます。また、ネットワーク上に存在するデバイスの数によっては(特にパラサイト電源動作の場合)、標準速度であっても、回復時間を長めにとらなければならない場合があります6。
トラブルシュート—シーケンス検出が期待した動作をしない場合には、まず、Chain ONコマンドを発行した後の1-Wireラインの電圧降下を確認してください。電圧が3.0V以下に低下すると、Chain ONコマンドが適切に実行されないおそれがあります。このように大きな電圧降下を防止するためには、Chain ON後にアクティブなプルアップを行う1-Wireドライバ回路を使用するか、外部電源を使用します。チェーン上にある最初のデバイスのアクティブローEN入力がオープンとなっていたり、アクティブローENが1-Wireラインに接続されていたり、アクティブローENがVCCに接続されている場合にも、シーケンス検出は失敗します。ネットワーク上にDS2401が存在している場合も同様です。1つの1-Wireポートに複数のネットワークを並列接続することもできません。複数の「最初のデバイス」が同時に応答し、ROM IDのCRCバイトが不正となるためです。
まとめ
チェーン機能とは、直線的なネットワーク上にあるデバイスの物理的な順番を、人間が介入することなく、マスタがソフトウェア制御によって求めることができる新機能です。このチェーン機能を内蔵した最初のデバイスが、1-Wireディジタル温度計DS28EA00です。DS28EA00は、デバイスの位置データをアドレスピンから得る場合よりも費用対効果が高く、マルチポイントで温度を測定するアプリケーションに最適です。
参考文献
- アプリケーションノート3967 「シリアルバスの選択」
- アプリケーションノート187 「1-Wire検索アルゴリズム」
- アプリケーションノート244 「高度1-Wireネットワークドライバ」
- アプリケーションノート3684 「DS2482 I²C 1-Wireマスタの使用方法」
- アプリケーションノート3829 「複数スレーブを備える1-Wireネットワークの回復時間の算出」
*コマンドと状態は、わかりやすいように単語頭を大文字にするとともに、初出時には括弧書きとしています。