I2C Software Reset Decoder
I2C スレーブのサンプルコードで、I2C General Call アドレスへのライトを検知してソフトウェアリセット
をデコード出力します。
General CallアドレスはI2C規格で定義された特殊アドレスです。I2Cマスターから、1stバイトとして
General Callアドレス00hをライトし、続いて2ndバイトとして06hをライトすると、それに対応した
I2Cスレーブはソフトウェアリセットとして解釈します。
General Callアドレスを用いたソフトウェアリセットは規格上オプション扱いで、全てのI2Cスレーブ
が対応しているとは限りません。I2Cにはハードウェア上のリセット信号が定義されていないため、
できればこのソフトウェアリセットを有効活用したいところですが、オプションに対応していないデバイス
をリセットすることはできません。そのようなデバイスに対しては、別のデバイスでデコードした
ソフトウェアリセットを使用し、リセットあるいは一時的かつ局所的なパワーオフ状態を作っリセットを
伝える方法があります。本サンプルコードはその際のソフトウェアリセット出力生成機能を提供します。
I2Cバススピードは、100kHz以下のスタンダードモードと400kHz以下のファストモードに対応
しています。ソフトウェアリセット生成以外の機能は含んでいないため、内部レジスタ等が必要な場合は、
そのコードと足し合わせてご使用下さい。
なお本コードでは、I2Cバスラインの負荷が大きく、信号の立ち上がり時間がデバイスの許容範囲を超えて
大きいこと(I2C規格上、立ち上がり時間はスタンダードモードで1usまで、ファストモードで300nsまで
許されており、条件によってはFPGA/CPLDに直結できないケースが多々あります)を想定し、I2Cの
SDA、SCLを外部のシュミットインバータで受け、その出力をFPGA/CPLDに接続する前提としています。
もし負荷が小さく、特にケアが必要ない場合には、I2Cバスと直結しつつ、コード中のSDA・SCLの
インバート部分を単なるバッファ回路へ変更してご使用下さい。
をデコード出力します。
General CallアドレスはI2C規格で定義された特殊アドレスです。I2Cマスターから、1stバイトとして
General Callアドレス00hをライトし、続いて2ndバイトとして06hをライトすると、それに対応した
I2Cスレーブはソフトウェアリセットとして解釈します。
General Callアドレスを用いたソフトウェアリセットは規格上オプション扱いで、全てのI2Cスレーブ
が対応しているとは限りません。I2Cにはハードウェア上のリセット信号が定義されていないため、
できればこのソフトウェアリセットを有効活用したいところですが、オプションに対応していないデバイス
をリセットすることはできません。そのようなデバイスに対しては、別のデバイスでデコードした
ソフトウェアリセットを使用し、リセットあるいは一時的かつ局所的なパワーオフ状態を作っリセットを
伝える方法があります。本サンプルコードはその際のソフトウェアリセット出力生成機能を提供します。
I2Cバススピードは、100kHz以下のスタンダードモードと400kHz以下のファストモードに対応
しています。ソフトウェアリセット生成以外の機能は含んでいないため、内部レジスタ等が必要な場合は、
そのコードと足し合わせてご使用下さい。
なお本コードでは、I2Cバスラインの負荷が大きく、信号の立ち上がり時間がデバイスの許容範囲を超えて
大きいこと(I2C規格上、立ち上がり時間はスタンダードモードで1usまで、ファストモードで300nsまで
許されており、条件によってはFPGA/CPLDに直結できないケースが多々あります)を想定し、I2Cの
SDA、SCLを外部のシュミットインバータで受け、その出力をFPGA/CPLDに接続する前提としています。
もし負荷が小さく、特にケアが必要ない場合には、I2Cバスと直結しつつ、コード中のSDA・SCLの
インバート部分を単なるバッファ回路へ変更してご使用下さい。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilogを用意しています。
詳細は下記の資料ダウンロードをクリックください。
詳細は下記の資料ダウンロードをクリックください。