こんにちは、NXP
私たちはI2C_MASTER_EVENT_PIN_LOW_TIMEOUTイベントを利用して、SDAを低く保つスレーブデバイスの復旧を試みました。テスト中に、転送が完了したとき、または異常状態が検出されたときに、ピンロータイムアウト割り込みがオフになることが確認されました。
こんにちは@wuxianlongさん
詳しい説明とドライバーコードの指摘をありがとうございます。
ご指摘のとおりです。現在のRTD実装では、マスター転送割り込み処理の一環としてLPI2C_IP_MASTER_PIN_LOW_TIMEOUT_INTが有効になり、マスター転送が終了すると再び無効になります。つまり、RTDドライバーは転送完了後にこの割り込みを恒久的なバス監視機構として有効にしないことを意味します。
ハードウェアの観点から見ると、S32K3 LPI2Cモジュールはピンロータイムアウト機能をサポートしています。タイムアウトの閾値はMCFGR3[PINLOW]によって設定され、MSR[PLTF]フラグは選択したSCLまたはSDA回線が設定された閾値より長く低いままの状態で設定できます。リファレンス・マニュアルには、LPI2Cコントローラがアイドル状態でもこのフラグを設定できると記載されています。
しかし、このハードウェア機能があるからといって、RTDドライバーが対応する割り込みを継続的に有効に保つとは限りません。現在のRTD実装は、このイベントをアクティブなマスター転送の文脈で管理しているようです。
転送完了後の連続的なI2Cバス監視では、アプリケーションレベルで処理することが推奨されており、例えばバス復旧ロジックの一部としてMSR[PLTF]の状態を確認するなどです。また、ピンローの状態自体はソフトウェアで解決しなければならないことにもご注意ください。PLTFフラグは低条件がまだ存在している間はクリアできず、新たなSTART条件を生成する前にクリアしなければなりません。
よろしくお願いします、
パベル