を参照してください。以下では、バスのリセットともっとも基本的な1ビットデータの書込みと読出し方法について説明します。実際にはこの読み書きを組み合わせることで、ROMコードの読出しやコマンドの送信を実現します。
4-1. デバイスの接続
 |
|
図1. デバイス接続
|
信号線はすべてのデバイスで並列に接続され、抵抗を介して電源に接続されます。各デバイスはLまたはHi-Zをとることができます。ひとつでもLのデバイスが存在するとバスはLに、すべてのデバイスがHi-ZのときにバスはHになります。
4-2. バスリセット
 |
図2. バスリセット
|
マスタデバイスは最初にバスを480μs以上‘L’レベルにします。これをバスリセットと呼びます。スレーブがひとつ以上接続されている場合は、リセット解除後プレゼントパルスがスレーブデバイスより出力されます。マスタデバイスは指定のタイミング(図2では67.5μs)でバスのレベルをサンプリングし、スレーブデバイスの存在を確認することができます。
4-3. 1ビットライト
 |
| 図3. 1ビットライト |
1ビットのデータを扱う時間的な単位を1スロットと呼びます。1スロットは61μs以上に規定されています。マスタはバスを‘L’にすることで1スロットが開始します。図3の波形はタイマーを2つ使うと簡単に実現可能です。タイマー1はスロット長の管理に使用します。タイマー2には‘1’を書く場合には1〜15μs、‘0’を書く場合には60〜120μsを設定し、タイムアップでバスを開放することで、スレーブに1ビットのデータが書き込まれます。
4-4. 1ビットライト
 |
|
図4. 1ビットリード
|
スレーブからデータを読み出す場合にはあらかじめコマンドを書きこむ必要があります。たとえば、バスリセット後に0x33(READ ROMコマンド)を書き込むとその次のスロットからROMコード読出しを開始することができます。
1ビットリードするときもライトと同様にスロットはマスタがバスを’L’にドライブすることで開始します。リードの場合は毎回T1=1〜15μsのタイミングでマスタはバスを開放します。スレーブはマスタがバスを解放後、’L’を出力する場合にはバスをGNDにドライブします。’H’を出力する場合には、マスタのバス解放のタイミングでバスは’H’レベルに移行します。
図4では、スレーブのH/L出力を読み取りためにD1端子をIRQ端子に接続して、バスの立ち上がりで割り込みをかけてタイマーカウンタの読み取り値からH/Lを判定する方法を記載しました。
マスタがバスを開放するタイミングでタイマー2を設定し、規定された読み取りタイミングでバスをサンプリングすることでH/Lを判定する方法も可能ですが、読出し時のマスタは毎回スロットの開始に同じタイミングでバスを’L’にドライブする必要があるので、同じ設定のまま使用したほうがプログラムはシンプルになります。そのため、スレーブのH/Lの判定には、タイマーカウンタの値を使った別の方法を紹介しました。