組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
● ブレーク検出の三つの方法
まず,ブレークをどのように検出するかですが,これには三つの方法が考えられます.
一つ目は,UARTのフレーミング・エラーを利用する方法です注1.この場合の注意点は,ノードのマイコンはかならず水晶などの精度の高い発振器で動作していなければならないことです.
実装例をリスト1に示します.これは,LIN 2.0仕様にある,フレーム途中のブレーク検出にフレーミング・エラーを利用している場合のものです.この関数はエラー発生時の割り込みハンドラです注2.ブレークの判定は16~17行目(薄い灰色の部分)で行っています.UARTがフレーミング・エラーで,かつ受信データがゼロであれば,ブレーク検出を意味します.ただし,フレーム途中のロー・パルス検出は,かならずしもブレークとはいえない場合があるので,対策が必要です.イベント・トリガ・フレーム時のレスポンスの衝突で,ロー・パルスが合成されてしまうことがあるためです.詳細は次の同期バイト処理のところで述べます.
フレーム途中のブレークはエラー発生とみなす必要がありますが,イベント・トリガ・フレームにおける衝突は,スレーブとしては単に無視するだけです.19行目(濃い灰色で示した部分)はその判断を行っており,その後,同期バイトの処理を呼んでいます.
注1;プロトコル仕様上の規定,および技術的な原理については中編を参照.
注2;78K0/Kxシリーズでは,UARTのエラー時に専用の割り込みを発生できる.
リスト1 UARTのフレーミング・エラーを利用したブレーク検出