車載半導体と機能安全
CANで、2つのノードが同時にフレームを送り始めたときの動作として正しいものはどれか。
- A2つのフレームが衝突して両方とも壊れるので、両方のノードがランダムな時間だけ待ってから送り直す
- BIDの値が小さい(優先度が高い)フレームがそのまま送信を続け、負けたノードは送信をやめて後で送り直すので、勝ったフレームは壊れない
- CIDの値が大きいフレームが優先され、IDの値が小さいフレームは捨てられて送り直されない
答えと解説を見る
正解:B. IDの値が小さい(優先度が高い)フレームがそのまま送信を続け、負けたノードは送信をやめて後で送り直すので、勝ったフレームは壊れない
CANのバスでは、0(ドミナント)と1(リセシブ)が同時に出されると0が勝ちます。送信中のノードは自分が出したビットとバスの状態を1ビットずつ比べ、1を出したのに0が見えたら調停に負けたと判断して送信をやめます。IDは先頭から送られるので、値の小さいIDほど優先度が高くなり、勝ったフレームは壊れずにそのまま届きます。これを非破壊調停と呼びます。衝突後にランダムな時間待つのは、昔のイーサネットのCSMA/CDの方式です。