IMXRT1171において、LPSPI EDMAを使用して複数のスレーブデバイスを使用しようとすると、SDKが正しく動作しません。誤ったコールバックが呼び出され、誤ったユーザーデータが渡されました。
これは、LPSPI_MasterTransferCreateHandleEDMA のバグが原因です。このバグでは、内部の静的状態 (s_lpspiMasterEdmaPrivateHandle[]) を使用して lpspi_master_edma_handle を追跡しますが、SPI バス インスタンスごとに 1 つしか含まれません。同じSPIバス上に、それぞれ異なるlpspi_master_edma_handle、コールバック、およびPCSを持つ複数のスレーブが存在する場合、その状態は最後に設定した状態によって上書きされ、すべての受信/送信完了時に誤ったコールバックが呼び出されることになります。
こんにちは、 @nxp16 さん。
NXP Semiconductors製品にご関心をお寄せいただき、また、弊社をご利用いただける機会をいただき、誠にありがとうございます。
ご質問ありがとうございます。
1つのLPSPIマスターと複数のSPIスレーブを使用するアプリケーションの場合、これはアプリケーションレベルで処理できます。
LPSPI EDMAハンドル自体には、スレーブ固有の情報は格納されません。転送が開始されるたびに、ハンドルは現在の転送の設定で更新されます。したがって、各取引は独立している。
転送を開始する前に、通信したいスレーブ(PCS)を記録しておくことができます。そして、共通コールバック内で、この記録を使用して、どのスレーブの転送が完了したかを把握します。
この方法を使えば、ドライバを変更することなく複数のスレーブをサポートできます。
お役に立てれば幸いです
よろしくお願いいたします。
メイリュー