ボードに書き込んでCANメッセージを送る。
送信関数はOKを返すのに、アナライザーには同じフレームがまた現れる。
コードは成功と言い、バスは再試行を続けている。
ここでは、関数呼び出しの成功と通信の成功を分けて考えたい。
OKはコントローラーが送信要求を受け付けたという意味かもしれない。別のノードがフレームを受け取った証拠ではない。
CANフレームの終わり近くにはACKスロットがある。送信ノードはそこでバスをリセッシブにし、フレームを正常に受信した別のノードがドミナントにする。
ベンチに動作中のノードが一つしかなければ、応答する相手はいない。送信側はACKエラーを検出し、自動再送が有効なら同じフレームを再び送る。
そこでコードをさらに追う前に、波形のACKスロットと送信エラーカウンターを見る。配線、ビットレート、終端抵抗も確認する。
条件を合わせた二つ目の動作中ノードを接続してACKがドミナントになり、再送が止まれば、何が欠けていたかが見えてくる。
ただしACKがあっても、意図したアプリケーションがメッセージを処理したとは限らない。
送信要求、バス上の確認、プログラムでの処理は、それぞれ別の段階だ。
コメントを読み込んでいます。