- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:I2C I/OエクスパンダPCA9539動作不具合)
I2C I/OエクスパンダPCA9539動作不具合
このQ&Aのポイント
- I2Cバスを経由し、PCA9539を制御する際にポートの入力読み取りに問題が発生しています。
- 読み取りコマンドの書き込み後、ACKが返ってこないため、実際の値が取得できません。
- 同じコードを使用しているTI社の同じ型番のコンパチ品ではACKは返りますが、読み取った値は常に"FF"です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
訂正です。 誤>の bit5,6 あたり、 正>の bit5,4,3 あたり、
その他の回答 (1)
- umamimi
- ベストアンサー率39% (144/362)
回答No.1
詳しくないですが。 >その直後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 応答したかわかりますね。
お礼
少ない情報の中、丁寧なご回答いただきありがとうございました。 確かに波形からそのような状態も起きえそうです。 そこで、追加でいくつか確認してみましたが、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_interface/f/390/t/203105.aspx あたり[2010年ごろの記事]に読みだし時の不具合の報告がありますが、TI側からの サポートも途中で切れているようです。 私としては、TI社の別のICを試してみて様子を見ようかと考えています。 有難うございました。