●IIC ラインモニターの開発

『1』 開発のきっかけ

最近まで、ソフトウェアでポートのポーリングによるIICバス通信モニターを使用して
いたのですが、近年、高速クロックでのIIC通信が機器内で行われるようになって来た
ため、ソフトウェアのポーリングでは処理スピードが追いつかなくなって来ました。


    * Z80ソフトウェアによるIICバスポーリング例 *

;===============================================================
;     IICバス1バイトデータを読みとる
;---------------------------------------------------------------
;     [Arguments]
;       なし
;     [Results]
;       H レジスター 動作結果
;         == 0 : データ取り込み正常終了 (ACK Low)
;         == 1 : データ取り込み正常終了 (ACK High)
;       L レジスター  読みとりデータ
;---------------------------------------------------------------
;     [Note]
;       LSIC-80 からの呼び出しフォーム
;       int IicData = IicBusOneByteRead();
;===============================================================
IicBusOneByteRead_::
    push   af
    push   bc
;
    ld     b,9       ; データビット8、Ackビット1(合計9ビット)
    ld     hl,0
;-------------------------------------------
;     Clock = 'L' 待ちループ
;-------------------------------------------
IBR_r01:
    in     a,(IIC_PORT)
    rra
    jr     c,IBR_r01    ; IIC Clock = 'L' エッジでないならループする
;-------------------------------------------
;     Clock = 'H' 待ちループ
;-------------------------------------------
IBR_r02:
    in     a,(IIC_PORT)
    rra
    jr     nc,IBR_r02   ; IIC Clock = 'H' エッジでないならループする
;-------------------------------------------
;     Clock = 'H' エッジ発見(データ取り込み)
;-------------------------------------------
    rra             ; データビットを CY ビットへ出す
    rl     l         ; IIC データビットを HL レジスタへ
    rl     h
    djnz   IBR_r01
;-------------------------------------------
;     データ&ACKビット取り込み終了
;-------------------------------------------
    rr     h
    rr     l         ; データ8ビットは L レジスタへ
    rla
    and    01h       ; Ack ビットだけ得る
    ld     h,a
;
    pop    bc
    pop    af
    ret


上記のようなソフトウェアによるポーリングでは、クロックは20KHz程度が限界となってきます。
そこで今回、クロックが200KHz程度でも対応可能な様に、ハードウェアでモニターする新しい
IICラインモニターを開発することにしました。

『2』 新しいIICバスモニター構成

新しいバスモニターでは、IICデータをハードウェアで取り込むための専用基板を作成します。
この専用基板とパソコンをUSBで接続し、専用基板に取り込まれたデータをUSBバス経由で
パソコンで読み出して表示・記憶させようと思います。

IICバスラインモニター専用基板の仕様としては

 ・IICバスクロックは最大200KHzとし、この周波数でも安定してモニター可能とすること
 ・IICバスは2チャンネル分モニター可能なこと(ただし同時に両チャンネルが動作することは無い)
 ・IICバスの信号レベルは5V、3.3Vの何れでもモニターできること
 ・5秒間程度のモニターデータを保持できるメモリーを持つこと
 ・USBバス電源にて動作すること(最大消費電流 500mA以下であること)

を条件として設計することにしました。

専用基板全体ブロック図