高度1-Wireネットワークドライバ

高度1-Wireネットワークドライバ

著者の連絡先情報

説明

はじめに

1-Wireネットワークの信頼性は、ホストコンピュータが1-Wireスレーブデバイスとの通信に使用するドライバ回路の特性によってほぼ決まります。このアプリケーションノートは、小規模から大規模(最大500m相当の規模)のネットワークで信頼性の高い動作を実現するために、綿密なインピーダンスマッチングと「インテリジェント」(ソフトウェア制御)の強力プルアップを使用する1-Wireマスターのインタフェースについて説明しています。高信頼性1-Wireネットワークを構築するためのガイドラインについては、チュートリアル148 「高信頼性長距離配線1-Wireネットワークのガイドライン」を参照して下さい。

回路の説明

ネットワークドライバ (図1)は、プルダウンセクション(Q1、R1、C1、R5)とプルアップセクション(Q2、R2、C2、R6)から構成されています。3つ目のトランジスタと周辺部品(Q3、C4、R7)で強力プルアップを構成し、EEPROMなどのデバイスや温度センサーに追加電力を供給します。この「強力プルアップ」機能については、このアプリケーションノートでは取り扱いません。これらの3つのトランジスタの中で常に、最大1個のみが導通します。1-Wire通信が行われていないとき(「アイドル」状態)、これら3つのトランジスタは導通しません。

図1. ドライバ回路図

図1. ドライバ回路図

R4、R1、R3の直列経路によって、1-Wireの標準的なVCCへのプルアップが行われます。この回路では、プルアップ抵抗の合計は約1kΩです。これは1-Wireラインがアイドル状態のときの値です。R4はQ1のドレインに接続されているため、Q1が導通しているとき、R4を流れる電流によって1-Wireラインのローレベル電圧は影響を受けません。R4 + R1 + R3と1-Wireネットワークの負荷すなわち「ウエイト」によって、1-Wireネットワーク上の電圧が5Vに上昇する速度が決まります。R4の抵抗値は下げないようにすることを推奨します。それは、1-Wireネットワーク上のローレベル電圧が上昇してしまうからであり、これは望ましいことではありません。ショットキダイオードD1とD2は、それぞれGNDとVCCに接続され、静電放電(ESD)によるスパイクや隣接ケーブルによるクロスカップリングを低減します。R3はESD電流を制限してD1とD2を保護します。

このドライバに特有な特性は、マスター側で1-Wireケーブルを適正にライン終端しているということです。1-Wireアプリケーションに推奨されるCategory 5シールドなしツイストペアデータケーブルは、約100Ωの特性インピーダンスを持ちます。ライン終端は、Q1またはQ2が導通しているときに、R3に直列のR1かR2によって行われます。プレゼンスパルスについては、R1とR3に直列のC3によってAC結合の終端処理が行われます。このドライバを別のインピーダンスに合わせるためには、それに応じてR1とR2を変更する必要があります。

このドライバの3つのセクションはすべて、対応する各トランジスタの導通時にスルーレート制御されます。R5とC1は、タイムスロットやリセットパルスの開始時など、ドライバが1-Wireラインをロー状態に強制するときにスルーレートを制限します。R6とC2は、ダイナミックプルアップがアクティブになるときにスルーレートを制限します。R7とC4は、アクティブプルアップのスルーレートを制限します。これら3つのセクションの時定数は0.5µsです。この値から、スルーレートは約4V/µsになります。スコープ波形および詳細については、「性能例」の項を参照して下さい。

回路の動作

強力プルアップの回路配線(Q3、R7、C4)に関係なく、ドライバは監視用マイクロコントローラとの3つの接続が必要になります。これらの信号は、DRIVE、DPU、およびSENSEと呼ばれます。DRIVEはアクティブハイ信号で、Q1をオンにして1-Wire通信を開始します。DPUはアクティブロー信号で、ダイナミックプルアップQ2をアクティブにします。SENSEは、基本的には、1-Wireラインからマイクロコントローラの入力ポートまでの直通接続になります。1-Wireのグランドとドライバ/マイクロコントローラのGNDは同じです。1-Wire通信を行うためには、DRIVEとDPUの信号を正確に生成すること、およびSENSE入力を通じて1-Wireラインから適切なタイミングでデータを読み取ることが必要です。1-Wire通信には、4種類の波形があります。すなわち、リセット/プレゼンス検出シーケンスの波形が1種類と通信用タイムスロットの波形が3種類です。

リセット/プレゼンス検出シーケンス

1-Wire通信はすべてリセットパルスで始まり、次にプレゼンスパルスのウィンドウが続きます。図2に1-Wire波形を示します。リセットパルスを生成するため、A点~B点の期間中、DRIVE信号をアクティブにします(図2を参照)。1-Wireの電圧はA点から下降して0Vになります。DRIVEがB点で非アクティブになると、1-Wire上の電圧は上昇し始めます。ただし、1-Wireデバイスがラインをロー状態に強制して割込み状態の信号が発生している場合には上昇しません(DS1904とDS2417のデータシートの「Type 2 Interrupt (Type 2割込み)」を参照)。この割込みの発生に適切に対応するためには、C点から始めてD点でロジックハイレベルに達するまで1-Wireのステータスを繰り返しサンプリングします。D点に達するとまもなく、ダイナミックプルアップDPUがアクティブになります(E点)。これによって1-Wireラインが即座に5Vまで引き上げられます。ダイナミックプルアップはF点で終了します。1-Wireデバイスが存在すると仮定すると、1-Wireデバイスによってプレゼンスパルスが生成され、G点から始まりI点で終わります。1-Wireデバイスが存在するかどうかは、G点とI点との間にあるH点で1-Wireのステータスをサンプリングすることで調べます。プレゼンスパルスが終了すると、1-Wireの電圧は5Vに上昇し始めます。J点で、再び1-Wireのロジック状態をサンプルリングすることでType 1Aの割込み信号(DS1904/DS2417データシートを参照)が発生しているかどうかを調べます。割込みがない場合は、図2に示すようにロジック状態がハイになり、ダイナミックプルアップが再びアクティブになり、K点からL点まで続きます。これによって1-Wireラインは完全に回復します。割込み信号がある場合は、J点で検出されたステータスはロジックゼロになり、リセットパルスの終了時とまったく同様に、1連の繰返しサンプリングが新たに必要となります(つまり、C点に戻ってサンプリングを続けます)。割込みパルスは、他の1-Wireデバイスによってリセットパルスとみなされます。したがって、割込みを発生しているデバイス以外は、割込みパルスによって、応答としてプレゼンスパルスを生成します(すなわち、図2に示すように、2番目のパスでJ点まで達したとき1-Wireのロジック状態はハイです)。いずれの場合でも、リセット/プレゼンス検出シーケンスはM点で終了し、その地点からタイムスロットが始まります。

図2. リセットおよびプレゼンス検出のシーケンス

図2. リセットおよびプレゼンス検出のシーケンス

A to B
480µs
B to C 0 to 2µs
D to E 0 to 2µs
E to F 8µs
D to E 0 to 2µs
E to H 72µs
H to J 2408µs
J to K 0 to 2µs
K to L 60µs
L to M >2µs

サンプリング点Hは、プレゼンスパルスウィンドウを正しくヒットするように選択する必要があります。プレゼンスパルスウィンドウは、存在する1-Wireデバイスの中の最高速と最低速のデバイスのタイミングによって決まります。データシートでは、このウィンドウはtMSPで規定しています。tMSPのタイミング基準は、リセットパルスの終了後に1-Wireデバイスがロジックハイレベルを検出したときから始まります。図2では、この基準点はほぼE点に一致します。A点~C点の期間は、tF (立下り時間)とtRSTL (リセットロー時間)の合計値に等しい値となります。Type 2割込みがある場合は、有効なリセットロー時間は、A点~B点までの時間と割込みパルスの持続時間の合計です(DS1904とDS2417のデータシートを参照)。E点~M点までの時間はtRSTH (リセットハイ時間)と呼ばれます。データシートに、tRSTLが規定されており、また、tRSTHの最小持続時間の決定方法が記載されています。tRSTHの上限はありません。

通信タイムスロット

書込み0のタイムスロット

書込み0のタイムスロットでは、1-Wireライン上にビット0が送出されます。図3は、1-Wire波形を示しています。書込み0のタイムスロットを生成するためには、A点~B0点までの間、DRIVE信号をアクティブにします。1-Wireの電圧はA点から下降して0Vになります。DRIVEがB0点で非アクティブになると、1-Wireライン上の電圧は上昇し始めます。B0点に達してまもなく、ダイナミックプルアップDPUがアクティブになります(C0点)。これによって1-Wireラインの電圧は即座に5Vまで引き上げられます。ダイナミックプルアップはD0点で終了します。次のタイムスロットまたはリセット/プレゼンス検出シーケンスは、E0点から続行することができます。

図3. 書込み0のタイムスロット

図3. 書込み0のタイムスロット

書込み0のタイムスロットではデータラインをサンプリングする必要がないため、図3にはサンプリング点は示されていません。ただし、読取りのタイムスロット(図4または5)の場合と同じ時点で1-Wireラインをサンプリングすることは限定的に許されています。サンプリングしたロジック状態は必ず0になります。これは、回路が実際に1-Wireラインに0を書き込んでいることを示しています。A点~C0点の時間は、tF (立下り時間)とtW0L (書込み0ロー時間)の合計値に等しくなります。C0点~E0点までの時間はtREC (回復時間)と呼ばれます。データシートに、tW0LとtRECの最小値が規定されています。また、A点~E0点までの時間は、tSLOT (タイムスロット期間)と呼ばれています。

表2. 書込み0のタイムスロットに推奨されるタイミング値
A to B0 B0 to C0 C0 to D0 A to E0
60µs 2µs 16µs 80µs
Z Z Z Z

書込み1/読取りのタイムスロット(読取り1)

書込み1のタイムスロットでは、1-Wireラインにビット1が送出されます。図4は1-Wireの波形を示しています。1-Wireラインからビット1を読み取るときの波形は、ビット1を書き込むときとまったく同じになります。したがって、書込み1と読取り1はまとめて1つの事例として説明することができます。書込み1または読取りのタイムスロットを生成するためには、A点~BR点までの間、DRIVE信号をアクティブにします。1-Wireの電圧はA点から下降して0Vになります。ビット1の書込みまたは読取りの場合、DRIVEがBR点で非アクティブになると、1-Wireライン上の電圧は上昇し始めます。CR点で、1-Wire上のステータスがサンプリングされます。読取りビットは1であるため、ダイナミックプルアップは直ちにアクティブになり、D1点からE1点まで続きます。これによって1-Wireラインが即座に5Vまで上昇します。次のタイムスロットまたはリセット/プレゼンス検出シーケンスは、F1点から開始することができます。

Figure 4. Write one/read time slot (read one).

図4. 書込み1/読取りのタイムスロット(読取り1)

サンプリング点CRは、マスターサンプリングウィンドウを正しくヒットするように選択する必要があります。マスターサンプリングウィンドウは、最速の1-Wireデバイスのタイミングによって決まります。データシートでは、このウィンドウはtMSRと呼ばれています。tMSRのタイミング基準は、タイムスロットの開始後に1-Wireデバイスがロジックローレベルを検出したときから始まります。図4では、この基準点は、A点に立下り時間tFを加えた期間にほぼ一致します。A点~BR点の期間はtF (立下り時間)とtRL読取りロー時間)の合計値に等しくなります。データシートに、tRL (tW1Lに等しい)とtMSRが規定されています。また、A点~F1点までの時間は、tSLOT (タイムスロット期間)と呼ばれています。

Table 3. Recommended Timing Values for Write One/Read Time Slot (Read One)
A to BR A to CR CR to D1 D1 to E1 A to F1
9µs 18µs 0 to 2µs 60µs 80µs

読取りのタイムスロット(読取り0)

読取り0のタイムスロットは、1-Wireラインからビット0を読み取る、読取りのタイムスロットです。図5は1-Wire波形を示しています。読取りのタイムスロットを生成するには、A点~BR点までの間、DRIVE信号をアクティブにします。1-Wireの電圧はA点から下降して0Vになります。ビット0を送出するため、1-Wireデバイスは、A点より後、ただしBR点より前に1-Wireラインをロー状態に強制し始めます。従って、1-Wireライン上の電圧は、最初は1-Wireマスターによってローに引き下げられ、その後は、1つまたは複数の1-Wireデバイスによってロジックロー状態が維持されます。BR点に達したとき、マスターのプルダウンはオフになります。CR点で、1-Wire上のステータスがサンプリングされます。読取りビットは0であるため、繰り返し1-Wireのステータスがサンプリングされます。D0点で、1-Wireデバイスはラインをロー状態に強制することを停止し、電圧が上昇します。その後のE0点でのサンプリングでは、ラインがロジックハイレベルに到達したことが確認されます。ここでダイナミックプルアップがアクティブになり、F0点からG0点まで続きます。これによって、1-Wireラインの電圧が即座に5Vまで上昇します。次のタイムスロットまたはリセット/プレゼンス検出シーケンスは、H0点から開始することができます。

図5. 読取りのタイムスロット(読取り0).

図5. 読取りのタイムスロット(読取り0)

サンプリング点CRは、書込み1/読取りのタイムスロットの場合と同じです。CR以降の各サンプリング点の間隔は、マイクロコントローラとソフトウェアが許す限りできるだけ短くする必要があります。A点~H0点までの時間は、tSLOT (タイムスロット期間)と呼ばれています。

表4. 読取りのタイムスロット(読取り0)に推奨されるタイミング値
A to BR A to CR E0 to F0 CR to G0 A to H0
9µs 18µs 0 to 2µs 60µs 82µs

実用について

高度な1-Wireネットワークドライバを制御するための信号の構成はかなり複雑ですが、そのアルゴリズムは単純です。このため、このドライバは十分にリアルタイムで信号を生成できる高速マイクロコントローラを使用して、通常ソフトウェアで実現されます。以下のフローチャートは、ユーザが使い慣れた適切なマイクロコントローラを使用して高度なドライバを実現する場合に役立つものです。正しいタイミングを生成するためには、ユーザが決める水晶周波数における各コマンドの実行時間を考慮に入れる必要があります。

ソフトウェアのフローチャート

  • 注1: タイマを実際のタイマとしてではなく、カウンタとして実現する場合にのみ、デクリメントが必要です。タイマは5000µs以降に終了させなければなりません。
  • 注2: PresenceとShortは論理変数で、リセット/プレゼンス検出シーケンスの結果を上位のプログラムに伝えます。割込みは変数として伝えられません。これは、1つの1-Wireチップでしか割込みを生成できないからであり(DS1904とDS2417)、また割込みを使用すると1-Wireネットワークの実効速度を大幅に低減する可能性があるからです。

このフローチャートは、書込み0または読取りのタイムスロットを生成するかどうかを制御する論理入力変数があることを前提としています。書込み1のタイムスロットは読取りのタイムスロットと同じです。ビット変数BitValueは、タイムスロットの結果を上位プログラムに伝えます。

  • 注1:タイマを実際のタイマとしてではなく、カウンタとして実現する場合にのみ、デクリメントが必要です。タイマは45µs以降に終了させなければなりません。
  • 注2:フローチャートによると、DPUはタイマが終了する前に繰り返しアクティブになります。すでにアクティブ状態の信号をアクティブにしても信号の状態は変化しないため、これは問題ありません。必要なら、DPUがすでにアクティブであるかどうかをテストすることもできます。すでにアクティブであれば、ループを実行中に、再度アクティブにする必要はありません。

性能例

次のページのスコープ波形は、このアプリケーションノートで説明したドライバで生成した1-Wire信号を表しています。信号を(特にケーブルの遠端で)確認するときには、差動プローブを使用する必要があります。その場合、プローブのグランド基準をフローティング状態にしておく必要があります。これは、プローブ側のグランド接続が1-Wireグランド基準を無視してシステムのトポロジを変更してしまわないようにするためです。差動プローブを利用できない場合は、変圧器を介して、オシロスコープのグランドを電源のグランドから絶縁するか、バッテリ駆動のオシロスコープを使用する必要があります。また、オシロスコープの電源ケーブルの安全グランドを外すという方法もあります。

スコープ波形

リセット/プレゼンス検出シーケンス(図2の場合)

リセット/プレゼンス検出シーケンス(図2の場合)

書込み0のタイムスロット(図3の場合)

書込み0のタイムスロット(図3の場合)

書込み1/読取り1のタイムスロット(図4の場合)

書込み1/読取り1のタイムスロット(図4の場合)

読取り0のタイムスロット(図5の場合).

読取り0のタイムスロット(図5の場合)

300mケーブルの遠端での立下りエッジ

300mケーブルの遠端での立下りエッジ

300mケーブルの近端に見られる立下りエッジ

300mケーブルの近端に見られる立下りエッジ