EVK685でevkmimxrt685_flexspi_octal_polling_transferを実行する例
RAM から実行、デバッグ用のセミホスト。
コマンドRead Jedec IDを実行すると、SPI 1-1-1のオペコード0x9Fで3バイトを読み取ります。
kFLEXSPI_ReadSampleClkLoopbackFromSckPad または kFLEXSPI_ReadSampleClkExternalInputFromDqsPad を使用する場合は余分なバイトが読み取られますが、kFLEXSPI_ReadSampleClkLoopbackInternally を使用する場合は要求された 3 バイトのみが読み取られます。
添付のロジックキャプチャとソースコードを参照してください。
kFLEXSPI_ReadSampleClkLoopbackFromSckPad、3バイトのみ要求しているのに4バイトが読み取られる:
kFLEXSPI_ReadSampleClkLoopback内部的には3バイトのみが読み取られます。
こんにちは、オマールさん。
LUT は予想されるオペランドとシーケンスと一致します。
あなたの回答では、FlexSPIの例でRT685EVKを使用する理由が説明されていません。
#DEFINE EXAMPLE_FLEXSPI_RX_SAMPLE_CLOCK kFLEXSPI_ReadSampleClkLoopbackInternally
または:
#DEFINE EXAMPLE_FLEXSPI_RX_SAMPLE_CLOCK kFLEXSPI_ReadSampleClkLoopbackFromSckPad
同じ操作シーケンスで、
ClkLoopbackFromSckPad設定では、8クロック余分に発生し、これが失敗の原因です。
ClkLoopbackInternally 設定では、クロック カウントは予想どおりになります。
添付の画像と、evkmimxrt685_flexspi_octal_polling_transfer_cm33 の例を使用したソース コードを含む zip ファイルを参照してください。
この問題を R&D にエスカレーションしてください。LUT_statusLUT_ステータス
Src_Clk_LoopbackFromSckPadSrc_Clk_LoopbackFromSckPad
Src_Clk_internallySrc_Clk_内部
よろしくお願いします、
ダン
こんにちは、
私もまったく同じ問題に直面しています。QSPI 経由で FPGA から 32 ビットを読み取る場合。これは、「kFLEXSPI_ReadSampleClkLoopbackInternally」読み取りストローブを使用して動作します。LUT エントリは次のとおりです。
- kFLEXSPI_Command_RADDR_SDR、kFLEXSPI_4PAD、12 /* ビット */
- kFLEXSPI_Command_DUMMY_SDR、kFLEXSPI_4PAD、1 /* サイクル */
- kFLEXSPI_Command_READ_SDR、kFLEXSPI_4PAD、4 /* バイト */
- kFLEXSPI_Command_STOP、kFLEXSPI_1PAD、0
12 ビットのアドレスを書き込みます: 3 * 4 ビット、次に 1 * 4 ビットのダミー サイクル、続いて 32 ビット = 8 * 4 ビットの読み取りデータ。
これはSDRモードでは3+1+8=12個のSCKクロックの合計です。
「 kFLEXSPI_ReadSampleClkExternalInputFromDqsPad 」を有効にすると、読み取りデータ クロックの後、CS がハイにアサートされる前に、追加の 6 つの SCK クロックが追加されます。読み取られたデータは有効ですが、スループットが 50% 失われます。
この問題には解決策がありますか?
ROM API と LUT (ルックアップ テーブル) の構成が正しいことを確認します。LUT エントリは、フラッシュ メモリの予想されるコマンド シーケンスと一致する必要があります。
追加の読み取りは、LUT からのダミー サイクルである可能性があります。
kFLEXSPI_ReadSampleClkExternalInputFromDqsPad の構成では、デバイスはメモリから提供される外部 DQS 信号を期待します。SO、これが提供されない場合、通信エラーが発生する可能性があります。
よろしくお願いします、
オマール