マスタが SMBus ブロック書き込みブロック読み出しプロセス呼び出しをサポートできない場合、別の方法として、2 つのトランザクション (ブロック書き込みとそれに続くブロック読み出し) によってエミュレートできます。デュアル マスタ システムでは衝突が発生し、データやトランザクションが破損する可能性があるため、これはシングル マスタ システムでのみ行われる必要があります。これらのトランザクションのイベント シーケンスを以下に示します。
- マスタはこのトランザクションを開始するために START を発行します。
- マスタは、7 ビットのスレーブ アドレスとそれに続く書き込みビット (下位) を送信します。
- スレーブは ACK をアサートします。
- マスタはブロック読み出しコマンド コード (F1h) を送信し、スレーブは ACK をアサートします。
- マスタはこのトランザクションのバイト カウント (2h) を送信し、スレーブは ACK をアサートします。
- マスタは開始レジスタ アドレスを送信し、スレーブは ACK をアサートします。
- マスターはブロック読み出しプロセス呼び出しのバイト数 (1-20h) を送信し、スレーブは ACK をアサートします。
- マスタはこのトランザクションを終了するために STOP を送信します。
- マスタはこのトランザクションを開始するために START を送信します。
- マスタは 7 ビットのスレーブ アドレスとそれに続く書き込みビット (下位) を送信し、スレーブは ACK をアサートします。
- マスタはブロック読み出しコマンド コード (F1h) を送信し、スレーブは ACK をアサートします。
- マスタは繰り返し START を送信します。
- マスタは 7 ビットのスレーブ アドレスとそれに続く読み出しビット (上位) を送信し、スレーブは ACK をアサートします。
- マスタはバイト数 (ステップ 7 でマスタが送信したサイズと一致) を受信し、ACK をアサートします。
- マスタはデータ バイト 1 を受信し、ACK をアサートします。
- マスタはデータ バイト 2 を受信し、ACK をアサートします。
- マスタはデータ バイト N-3 を受信し、それぞれに対して ACK をアサートします。
- マスタは最後のデータ バイトを受信し、NACK をアサートします。
- マスタはこのトランザクションを終了するために STOP を発行します。
1 | 2 | | 3 | 4 | | 5 | | 6 | | 7 | | 8 | 9 | 10 | | | ∼ |
S | スレーブ アドレス | W | A | ブロック 読み出し コマンド コード (F1h) | A | バイト数 (2h)
| A | 開始 レジスタ アドレス | A | バイト数 (1–20h) (N)
| A | P | S | スレーブ アドレス | W | A |
∼ | 11 | | 12 | 13 | | | | 14 | | 15 | | 16 | | | 17 | | 16 |
ブロック 読み出し コマンド コード (F1h) | A | S | スレーブ アドレス | R | A | | バイト数 (1–20h) (N)
| A | データ バイト 1 | A | データ バイト 2 | A | ∼ | データ バイト N | /A | P |
注:
- ステップ 9~ステップ 19 を繰り返すと、別のデータ ブロックを読み出すことができます。アドレスは、最後のブロックが終わったところから次のブロックが始まるように自動インクリメントされます。LM94 から返されるサイズは毎回同じです。
- 通常のアドレス空間外のアドレスが読み出されると、LM94 は 00h を返します。
- ブロック読み出しは、アドレス FFh から 00h へのラップアラウンドは行いません。
- 要求したバイト数以上をマスタがアクノリッジした場合、LM94 はマスタがバイトをアクノリッジしなくなるまで、データを供給し続けます。
- マスタがバイトをアクノリッジしないで、ブロック読み出しを早期に中止する場合、LM94 はバスから離れ、マスタが STOP 信号を発行できるようにします。
- ブロック読み出しが終了すると、LM94 のベース アドレスが更新され、最後に読み出したバイトの次のバイトを指すようになります。