2409800_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2409800_ja-JP

2409800_ja-JP

S32K388 GMAC0 Eth_43_GMACドライバーがRX割り込みを受け取らない

こんにちは、

私は以下の設定を使用しています。

S32K388EVB-Q289

S32DS 3.6.8

RTD 7.0.1

提供されたEth_InternalLoopback_S32K388例プロジェクトをベースにし、PCからメディアコンバーター経由でフレームを受け取れるように改良しました。例 S32K388 GMAC0 lwIP FreeRTOS S32DS 3.6.1 RTD600で言及されていた RTD 修正を追加しました。ブレークポイントを達成できました
Eth_43_GMAC_Receive(EthConf_EthCtrlConfig_EthCtrlConfig_0、0U、&Status);
そして、イーサネットフレームを点検できました
EthIf_RxIndication(Eth_43_GMAC_apxInternalCfg[PartitionId]->Eth_43_GMAC_apCtrlConfig[CtrlIdx]->EthCtrlEthIfIdx, FrameType, IsBroadcast, MacSrcAddr, Payload, PayloadLength, IngressTimeTuplePtr, RxHandleId);

しかし、while 1 ループを追加し、Rx 割り込みを有効にして GMAC0_CH0_RX_IRQHandler にリンクしても、どこにも割り込みが発生しませんでした。プロジェクトを以下に添付しました。

James_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.png

S32K3 オートモーティブ-RTD 

Re: S32K388 GMAC0 Eth_43_GMAC driver not getting RX interrupt

こんにちは、 @James_Zhang_SE さん

添付のプロジェクトを確認しました。RTD7.0.1でRX IRQを有効にするには、Ingress QueueHandlerFunctionを変更してQueueInterruptを有効にする必要があります。

PavelL_0-1788263577590.pngPavelL_0-1788263577590.pngPavelL_0-1788263577590.pngPavelL_0-1788263577590.pngPavelL_0-1788263577590.png

その変更後、GMAC_RxIRQHandler() でブレークポイントに到達しました。Eth_43_GMAC_Receive() にて。

また、RGMII TXCLKが入力として定義されていますが、出力として定義されるべきです。

ただし、WiresharkでTXフレームを見るには、イニットシーケンスを適切に変更する必要があります。 例S32K388 GMAC0 lwIP FreeRTOS S32DS 3.6.1 RTD600 。あなたのプロジェクトでは、次のように見え ます:

PavelL_1-1788264277735.pngPavelL_1-1788264277735.pngPavelL_1-1788264277735.pngPavelL_1-1788264277735.pngPavelL_1-1788264277735.png

よろしくお願いいたします。

パベル

Re: S32K388 GMAC0 Eth_43_GMAC driver not getting RX interrupt

こんにちは、パベルさん。

サポートありがとうございます。ご提案の修正を適用した後、GMACドライバーが動作するようになりました。

いくつか追加の質問がありますので、ご教示いただければ幸いです。

  1. GMACドライバーの設定や使用手順を完全に説明した詳細なドキュメントはありますか?まずは自分でドキュメントを確認して、ドライバのことをもっと理解したいと思っています。
  2. EthIf_RxIndication()の中で、呼び出す必要がありますか?
    Eth_43_GMAC_ReleaseRxBuffer(CtrlIdx, RxHandleId);
    関数の最後に受信バッファを解放する処理はありますか?
  3. GMACの設定オプションは数多く用意されています。各設定パラメータが何をするのか、どのように設定すべきかを説明するドキュメントや参考文献はありますか?

ご協力ありがとうございました。皆さんのサポートに本当に感謝しています。

Re: S32K388 GMAC0 Eth_43_GMAC driver not getting RX interrupt

こんにちは、 @James_Zhang_SE さん

最新情報のご共有ありがとうございます。GMACドライバーが今あなたのために使えるようになったと聞いて安心しました。

追加のご質問について:

1.ドライバーの設定および使用に関する主な参照は、RTDインストールに含まれているEth_43_GMACユーザーマニュアルです。例:C:\NXP\S32DS.3.6.6_RTD701\S32DS\software\PlatformSDK_S32K3\RTD\Eth_43_GMAC_TS_T40D34M70I1R0\doc\RTD_ETH_43_GMAC_UM.pdf

同じディレクトリに保存されている対応するEth_43_GMAC統合マニュアル(RTD_ETH_43_GMAC_IM.pdf)と、利用可能なGMACサンプルプロジェクトも確認することをお勧めします。
 

2. Eth_43_GMAC_ReleaseRxBuffer() を呼び出す必要があるかどうかは、EthCtrlReleaseResourceAfterReception 設定パラメータによって決まります。

PavelL_0-1789024403441.pngPavelL_0-1789024403441.pngPavelL_0-1789024403441.png

受信後の自動リリースが有効の場合、ドライバーはEthIf_RxIndication()が戻った後にRXリソースを解放するため、明示的にリリースすべきではありません。

自動解放が無効になっている場合、EthIf_RxIndication() が戻った後も、受信バッファは割り当てられたままになります。その場合、アプリケーションは最終的に以下を呼び出さなければなりません。

Eth_43_GMAC_ReleaseRxBuffer(CtrlIdx, RxHandleId);
 

このモードは、アプリケーションが受信データを保持してさらなるプロセッシングを行う必要がある場合に有用です。ただし、バッファはアプリケーションが使用を終えた後に解放されなければなりません。そうしないと、利用可能な受信バッファが最終的に枯渇してしまう。

また、受信したペイロードポインタは、対応するバッファが解放された後は使用しないでください。

3. Eth_43_GMACユーザーマニュアルは個々の構成パラメータの主要な参照資料でもあります。さらに、S32設定ツールでは、対応する設定を選択またはマウスオーバーすると、多くのパラメーターの説明が表示されます。MACフィルタリング、DMA操作、MTLキュー、タイムスタンプ、割り込み状態などのハードウェアレベルの動作については、S32K3リファレンスマニュアルのGMAC/EMAC章を参照してください。

実用的な出発点として、RTDパッケージで提供されているGMACの例を参照することをお勧めします。このページには、lwIPの機能的なサンプルも掲載されています。

https://community.nxp.com/t5/S32K-Knowledge-Base/S32K-Examples/ta-p/1108990


何か問題を感じたら、遠慮なくサポートをお願いしてください。各トピックごとに専用スレッドを設けることが望ましいです。これにより、他のユーザーにとってケースの明確さを保つことができます。

よろしくお願いいたします。

パベル

タグ(1)
評価なし
バージョン履歴
最終更新日:
金曜日
更新者: