こんにちは、
お客様から、Flexio_I2c_Ip_MasterSendDataBlocking() が DMA または INTERRUPT モードでは機能しないという報告があります。この API は、トランザクションの終了を待機するために Flexio_I2c_Ip_MasterWaitTransferEnd() を内部的に呼び出します。ただし、この関数はポーリング モードの場合にのみブロックされます。
この API は、この操作が完了するまで待機する必要があることを意味します。ただし、これは動作ではなく、最初のブロッキング呼び出し後の 2 回目の I2C 送信ではエラーが発生します。
確認したところ、 Flexio_I2c_Ip_MasterSendDataBlocking は関数の始めで DriverType を POLLING に自動的に割り当てていることがわかりました。このことから、この関数は POLLING モードでのみ使用することを目的としていると考えられますが、本当にこのCASEでしょうか?
もしCASEなら、これはどこかに文書化され、間違ったモードで呼び出された場合は何らかのエラーが返される必要があります。
よろしくお願いいたします。
フェリペ
こんにちは@FelipeGarcia 、
RTD 開発チームがこの問題を分析しました。そして彼らの解決策は:
UM にメモを追加します: Flexio_I2c_Ip_MasterSendDataBlocking() および Lpi2c_Ip_MasterSendDataBlocking() 関数はポーリング モードのみをサポートします。
よろしくお願いいたします。
ダン
こんにちは、 @bryan_brauchlerさん、
あなたの懸念を RTD チケットに記入しました。
よろしくお願いいたします。
ダン
この API は間違ったモードで呼び出された場合にエラーを返す必要がありますか?モードが誤って割り込みまたは DMA モードに設定されている場合、関数は透過的に失敗してはなりません。
-ブライアン
こんにちは、 @bryan_brauchlerさん、
実際、Lpi2c_Ip_MasterSendDataBlocking() 関数もプーリング方法でデータを送信します。SO、私はこの機能をチケットに追加しました。
よろしくお願いいたします。
ダン
また、割り込み/DMA モードで呼び出された場合、これがサポートされていない場合、この関数は何らかのエラーを返す必要があると思います。
現在、関数は間違ったモードで呼び出されたCASEに成功応答を返します。前の呼び出しが完了しないため、連続した呼び出しでは多くの問題が発生します。
また、これは Lpi2c_Ip_MasterSendDataBlocking の動作とは異なるようです。これは、IMO では同じインターフェースであるはずです (お客様が I2C に Lpi2c と FLEXIO の両方を使用する場合、これらの 2 つの関数はそれぞれ Lpi2c/FlexIO インターフェースに対して同じように動作すると想定されます)。
最高、
ブライアン
こんにちは@FelipeGarcia 、
私の観点からすると、この問題は、この機能がポーリング モードのみをサポートしているという注記が抜けていることによる RTD ドライバのバグである可能性があります。
開発チームにバグチケットを提出しました: ARTD-192705
このチケットの分析が完了したらお知らせします。
よろしくお願いいたします。
ダン
お客様が使用しているバージョン: RTD 5.0.0、S32DS v3.6.0
こんにちは@DanNguyenDuy 、
お客様が使用している特定の RTD バージョンを確認中ですが、最新バージョンを確認したところ、同じ API 構造 ( S32K3_RTD_6_0_0_D2506_ASR_REL_4_7_REV_0000_20250610) が確認されました。
よろしくお願いいたします。
フェリペ
こんにちは@FelipeGarcia 、
使用した RTD パッケージのバージョンはどれですか?
よろしくお願いいたします。
ダン