こんにちは、みんな
私はS32K311のSENDインターフェースを使ってデータを受け取っていますが、高速チャネルは通常通りデータを受信しているのに、遅いチャネルはデータを受け取れない状況に遭遇しました。
また、送信エラー通知機能を監視していますが、例外はありません。
MCUはS32K311
RTDバージョン:S32DS 3.6.2RTD6.0.0
SENT センサ:センサタ圧力センサ強化スローメッセージ
まず、SENTロジックは「Flexio_Sent_Ip_ProcessSerialMsg」関数で処理され、その後外層関数で「Data->SerialState」と「FastMsgCount」変数を監視して、遅いチャネルが受信データを完了しているかを判断していることがわかっています。
SO、関連するビット情報を取得しました。
bit(x) : SENT Fast チャネル Status ニブルビット
S : " STATUS_SENT_SERIAL_SHORT" 。
E : " STATUS_SENT_SERIAL_ENHANCED"
遅いチャネルの解析ロジックが繰り返しジャンプしていて、通常通り解析できないことがわかりました。
ある状況でSENTのプロセッシングロジックにエラーはありますか?
よろしくお願いします。
こんにちは、 @khty さん。
センサタセンサーの送信済み設定を共有してもらえますか?画像から、位置8のビットCは0に設定されているのがわかります。8ビットのメッセージID、12ビットのデータフォーマットが使われていると仮定しています。
あなたの高速チャネルは正しく受信されており、SENDエラー通知も報告されていないので、問題はプロセッシング機能に関連していると理解しています。
チャネル受信の遅さに関する既知の問題は見つかっていません。しかし、社内チームと話し合いを始めたので、この問題についてさらに情報を得ようとします。
最後に、少なくとも18フレーム連続した送信済みフレームの完全なキャプチャを提供していただけますか?これにより、RTD状態機械の挙動が期待される強化シリアル復号シーケンスに合致しているかどうかをさらに確認できます。
よろしくお願いします、
ジュリアン
こんにちは。私の質問に迅速にご回答いただき、ありがとうございます。
センサタが提供するセンサー構成情報は以下の図に示されています。
前回のご要望につき、少なくとも18個の連続した送信フレームの完全なキャプチャを「bitChange.xlsx」に含めました。付録のファイルを参照してください。
表には、キャプチャされた各ステータスハーフワードの2番目と3番目のビットを表示しました。
表の各列は、送信されたメッセージを表しています。それぞれの大きな黒い四角い枠は、1つのslowChannelメッセージを囲んでいます。青色の部分はID領域、緑色の部分はCRC領域、黄色の部分はデータ領域です。下部の情報は手動分析の結果です。
他に何か情報が必要な場合はお知らせください。できるだけ早くお返事いたします。
SOC側からのエラーログはありますか?
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」の間を絶えず行き来していることがわかります。
識別状態が遷移すると、「Flexio_Sent_Ip_ProcessSerialMsg()」関数は「STATUS_FLEXIO_SENT_IP_ERROR」を返しますが、この返り値は上位関数「Flexio_Sent_Ip_DmaDataProcessing()」のSerialStateとFastMsgCountをリセットするだけで、SentFastErrorNotif()を呼び出すことはありません。そのため、高速エラー通知からエラー情報を取得できません。
「bitChange.xlsx」内
この時点で列Tから始めることができます。この時点で SerialState = STATUS_SENT_SERIAL_IDLE、 FastMsgCount = 0です。
列Uを受け取ると、 Flexio_Sent_Ip_ProcessSerialMsg()はbit3 == 1と認識するため、これをスローチャネルの開始信号とみなし、 SerialState = STATUS_SENT_SERIAL_SHORT、 FastMsgCount = 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 () では、 SerialStateとFastMsgCountをリセットします。
ちなみに、私はDMAを使ってSENTデータを受け取っており、DMA受信方法に問題があることを確認しただけです。現時点では、割り込みやポーリング方法にも同じ問題があるかどうか確認できません。