●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以下であること)
を条件として設計することにしました。
![]() |
専用基板全体ブロック図 |
![]() |
![]() |