組み込みシステム設計者のためのLIN2.0マイコン実装術(中編) ――使用するCPU性能に応じたオプション選び
● パルス幅の測定は時間的制約やCPU性能を考えて選択
ブレークの次に来る同期バイト(synch byte)は,通信レート同期のためのフィールドです.LIN 1.3では同期フィールド(synch field)という名称でした.
マスタ・タスクは,単にUARTで0x55を送信するだけです.一方,スレーブ・タスクは複数の処理手段が考えられます.水晶などの高精度の発振を利用していて十分な精度が見込まれる場合,単にUART受信を行って結果が0x55であることを確認するというのが,処理的にはもっとも簡単な方法です.精度の高くない発振回路を使用して仕様に忠実に設計する場合,タイマなどを利用してパルス幅を計測する処理が必要となります.
このあたりの詳細は"LIN Physical Layer Specification"の"Bit TIMING REQUREMENTS AND SYNCRONIZA-TION PROCEDURE"という章で記述されています.(理由はわからないが)パルス幅は立ち下がりエッジ間で計測しなければならないと記述されているので,実際の設計・実装でも仕様と一致しておいたほうがよいでしょう.また,計算を簡単にするため,2,4,6,8ビット・タイムの距離で計測するとも記述されています.非力なマイコンでは比較的重い処理になるので,シフト演算1回で計算できる6ビット以外を選ぶとよいでしょう.
なお,プロトコル仕様書ではスタート・ビットの立ち下がりからビット7の立ち下がりまでの8ビット分を計測して,1/8にする方法が推奨されています(図4).この場合,計測完了から同期バイトのストップ・ビットの終わりまで2ビット分の時間しかないので,とくに非力なマイコンの場合,ボーレート補正処理が同期バイトの次に来る保護IDの受信開始までに終了するかどうかを十分に検討しなくてはなりません.
十分な時間的余裕が見込まれるなら8ビットで,ややリスキーなら4ビットで計測というのが,実際の設計における選択肢になろうかと思います.
図4 ボーレート計測
仕様書ではスタート・ビットの立ち下がりからビット7の立ち下がりまでの8ビット分を計測して,1/8にする方法が推奨されている.