I2C 8bit-LED output
ライトデータに基づき8ビットLED点灯制御出力を生成するI2Cスレーブのサンプルコードです。
I2Cからアクセス可能な内部レジスタを8ビット1本だけとすることで、レジスタアドレスの概念を省略。
さらに同レジスタをリード不可のライトオンリレジスタとすることで、I2Cリードサイクルのトラッキング
も省略し、シンプルな構成となっています。
I2Cバススピードは、100kHz以下のスタンダードモードと400kHz以下のファストモードに対応
しています。デバイスアドレスは7ビットモードのみ対応していますが、アドレスによらずリードには
応答しません(Nack応答となります)。
なお本コードでは、I2Cバスラインの負荷が大きく、信号の立ち上がり時間がデバイスの許容範囲を超えて
大きいこと(I2C規格上、立ち上がり時間はスタンダードモードで1usまで、ファストモードで300nsまで
許されており、条件によってはFPGA/CPLDに直結できないケースが多々あります)を想定し、I2Cの
SDA、SCLを外部のシュミットインバータで受け、その出力をFPGA/CPLDに接続する前提としています。
もし負荷が小さく、特にケアが必要ない場合には、I2Cバスと直結しつつ、コード中のSDA・SCLの
インバート部分を単なるバッファ回路へ変更してご使用下さい。
I2Cからアクセス可能な内部レジスタを8ビット1本だけとすることで、レジスタアドレスの概念を省略。
さらに同レジスタをリード不可のライトオンリレジスタとすることで、I2Cリードサイクルのトラッキング
も省略し、シンプルな構成となっています。
I2Cバススピードは、100kHz以下のスタンダードモードと400kHz以下のファストモードに対応
しています。デバイスアドレスは7ビットモードのみ対応していますが、アドレスによらずリードには
応答しません(Nack応答となります)。
なお本コードでは、I2Cバスラインの負荷が大きく、信号の立ち上がり時間がデバイスの許容範囲を超えて
大きいこと(I2C規格上、立ち上がり時間はスタンダードモードで1usまで、ファストモードで300nsまで
許されており、条件によってはFPGA/CPLDに直結できないケースが多々あります)を想定し、I2Cの
SDA、SCLを外部のシュミットインバータで受け、その出力をFPGA/CPLDに接続する前提としています。
もし負荷が小さく、特にケアが必要ない場合には、I2Cバスと直結しつつ、コード中のSDA・SCLの
インバート部分を単なるバッファ回路へ変更してご使用下さい。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilogを用意しています。
詳細は下記の資料ダウンロードをクリックください。
詳細は下記の資料ダウンロードをクリックください。