CAN-LINゲートウェイのソフトウェア・モジュールの実装 ――高い信頼性を確保して異なるプロトコル通信間をつなぐ
● バッファのサイズはCANよりLINを大きくとる
ゲートウェイ処理を行っている最中に,さらにゲートウェイを要求するデータが到来すると,処理しきれない場合があります.CANとLINではひとけた以上もの速度差があります.このため,上記のような問題はCANからLINへの送信時にとくに顕著に現れます.逆にCANへ送信する場合も,たまたまCANバスが混んでいると,ゲートウェイ処理が滞ってしまいます.
これらの問題を回避するため,データのバッファリングを行いますが,方法としては次の2通りが考えられます.
- 受信したデータをそのまま保存しておき,順次取り出す(受信バッファにためる)
- データ受信後すぐに変換データを生成し,メッセージ送信要求を保存する(送信バッファにためる)
今回は,メッセージ送信要求をバッファリングする手法をとっています(図14).バッファ・サイズはシステムの要求に依存します.一般には,LINのほうが低速であるため,通常はLIN用のバッファ・サイズをCAN用のバッファ・サイズよりも大きくとっておきます.
確保したバッファ・サイズを超える量のデータが連続的に送られてきた場合にゲートウェイ処理が間に合わず,バッファあふれを起こしてしまう可能性も考慮しておかなければなりません.単にあふれた分を無視する方法や,エラー検出を行って送信ノードに通知する方法など,いろいろな対策が考えられます.このような過渡的状態のときにゲートウェイがどのようにふるまうのかについては,システム全体を見て設計する必要があります.ゲートウェイを利用するノードは,その特性を知っていなければなりません.今回は,単にエラー検出(エラー・フラグのモニタ)のみを実装しています.
図14 メッセージ・バッファの例
読み出しポインタはバッファからの読み出し位置を,書き込みポインタはバッファへの書き込み位置を示す.