こんにちは、S32K3チーム
私はこの評価ボードを使用しています:--
https://www.nxp.com/design/design-center/development-boards-and-designs/S32K312EVB-Q172
私はこの IP 例を実行しました:---
DMA を使用するマスターとしての LPSPI2。
この例では、DMA を使用して 12 バイトを送受信するために LPSPI2 マスターを使用します。
MOSI MISO がループバックでハードウェアにコネクテッド。
https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K312-SPI-Transmit-amp-Receive-Using-DMA-...
ここで、この例を変更したいと思います:--
LPSPI-2 (マスター)--> LPSPI-1 (スレーブ)
次のドライバの例を変更しました:--
lpspi-1スレーブのピン設定を追加しました
DMA マルチプレクサ
DMA
LPSPI-1が追加されました
添付のソースコードは、LPSPI_2 (マスター) を使用してデータを送信します。
-->-->LPSPI-1 (スレーブ) でデータを受信するためのコードを追加できますか。
マスターはデータを送信し、スレーブは同じデータを受信します。
よろしくお願いいたします。
ディネシュ
こんにちは、 @Dinesh_Guleria さん、
1. ボーレート = 2kHzの場合:
次回 if((Master __callback==1)&&(Slave__ callback==1)) で Lpspi_Ip_AsyncTransmit() の呼び出しを実行する前に遅延時間を追加すると、問題が解決されることが分かりました。
その後、遅延時間を使用する代わりに、以下のようなチェックステートメントをいくつか追加したところ、プロジェクトは機能しました。プロジェクトを添付しました。
2. ボーレートを高くする場合、先ほども申し上げたように、 DMA で LPSPI1 と 2 の両方を使用する場合はハードウェアの制限があるため、プロジェクトでボーレートを高くすることはできません。
よろしくお願いいたします。
ダン
こんにちは、 @Dinesh_Guleria さん、
ボーレートを高くする場合は、チャネル DMA_IP_HW_CH_2 および 3 (LPSPI1 - スレーブ) に DMA_IP_LEVEL_PRIO1 を設定し、チャネル DMA_IP_HW_CH_0 および 1 (LPSPI2 - マスター) に DMA_IP_LEVEL_PRIO0 を設定することをお勧めします。その後、すべての DMA チャネルに対して「プリエンプションを有効にする」を有効にします。
よろしくお願いいたします。
ダン
HSEクロックを60MHzに変更しました-->
その後、この値を変更すると、エラーが削除されました:--
LPSPI で受信したデータ:--
しかし、あなたのサンプルコードはSPIのボーレート --> 20000 でのみ動作します
--> 1 MHZ spi ボーレートが機能しません。
よろしくお願いいたします。
ディネシュ
こんにちは@DanNguyenDuy 、
プロジェクトをテストしました。マスターからスレーブに送信されるデータを受信できました。
APIS_SLOW_CLKはHSE_CLKと比率(1/2または1/4)を持つため
HSE クロックを 60 MHz に変更した瞬間 :--
LPSPI でエラーが発生し始めます:--
-->私のプロジェクトでは、LPSPI_2、LPSPI_1を使用しています。
HSE クロックを --> 60 MHZ に変更します。LPSPIでこのエラーが発生します -->プロジェクト内
S32DS がなぜこのように動作するのか、貴社でテストしていただけますCANか?
このエラーが発生する理由を教えてください。
よろしくお願いいたします。
ディネシュ
こんにちは、 @Dinesh_Guleria さん、
DMA_IP_HW_CH_2 および DMA_IP_HW_CH_3 で「Enable Preemption」を有効にしましたか?
添付画像のとおり接続が正しいことを確認してください。
S32DS と Trace32 デバッガーの両方でテストし、合格しました。ただし、Trace32 デバッガーの方が S32DS デバッガーよりも安定していることがわかりました。SO、S32DS デバッガーの代わりに T32 デバッガーを使用することをお勧めします。
Trace32 デバッガーをお持ちでない場合は、3.5 デバッガー バージョンではなく、S32DS 3.6 デバッガー バージョンで再度デバッグを試みることができます。
よろしくお願いいたします。
ダン
こんにちは、ダン。
先週休暇をとっていたので返事が遅くなってごめんなさい。
PE Micro デバッガーを使用して確認していただけますか?
あなたのコードをテストしました。2つのボードでテストしました。
新しいワイヤーも交換しました。
接続を再確認しましたが、使用されているピンは同じです:---
コードがここに詰まっています... :--
デバッガーを削除し、ボードの電源を入れてテストしました。
以下のコードでは LED が点灯しません :---
しかし、あなたのコードは私の側では動作しません
よろしくお願いいたします。
ディネシュ
こんにちは、 @Dinesh_Guleria さん、
上記の接続でプロジェクトをデバッグし、テストに合格しました。
DMA_IP_HW_CH_2とDMA_IP_HW_CH_3でも「プリエンプションを有効にする」を有効にしました。
よろしくお願いいたします。
ダン
こんにちは、 @Dinesh_Guleria さん、
画像を見ると、S32K312EVB ボードに間違ったピンをコネクテッドしたようです。
もう一度接続を確認していただけますか?
LPSPI2_SOUT - PTB3: J412.20 <--> LPSPI1_SIN - PTA20: J38.4
LPSPI2_SIN - PTB2: J412.11 <--> LPSPI1_SOUT - PTA18: J3.8
LPSPI2_SCK - PTB29: J412.8 <--> LPSPI1_SCK - PTA19: J38.1
LPSPI2_PCS0 - PTB25: J3.6 <--> LPSPI1_PCS0 - PTA11: J4.2
よろしくお願いいたします。
ダン
コードを修正しました:--
これらの割り込みを有効にしました:--
マスター送信、コールバック取得ヒットのコールバック ハンドラーを追加しました:---
しかし、スレーブ コールバックはヒットせず、スレーブではデータが受信されません。
更新されたコードを見つけてください。
よろしくお願いいたします。
ディネシュ
RTDチームの皆さん、こんにちは。
参考例を参考にしてサンプルコードを修正しました --> Lpspi_Flexio_Ip_Transfer_S32K344
私はピンをこのようにコネクテッドしました:--
マスター(LPSPI-2)スレーブ(LPSPI-1)
MOSI - PTB-3(紫)<-----------> SIN - PTA20
味噌 - PTB-2(白) <-----------> 南 - PTA18
SCLK - PTB-29 (青) <-----------> SCLK - PTA19
CS-0 - PTB-25(ブラック) <-----------> CS-0 - PTA11
ボード上の接続:--
スレーブはデータを一切受信せず、コードがここで停止します :--
コードに何が欠けているかを提案してください。
よろしくお願いいたします。
ディネシュ