プロが教えるわが家の防犯対策術!

ちょっと細かい質問になりますが、ICの不具合かどうか最終判断を下そうと
思っておりまして、その前にこのサイトで別の角度からアドバイスを受けられたら
と思い投稿させて頂きました。
本来、製造メーカに聞くべき問題かもしれませんがよろしくお願い致します。

PIC16F887でI2Cバスを経由しI/OエクスパンダPCA9539(以降9539)を制御しています。
9539については http://www.jp.nxp.com/products/interface_and_con …
をご参照ください。

9539の動作のうち、ポートの出力はうまくいっていますが、ポートへの入力を読みだそうとするとおかしな動作をしています。SCL,SDAの駆動波形自体をみて期待と異なる動作をしているように見えます。なお、PICのコードはCCS社Cコンパイラの専用組み込み関数を用いています。

添付画像をご参照ください。
まず、最初の2バイトで9539への読みだしコマンドの書き込みを行っています。書き込んだコマンドはポート0からの入力を意味する"0x00"です。ここまでは後続の3バイト(下に時間域を拡大)で問題が起きており、R="1"と矢印で示したbitでREADを意味する1を立てていますが、その直後9539からACKが返っていません(ACK=highになっている)。当然、その後に読みだされた2つの"FF"も実際の状態とは異なっています。
ちなみに、このICはNXP社の物ですが、同じコードをTI社の同じ型番のコンパチ品で試すとこのACKは返しますが、読みだす値は常に"FF"になってしまいます。

【質問】
 ・上記の読みだし動作で駆動の仕方を間違えておりますでしょうか?
 ・同様のおかしな振る舞いをご経験された方いらっしゃいますか?

「I2C I/OエクスパンダPCA9539」の質問画像

A 回答 (2件)

詳しくないですが。



>その直後9539からACKが返っていません(ACK=highになっている)。

PCA9539データシートの Fig.9 がリードコマンドを与えてデータを読み出す動作の概要図です。

PCA9539 は読み出しコマンドを受取ると、ACK 応答の直後から受けたクロックに同期して
データ出力する必要があります。
多分ですが、ここに時間がかかるのですぐにはACK応答せずマスタに待ってもらいたいのに、マスタが待たず(待ってればSCL=H期間が伸びるはず)
PCA9539はデータ出力準備ができないうちに置きざりになってるんだと思います。

>その後に読みだされた2つの"FF"も
結果、スレーブは正しいデータを出す事ができず、オープンドレインなSDAは誰もドライブしない→Highレベルのまま、マスタはデータのつもりで取り込んでいるのでしょう。

そういう目で見ると、PIC16F887 のレジスタで
REGISTER 13-3: SSPCON2: SSP CONTROL REGISTER 2
の bit5,6あたり、(英語で意味を正確に理解できておらず誤解かも知れませんが)
「マスターモードの時、自動的にACKを生成する」つまりスレーブからのACKを待たず進行する、
という機能があるようで、これによる現象なのではないかという気がします。

あと、今は波形で確認してるので不要ですが、同レジスタ bit 6 ACKSTAT を見れば
スレーブが ACK 応答したかわかりますね。
    • good
    • 0

訂正です。



誤>の bit5,6 あたり、
正>の bit5,4,3 あたり、
    • good
    • 0
この回答へのお礼

少ない情報の中、丁寧なご回答いただきありがとうございました。
確かに波形からそのような状態も起きえそうです。

そこで、追加でいくつか確認してみましたが、PICがAckを待っている時間は1.25usあります。
(このときSCLは2.5us周期でしたので)
一方、9539のデータシート(p20及びFig22)のセットアップ、ホールド時間のオーダーや
400kbpsで動くことを謳っていることから、上記の時間は十分かと思います。
ちなみに100kbps(パルス幅5us)に落としてやってみましたが、状況は変わりませんでした。

PCA9539(NXP製)をTCA9539(TI製、同社PCA9539が非推奨となったことによる代替え品)を
同じPICのプログラムで試すと、今度はきちんとAckは返ってきます。ただしデータはでたらめの
ままです。

このTIのエンジニアフォーラムを見ますと
http://e2e.ti.com/support/logic/f/151/t/52803.aspx
http://e2e.ti.com/support/interface/etc_interfac …
あたり[2010年ごろの記事]に読みだし時の不具合の報告がありますが、TI側からの
サポートも途中で切れているようです。

私としては、TI社の別のICを試してみて様子を見ようかと考えています。

有難うございました。

お礼日時:2013/03/06 11:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!