2387997_ja-JP

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

2387997_ja-JP

2387997_ja-JP

S32K3MCU SENDの遅いチャネルがデータを受信できません。

こんにちは、みんな

私はS32K311のSENDインターフェースを使ってデータを受け取っていますが、高速チャネルは通常通りデータを受信しているのに、遅いチャネルはデータを受け取れない状況に遭遇しました。

また、送信エラー通知機能を監視していますが、例外はありません。

MCUはS32K311

RTDバージョン:S32DS 3.6.2RTD6.0.0

SENT センサ:センサタ圧力センサ強化スローメッセージ

まず、SENTロジックは「Flexio_Sent_Ip_ProcessSerialMsg」関数で処理され、その後外層関数で「Data->SerialState」と「FastMsgCount」変数を監視して、遅いチャネルが受信データを完了しているかを判断していることがわかっています。

khty_0-1782783940723.png


SO、関連するビット情報を取得しました。

bit(x) : SENT Fast チャネル Status ニブルビット

S : " STATUS_SENT_SERIAL_SHORT"

E : " STATUS_SENT_SERIAL_ENHANCED"

khty_3-1782786765437.png


遅いチャネルの解析ロジックが繰り返しジャンプしていて、通常通り解析できないことがわかりました。

ある状況でSENTのプロセッシングロジックにエラーはありますか?


よろしくお願いします。



Re: S32K3MCU SENT slow channel Cannot receive data.

こんにちは、 @khty さん

センサタセンサーの送信済み設定を共有してもらえますか?画像から、位置8のビットCは0に設定されているのがわかります。8ビットのメッセージID、12ビットのデータフォーマットが使われていると仮定しています。

あなたの高速チャネルは正しく受信されており、SENDエラー通知も報告されていないので、問題はプロセッシング機能に関連していると理解しています。

チャネル受信の遅さに関する既知の問題は見つかっていません。しかし、社内チームと話し合いを始めたので、この問題についてさらに情報を得ようとします。

最後に、少なくとも18フレーム連続した送信済みフレームの完全なキャプチャを提供していただけますか?これにより、RTD状態機械の挙動が期待される強化シリアル復号シーケンスに合致しているかどうかをさらに確認できます。

よろしくお願いします、
ジュリアン

Re: S32K3MCU SENT slow channel Cannot receive data.

こんにちは。私の質問に迅速にご回答いただき、ありがとうございます。

センサタが提供するセンサー構成情報は以下の図に示されています。

khty_0-1783154149669.png



前回のご要望につき、少なくとも18個の連続した送信フレームの完全なキャプチャを「bitChange.xlsx」に含めました。付録のファイルを参照してください。

表には、キャプチャされた各ステータスハーフワードの2番目と3番目のビットを表示しました。

表の各列は、送信されたメッセージを表しています。それぞれの大きな黒い四角い枠は、1つのslowChannelメッセージを囲んでいます。青色の部分はID領域、緑色の部分はCRC領域、黄色の部分はデータ領域です。下部の情報は手動分析の結果です。

khty_1-1783154875344.png


他に何か情報が必要な場合はお知らせください。できるだけ早くお返事いたします。

Re: S32K3MCU SENT slow channel Cannot receive data.

SOC側からのエラーログはありますか?

Re: S32K3MCU SENT slow channel Cannot receive data.

SENTのFASTエラー通知とSLOWエラー通知は、エラーを報告していません。

「bitchange.xlsx」に記録されたデータを読むことができます。分析のために、私が記録した高速チャネルの各ステータスハーフワードの2ビットと3ビットに関する情報が含まれているためです。Bit1とBit0の情報は、スローチャネルでは意味がないため破棄されます。

同時に、遅いチャネル情報は手動で解析し、黒い四角で識別しました。


「bitchange.xlsx」では、「State」行のデータはコード内の「 Flexio_Sent_Ip_axFastData[Instance][ChannelId].SerialState 」に対応します。これは、遅いチャネルが「ショート」か「エンハンスド」かを検出・識別する役割を担っています。「count」は「Flexio_Sent_Ip_axFastData[インスタンス][ChannelId]」を表します。FastMsgCount」は、遅いチャネルの受信長をカウントする役割を担っています。


スローチャネルのデータが受信できない理由は、コードがスローチャネルが「ショート」か「エンハンスド」かを正しく識別できないからだと思います。「bitchange.xlsx」を読むと、識別状態が「STATUS_SENT_SERIAL_IDLE」「STATUS_SENT_SERIAL_SHORT」「STATUS_SENT_SERIAL_ENHANCED」の間を絶えず行き来していることがわかります。

khty_0-1783299454656.png

識別状態が遷移すると、「Flexio_Sent_Ip_ProcessSerialMsg()」関数は「STATUS_FLEXIO_SENT_IP_ERROR」を返しますが、この返り値は上位関数「Flexio_Sent_Ip_DmaDataProcessing()」のSerialStateFastMsgCountをリセットするだけで、SentFastErrorNotif()を呼び出すことはありません。そのため、高速エラー通知からエラー情報を取得できません。


「bitChange.xlsx」内

khty_1-1783300326735.png

この時点で列Tから始めることができます。この時点で SerialState = STATUS_SENT_SERIAL_IDLEFastMsgCount = 0です。
列Uを受け取ると、 Flexio_Sent_Ip_ProcessSerialMsg()はbit3 == 1と認識するため、これをスローチャネルの開始信号とみなし、 SerialState = STATUS_SENT_SERIAL_SHORTFastMsgCount = 1を設定します。
V,Flexio_Sent_Ip_ProcessSerialMsg() は bit3 =0 を認識し、 SerialState = STATUS_SENT_SERIAL_SHORT のまま FastMsgCount = 2 を増分します。
列Wを受け取ると、 Flexio_Sent_Ip_ProcessSerialMsg()はbit3 == 1を信じます。この時点で FastMsgCount == 2なので、 STATUS_SENT_SERIAL_ENHANCEDへのジャンプ条件を満たさず、 STATUS_FLEXIO_SENT_IP_ERRORだけ戻すことができます。Flexio_Sent_Ip_DmaDataProcessing () では、 SerialStateFastMsgCountをリセットします。



ちなみに、私はDMAを使ってSENTデータを受け取っており、DMA受信方法に問題があることを確認しただけです。現時点では、割り込みやポーリング方法にも同じ問題があるかどうか確認できません。

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