組み込みシステム設計者のためのLIN2.0マイコン実装術(前編) ――プロトコル仕様を正しく読みこなすコツ
次章の"WORK FLOW CONCEPT"では,LINクラスタ開発の際のしくみについて概要が示されています(図3).
"NODE CONCEPT"の章ではソフトウェア構造について述べられています.LIN 1.3の仕様書よりも図がわかりやすくなりました(図4).要は,図4のとおりの階層構造のソフトウェアにしなさいということです.API(application program interface)から物理リソース制御(UARTやポート,内部タイマなど,LIN通信に必要となるマイコンのハードウェアの制御)までを,通常,LINドライバと呼ばれるソフトウェアで処理します.多くの場合,半導体メーカやツール・ベンダの設計者がこの部分の開発を担当することになります.一方,セット・メーカの設計者はAPIの仕様を遵守してアプリケーションを作成します.実際には,マイコンの限られたリソースの中で実装しなくてはならないため,いろいろな妥協が必要になります.例えば,速度優先のためにグローバル変数を多用することなどが挙げられます.これには,性能と引き換えにモジュール間やプログラム階層間のインターフェースがあいまいになってしまうという副作用があります.
アプリケーションもドライバも両方開発しなければならない設計者は,APIの境界だけは遵守しておくべきでしょう.図4のように,APIはノードの機能を実現するアプリケーションとLINプロトコルを実現するドライバの境界です.アプリケーションの中でハードウェアに依存する記述を行ったり,LINドライバ内部で管理している情報へAPIを介さずに直接アクセスするような構造をとると,移植性や拡張性が大きく損なわれるだけでなく,(ドライバ部分も含めた)ソフトウェア全体の信頼性も低下してしまいます.
図3 LINクラスタの開発フロー例
スレーブ・ノードはLINクラスタを形成するマスタに接続される.該当するノード機能ファイルは,システム定義プロセスにおいてLIN記述ファイルを生成するシステム定義ツールによって解析される.LIN記述ファイルはシステム・ジェネレータによって解析され,希望するノード(図の例ではマスタおよびスレーブ3)のLIN機能を生成する.また,LIN記述ファイルはバス・アナライザやエミュレータでクラスタ・デバッグの際に使用される.
図4 ノード構造
太線が内部的なインターフェースとなる.通常,物理層はUARTやポートである.APIが,ノードのアプリケーションとのインターフェースであり,ソフトウェア資産化のためにも仕様の堅守が重要.