組み込みシステム設計者のためのLIN2.0マイコン実装術(中編) ――使用するCPU性能に応じたオプション選び
2) イベント・トリガ・フレーム(event triggered frame)
イベント・トリガ・フレームは,LIN 1.3ではコンフィグレーションの章に項目があっただけでしたが,LIN 2.0で動作が定義されました.LINは基本的にバスの衝突が発生しないしくみになっていますが,このフレームではバスの衝突が起こる可能性があり,それを許可しています.
このフレームは,複数のスレーブに割り当てられた同一機能が,同時に動作することがあまりない場合に使用します.仕様書では,このフレームを用いる例としてドアロック・ノブの監視が挙げられています.かりに無条件フレームを使うとすると,ドアの数だけ問い合わせを行う必要があり,例えば4ドアであればフレーム・スロットを四つ消費することになります.しかし,複数のドアロック・ノブが同時に操作されることはまれです(そもそも,一つのノブが操作されていることすらめったにない).したがって,「変更があったら手を挙げて」と,すべてのドアに対していっせいに問い合わせれば,ほとんどの場合は1フレーム・スロットですみます.
動作の詳細を図7に示します.
最初のフレーム・スロットで,マスタはイベント・トリガ・フレームを送信しています.無条件フレームですべてのノードにブロードキャストする場合と似ていますが,ここではヘッダのみでレスポンスはマスタ・ノード(のスレーブ・タスク)からは送信しません.
図7の最初の例では,不運なことに(?)スレーブ1とスレーブ2の両方でイベント(例えばドアロック・ノブの操作)があった場合を示しており,両方からレスポンスが返されています.マスタはこのときバス上の衝突を検出して,複数のスレーブ・ノードでイベントが発生したことを知ります.この場合は,やむを得ず従来の方法で無条件フレームを使ってノード一つずつに問い合わせを行います(あるいは,この場合は次に述べるスポラディック・フレームを使うのが合理的).これが,図7の2番目と3番目の通信例に相当します.
4番目の通信は,マスタからの問い合わせ時にどのノードでもイベントが発生していなかった場合です.このときはすべてのノードがレスポンスを返さず,マスタはフレーム・スロットのタイムアウトでイベント発生がなかったことを認識します.5番目は特定のノード(この場合はスレーブ2)でイベント発生があった場合です.スレーブ2のみがレスポンスを返しています.