こんにちは。現在、LIN開発にS32K314を使用しています。MCU をマスター モードに設定すると、正常に完全なフレームをバスに送信できますが、スレーブ デバイスからの応答を受信しようとすると失敗します。原因を特定するためにデバッグを使用しようとしました。図に示すように、完全なフレームを送信する場合はボックス内の関数をCAN呼び出すことができますが、応答を受信する場合は、ここでブレークポイントを設定し、この関数を実行できませんでした。変数では、if (LinCurrentState->IsBusBusy) の結果が true であることが確認できます。バスが混雑状態に入ったと暫定的に判断されます。完全なフレームが送信されるとバスは正常であるのに、スレーブ ノードからの応答を受信するとビジー状態と表示されるのはなぜですか?また、これら 2 つの方法を個別にテストし、完全なフレームの送信とスレーブ ノード応答の受信を同時に実行しませんでした。問題の原因がわかっている場合は、解決にご協力ください。これは私にとってとても重要です。ありがとう。
メインモードでスレーブデバイスからの応答を受信するための私の関数をご覧ください。問題がなければ、スレーブデバイスから問題のトラブルシューティングに進みます。
こんにちは@Aoyng 、
マスターノードの構成に問題は見当たりません。
オシロスコープ上でスレーブ ノードからの応答が表示されない場合、問題はマスターではなくスレーブ ノードにあります。
BR、ダニエル
こんにちは。オシロスコープを使用してバスを表示すると、波形が表示されません。ただし、メインモードを使用してデータを送信CAN。私の設定を見て、問題がないか確認してください。
定数 Lpuart_Lin_Ip_UserConfigType Lpuart_Lin_Ip_Sa_pHwConfigPB_0_BOARD_INITPERIPHERALS =
{
1U、/*!< ハードウェアインスタンス */
0x82, /*!< ボーレート除数 */
16U, /*!< ボーレート OSR */
(ブール値)LPUART_LIN_IP_MASTER, /*!< マスターノード */
LPUART_LIN_IP_BREAK_CHAR_13_BIT_MINIMUM_U8, /*!< ブレーク文字の長さが送信されます */
(uint8)1U, /*!< ブレーク文字の長さを検出CAN */
#if (LPUART_LIN_IP_AUTO_BAUD == STD_ON)
(boolean)FALSE, /*!< 自動ボーレート機能 */
#endif
(Lpuart_Lin_Ip_CallbackType)Lin_Callback、/*!< バイトを受信または送信した後に呼び出すコールバック関数。*/
&Lpuart_Lin_Ip_axStateStructure[0U], /*!< ランタイム状態構造体参照 */
#if (LPUART_LIN_IP_FRAME_TIMEOUT_DISABLE == STD_OFF)
#ifdef LPUART_LIN_IP_START_TIMER_NOTIFICATION
2292U, /*!< HeaderTimeoutValue(マイクロ秒単位)*/
73U, /*!< 1バイトのResponseTimeoutValue(マイクロ秒)*/
#endif
#endif /* (LPUART_LIN_IP_START_TIMER_NOTIFICATION == STD_OFF) */
(uint8)0, /*!< ウェイクアップパルス468.75usを生成するためのウェイクアップバイト */
(uint8)1, /*!< ウェイクアップパルス104.16666666666667us検出をチェックするために使用するバイト */
40000000U /*!< チャネルクロック */
};
こんにちは@Aoyng 、
フレームが実際に送信されていることを確認するために、オシロスコープでスレーブの応答をチェックできますか?
また、タイミングの不一致によりマスターが応答を検出できなくなることが多いため、スレーブの LIN ボーレートがマスターと一致していることも確認してください。
信号とボーレートが正しいように見える場合、問題は割り込み処理に関連している可能性があります。そのCASEは、LPUART 割り込み構成と対応する NVIC 設定 (レジスタ内も) の両方を確認して、割り込みが適切に有効になっていることを確認してください。
よろしくお願いいたします。
ダニエル
こんにちは@Aoyng 、
SduPtrは有効である必要があります。
BR、ダニエル