• 検索結果がありません。

Implementing a LIN Slave Node on a PIC16f73

N/A
N/A
Protected

Academic year: 2021

シェア "Implementing a LIN Slave Node on a PIC16f73"

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)

AN237

はじめに

本書では、EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter) モジュールを内蔵 した8ビットPIC®マイクロコントローラ向けの LIN 2.0 スレーブドライバについて説明します。EUSART は、 LIN アプリケーションをサポートするための機能 (baud レート自動検出 / 校正、ブレーク受信時の復帰、13 ビッ トのブレーク文字送信等 ) が追加された拡張型の UART です。本書では、MPLAB® Code Configurator (MCC) を 使って LIN ドライバを開発する方法も紹介します。LIN システムの設計者がアプリケーションを LIN 上で動作 させる事が素早くできるよう、本書は主に MMC のセッ トアップ方法とMCCが生成するドライバの使い方の説 明に重点を置いています。本書では PIC16F1783 を使 いますが、EUSART モジュールを内蔵した 8 ビット PIC マイクロコントローラであればどれでも使えます。 本書の内容は、読者が LIN 仕様 v2.0 を熟知している事 を前提としています。従って、LIN 全般について詳細 に解説しません。補足情報については、本書の「参考 資料」を参照してください。

LIN プロトコル

LIN (Local Interconnect Network) は、車載および電化 製品を含む様々なネットワークに低コストのバス通信 を提供します。LIN プロトコルは、データ通信に関す るシステム開発ガイドラインを提供します。LIN の主 な特長は以下の通りです。 • 低コストの単線式 • 単一マスタと複数スレーブ ( 最大 16 個 ) • スレーブは 2K ~ 20K の任意の baud レートに同期 可能 • マスタの速度に対するスレーブの自己同期 • シリアル UART に類似するデータ書式 • データ チェックサムおよびビットエラー検出によ る動作信頼性

LIN 2.0 と LIN 1.x の互換性

LIN 2.0 は LIN 1.x の上位規格です。LIN 2.0 仕様の ノードと LIN 1.x 仕様のノードは、いくつかの例外を 除き、互いに通信できます。LIN 2.0 マスタノードは、 LIN 1.1 x ノードに対して以下の新しい LIN 2.0 機能を 要求する事はできません。 • 拡張チェックサム • 再構成と診断 • baud レートの自動検出 • 応答エラーステータスの監視 LIN 2.0 スレーブノードは、 再構成しない限り LIN 1.x マスタと通信できません。

アプリケーション

最初に持ち上がる疑問は「このアプリケーションにこ のドライバは使えるのだろうか」という事です。以下 の各項目には、この疑問の答えを見付け、それがアプ リケーションに適したドライバ実装 ( またはデバイス ) かどうかを素早く判断するために役立つ情報を記載し ています。これを判断するには、利用可能な処理時間、 リソース使用量、ビットレート性能が極めて重要な要 因となります。

処理時間

処理時間は主にビットレート、クロック周波数、コー ド実行によって決まります。これが LIN 通信向けに EUSART モジュールを推奨する理由です。このハード ウェア リソースは、より多くの処理をハードウェアで 負担する事により、ファームウェアの処理負荷を軽減 します。従って、平均ファームウェア処理時間は比較 的低く抑えられます。表 1に、FOSC = 16 MHz の場合 の平均ファームウェア処理時間の概略値を示します。 LIN バスがアイドル状態である場合、ドライバが要す る処理時間は約 1% (@ 16 MHz) に減少します。

Author: Dinesh Baria

Microchip Technology Inc.

表 1: ファームウェア処理時間 ビットレート (bps) ファームウェア処理時間 (%) 2000 2.7 2400 3.2 9600 13 10417 14 20000 27

8 ビット PIC

®

マイクロコントローラで

EUSART を使って LIN スレーブモードを実装する方法

注意 : この日本語版文書は参考資料としてご利用ください。最新情報 は必ずオリジナルの英語版をご参照願います。

(2)

リソース使用量

PIC16F1783 ( または他の EUSART モジュール内蔵デ バイス ) に要求されるリソースは以下の通りです。 • EUSART モジュール - 通信用 • Timer1 モジュール - バスとフレームのタイミング用 • プログラムメモリ - 885 ワード ( ファームウェア LIN ドライバ用 ) • データメモリ - 22 バイト

ビットレート

本ドライバは、LIN 仕様が定義する最大ビットレート (20000 bps) を達成するよう設計されています。ブレー クと同期フィールドを正しく検出できるよう、内部ク ロックは高精度かつ同期している事が必要です。マス タがクロック周波数を定義します。全てのスレーブは、 ヘッダ内の同期フィールド中に内部クロックを同期さ せます。LIN 仕様によると、完全な LIN フレーム ( ヘッ ダと応答を含む ) に対して許容されるクロック偏差は ±2% 未満です。

まとめ

LIN スレーブドライバは負荷の高い処理の大部分を EUSART モジュールに負担させるため、処理時間を心 配する必要はほとんどありません。EUSART モジュー ル以外に必要なリソースは Timer1 だけです。このタ イマはビットレート周期で割り込みます。従って、ド ライバはアプリケーションに大きな支障を来す事な く、バックグラウンドで事実上透過的に動作できます。 本ドライバはリソース ( 処理時間を含む ) をほとんど 消費しないため、リソースへの要求が高いアプリケー ションに適しています。

ドライバのセットアップ

アプリケーションのビルドを始める前にファームウェ アをセットアップします。EUSART と Timer1 向けの モジュール ドライバは、MLPAB Code Configurator を 使ってを設定および生成できます。LIN ドライバファ イル ( 本書の「補遺 A」参照 ) をプロジェクトにイン クルードする必要があります。

ドライバをセットアップする前に MPLAB X IDE、XC8 コンパイラ、MPLAB Code Configurator (MCC) プラグ インをインストールしておく必要があります。プロ ジェクトのセットアップに必要な基本手順は以下の通 りです。 1. MPLAB X IDE 内で新規にプロジェクトを作成す るか、既存のプロジェクトを開きます。 2. MCC プラグインツールを起動します (MPLAB X IDE のメニューバーで [Tools] > [Embedded] を 選択し、[MPLAB Code Configurator] をクリッ ク )。

3. 「Project Resources」エリアで [System] モジュー ルをクリックすると「Composer」エリアにコン フィグレーション ビット設定 GUI が表示されま す。ここでデバイス コンフィグレーション ビッ トを設定します。EC/HS/XT オシレータを使う場 合、システム周波数も入力します。図 1内の太線 で囲んだ項目に注目してください。

4. 「Device Resources」エリアから Timer1 と EUSART 非同期 (NRZ) モジュールを選択します。これらの モジュールをダブルクリックすると、「Project Resources」エリアにモジュールが表示されます。 ア プ リ ケ ー シ ョ ン で 使 う 他 の モ ジ ュ ー ル も、 「Project Resources」エリアに移動できます。 5. 「Project Resources」エリアで EUSART 非同期

(NRZ) モジュールを選択し、図 2に示すように設 定 し ま す。一 部 の マ イ ク ロ コ ン ト ロ ー ラ (PIC16F1708 等 ) はペリフェラル ピンセレクト (PPS) 機能を備えています。この機能を使うと、 マイクロコントローラが内蔵する周辺モジュール の多くを任意のピンに割り当てる事ができます。 GPIO ピンを EUSART TX および RX ピンとして 設定するには、「Pin Manager」ウィンドウでそれ らの GPIO ピンをロックする必要があります。 6. 「Project Resources」エリアで Timer1 モジュール

を選択し、図 3に示すように設定します。タイマ 周期値は、LIN 通信に要求されるビットレート値 と同じです。下式により、EUSART の baud レー トに基づく Timer1 のビット時間が求まります。 T = 0xFFFF – (BRG+1) /PR T は TMR1 レジスタが格納する 16 ビット値です。 BRG は baud レートタイマ (SPBRGH:SPBRGL) の 16 ビット値です。PR は Timer1 のプリスケー ラ値です。

(3)

図 1: システム モジュール GUI

(4)

図 3: Timer1 設定 GUI

7. 「Project Resources」エリアに移動した他のモ ジュールも設定します。

8. 「Project Resources」エリアで「Interrupt Manager」 モジュールを選択し、アプリケーション要件に応 じて割り込み優先度を変更します( 図 4参照 )。 9. 全 て の モ ジ ュ ー ル の 設 定 を 終 え た ら、 「Composer」エリアの最上部にある [Generate Code] ボタンをクリックしてドライバとイニシャ ライザを生成します。生成したドライバは、作業 中の MPLAB X IDE プロジェクトに取り込まれま す (図 5参照 )。

10. LIN ドライバファイル (lin.c、lin.h、lin_app.c、 app.h) をプロジェクトに追加します。これらの ファイルはサンプル プロジェクト内にあります。 図 4: 割り込みマネージャ GUI

(5)

図 5: [PROJECTS] ウィンドウ 11. mcc.h および mcc.c ファイルは、コンフィグレー ション ビットと oscillator_initializer の 定義を含みます。また、system_initializer 関数も含みます。この関数は、他のイニシャライ ザ (EUSART イニシャライザ、Timer1 イニシャラ イザ等 ) を内部で呼び出すアプリケーション プロ グラム内で呼び出す必要があります。 12. pin_manager.h および pin_manager.c ファイ ルは、ピンマネージャ GUI での設定に基づくピン マネージャ イニシャライザ関数を含みます。 13. interrupt_manager.hおよびinterrupt_manager.c ファイルは割り込みイニシャライザと割り込み サービスルーチンを含みます。 14. tmr1.h および tmr1.c ファイルは Timer1 設定 関数を含みます。

15. eusart.hおよび eusart.c ファイルはEUSART 設定関数を含みます。

16. lin.h および lin.c ファイルは LIN 設定関数を 含みます。lin.h ファイルは、lin.c 内で定義さ れている関数の新しい型とプロトタイプの定義を 含みます。 17. lin_app.h および lin_app.c ファイルはアプ リケーション インターフェイスであり、ユーザが 書く必要があります。適切な ID に応答するよう、 これらのファイルを編集します。これにはテーブ ルまたは単純な比較ロジックが使えます。これら により、ユーザはアプリケーションに応じた LIN 通信を定義できます。

(6)

18. アプリケーションに関連する任意のファイルを 追加します。本書の例では、特定の ID に対応す る ア プ リ ケ ー シ ョ ン 関 連 関 数 の た め に lin_xxxevent.c を使います。 19. main.c ファイルはプログラム内のエントリポイ ントを格納します。このファイルはアプリケー ション要件に応じて編集します。割り込みを正し く設定し、ドライバを初期化する必要があります。 また、全ての外部シンボルを含める必要がありま す。LIN ドライバと一緒にビルドする完全なアプ リケーション コードについては、「補遺 A」を参 照してください。

プロジェクト

最初に、MPLAB X IDE 内でプロジェクトをセットアッ プします。図 5に、プロジェクト セットアップの例を 示します。LIN ドライバの動作には以下のファイルが 必要です。 • lin.c - ドライバファイル • lin.h - ドライバを設定するためのヘッダファイル • lin_app.h - ノードを設定するためのヘッダファ イル • lin_app.c - LIN イベント処理ファイル その他のアプリケーションに固有のファイルは、ユー ザが定義します。例えば図 5 の場合、これらのプロ ジェクト ファイルは lin_xxxevent.c (xxx は LIN ID イベント名 ) として表示されています。この例では、 プロジェクトの構成を分かりやすくするために、ID 処 理を別々のオブジェクトに割り当てるというプログラ ミング スタイルを採用しています。

メイン オブジェクト

main.c モジュールはプログラムへのエントリポイン トを格納し、そこではドライバ、ハードウェア、変数 を初期化する必要があります。LIN ドライバを初期化 するために LIN_Initializer 関数を呼び出します。 main 関数内でドライバ関数(LIN_Driver) を呼び出 す必要があります (例 1参照 )。この関数内で、受信 バッファを読み出してデータを処理します。 例 1: main エントリポイント eusart.c内のEUSART_Receive_ISR ()関数を例2 に示すように変更する事で、baud レート自動検出機能 を有効にします。 例 2: EUSART RX ISR eusart.h に以下のマクロを追加する事で、自動復帰 機能を有効にし、ステータス レジスタを読み出しま す。

#define EUSART_Status( ) (RC1STA) #define EUSART_EnableAutoWakeUp( ) (BAUD1CONbits.WUE = 1) #define EUSART_HasBreakDetected( ) (!(BAUD1CON & 0x02)) また、tmr1.c ファイル内の TMR1_ISR () 関数は計 時関数を格納します。サンプル ファームウェアはバス タイムアウト用に Timer1 を使いますが、他のタイマ を選択する事もできます。例 3に、割り込み内の配置 を示します。 例 3: TMR1 ISR void main(void) { //System Initialization

//LIN Driver Initialization LIN_Initializer( ); while(1)

{

//Check Data Received if(EUSART_DataReady) {

LIN_Driver( ); }

//Add application code here }

void EUSART_Receive_ISR(void) {

//overrun check code // LIN Implementation if(!EUSART_HasBreakDetected()) { while(!EUSART_HasBreakDetected()); BAUD1CONbits.ABDEN = 1; }

//read buffer code }

Void TMR1_ISR(void) {

//Clear the TMR1 interrupt flag PIR1bits.TMR1IF = 0;

TMR1 += timer1ReloadVal;

//Add your TMR1 interrupt custom code LIN_UpdateTimer( );

(7)

定義

システムをセットアップするために複数のコンパイル 時定義を使います。これらは全て lin.h 内にありま す。表 2に、これらの定義を示します。

LIN イベント

LIN イベント関数では、ID に基づいて次の動作 ( 何を 送信するか、デバイスは何を受信する必要があるか、 何バイトを送受信するか ) を決定します。ユーザは、 各 LIN ID を処理するために、イベント関数を編集また は変更する必要があります。1 つの方法は、ID テーブ ルを作成する事です。この方法は、アプリケーション が複数の ID に応答する必要がある場合に便利です。あ るいは、単純な比較ロジックを使う方法もあります。 サンプルコード (「補遺 A」参照 ) は比較ロジックに基 づきます。

ID モジュール

サンプル ファームウェアでは、各 ID とそれらに対応 する関数を処理するために別々のIDファイルを使いま す。忘れてはならない最も重要な事は、使用する全て の外部シンボルを含める必要があるという事です。ド ライバが使うシンボルは lin_app.h 内にあり、この ヘッダファイルは全てのアプリケーション モジュー ルにインクルードする必要があります。 lin_app.c は、ID イベントの処理に向けてドライバ をセットアップするために使います。この関数を追加 する事で、追加のIDイベントの処理が可能になります。

ドライバの使用

LIN ドライバに必要なファイルと一緒にプロジェクト をセットアップした後に、ドライバが使えるようにな ります。以下ではドライバの使い方について説明しま す。重要な内容は以下の通りです。 • 通信フラグの処理 • エラーフラグの処理 • ドライバ内の状態フラグ • LIN ID イベント • バス復帰 本書のソースコード (「補遺 A」参照 ) は、アプリケー ションでの LIN ドライバの使い方を示す簡潔な例を提 供します。

通信フラグ

ドライバがデータの送受信に成功した事を示すフラグ は 2 種類あります。エラーの発生なくデータの送受信 が完了すると、完了フラグがセットされます。このフ ラグは、処理後にユーザがクリアする必要があります。 もう 1 つのフラグは保留フラグです。これは送受信が 進行中である事を示します。このフラグも処理後に ユーザがクリアする必要があります。

エラーフラグ

期待していた条件が満たされない場合、特定のエラー フラグがセットされます。例えば、スレーブで受信 PID と計算 PID したが一致しない場合、ドライバ内でパリ ティエラー フラグがセットされます。エラーは、処理 されてクリアされるまで致命的であると見なされま す。エラーをクリアしない限り、ドライバは受信デー タを無視し続けます。 例 4に、main プログラムループ内でのエラー処理の 方法を示します。この例はバスタイムアウト エラーへ の対応だけを示していますが、他のエラーにも同様の 方法が適用できます。 例 4: エラー対応 表 2: コンパイル時定義 定義名 値 概要 MAX_IDLE_TIME 25000 最大バスアイドル時間です。LIN 仕様は、この値を 25000 と定義しています。 MAX_HEADER_TIME 39 最大許容ヘッダ時間です。LIN 仕様は、これを 49 と定義しています。しか し最初のバイト ( ブレーク ) が終了するまでタイミングは始まらないため、 実際の値は 39 です ( 定義よりも 10 少ない )。 MAX_TIME_OUT 128 復帰要求が出された後の最大許容待機時間です。 void main(void) { //System Initialization

//LIN Driver Initialization LIN_Initializer( ); while(1)

{

//Check Data Received if(EUSART_DataReady) {

LIN_Driver( ); }

//Check Bus Timeout error

if(l_errflgs_b.bits.LE_TIMEOUT==1) {

(8)

ドライバのステート

LIN ドライバは、受信バイトと受信バイトの間で、各 種のステートに基づいて現在の状態を認識します。 1 バイトを受信した後に、ドライバはこれらのステー トに基づいて次の未実行ステートを決定し、そのス テートへ移行します。

ID イベントとイベント関数

各 ID に対して 1 つのイベント関数が存在します。イ ベント関数は、ID の後のデータにどのように応答すべ きかをドライバに知らせるために必要です。例えば、 ドライバはデータを受信または送信するために準備す る必要があります。また、送受信するデータの量を知 る事も必要です。 正常な動作を得るには、以下の 3 つの変数を初期化す る必要があります。 • データメモリを指すポインタ • フレーム時間 • データ長

バスの復帰

バスを復帰させる必要があるアプリケーションでは、 LIN バス復帰関数 (LIN_SendWakeupSignal) を使い ます。この関数を呼び出すと、復帰要求文字が送信さ れます。

実装

サンプル ファームウェアは、LIN インターフェイスの 動作を制御するために以下の 4 つの関数を使います。 • LIN Transmit/Receive Driver

• LIN Timekeeper • LIN Initialization • LIN Wake-up

ドライバ

EUSART モジュールは LIN 通信の鍵となるエレメント です。EUSART モジュールを LIN バスのシリアルエン ジンとして使う事で、いくつかの利点が得られます。 注目すべき利点は、シリアル制御をソフトウェアでは なくハードウェアで実行するという事です。従って、 データの送受信中に他の処理を実行できます。このた めに、スレーブノード LIN プロトコル ドライバは、 バックグラウンドで ( 基本的にデーモンとして ) 動作 するよう設計されています。 本ドライバは、EUSART 受信割り込みによる割り込み 駆動型です。LIN バスの物理的なフィードバック形態 (図 6) により、EUSART 受信割り込みは送信動作でも 受信動作でも関係なく発生します。加えて、送受信動 作中のエラーを示すために、エラーフラグが維持され ます。 図 6: 単純化した LIN トランシーバ

(9)

ステートとステートフラグ

LIN ドライバは、ステートフラグを使って LIN トラン シーバの状態を示します。割り込みが発生すると、ド ライバはこれらのフラグに基づいて次の未実行ステー トを決定し、そのステートへ移行します。図 7と図 8 に、各種のステートを経由するプログラムフローを示 します。表 4に、各ステートの定義を示します。 図 7: レシーバヘッダ プログラムフロー

(10)
(11)

タイムアウトの実装

ユーザはタイムアウト機能を有効にするかどうかを選 択できます。この機能は、ユーザが選択した baud レー トに基づきます。この機能を有効にした場合、最大許 容応答時間 ( 計算値 ) に対するタイムアウトを監視す るために Timer1 を使います。LIN 仕様 2.0 は、フレー ムスロット時間の割り当て要件を以下のように定義し ています。 • フレームの送信に関する公称値はレスポンス スペー ス、インターバイト スペース、インターフレーム ス ペースを除いた送信ビット数に一致する。 THeader_Nominal = 34 * TBit TResponse_Nominal = 10*(NData+1)*TBit TFrame_Nominal = THeader_Nominal + TResponse_Nominal レスポンス スペース、インターバイト スペース等の 最大許容時間は公称値の 140%とする。 THeader_Maximum = 1.4 * THeader_Nominal TResponse_Maximum = 1.4* TResponse_Nominal TFrame_Maximum = THeader_Maximum + TResponse_Maximum - TBit: 1 ビットの送信に要する時間 - NData: フレーム内のデータバイトの数 タイムアウトを適用した場合、タイミングは同期ブ レークの最初の 10 TBit を受信した後に最大ヘッダ時 間を計算します。受信バッファ内の値が 0x00 である 事とフレームエラー フラグビットをチェックする事 によって同期ブレークを確認した後に、Timer1 が有効 になり、値 (THeader_Maximum - 10*TBit) が書き込ま れます。ヘッダタイムアウトのカウントは、ID を受信 するかタイムアウト イベントが発生した後に終了し ます。ID は、応答の長さに関する情報を提供します。 従って応答タイムアウト値は、最初にバイトの総数 ( データバイト + チェックサムの 1 バイト ) を TBit に 乗算し、次にヘッダタイムアウトから使われなかった 残りの時間を加算する事により、求まります。図 9に、 計時関数のフローを示します。 図 9: 計時プログラムフロー

(12)

LIN スレーブドライバ ファイルの説明

lin.h

lin.h ファイルは、lin.c 内で定義されている関数の 新しい型とプロトタイプの定義を含みます。 表 3: 変数 変数名 バイト 数 概要 readback_b 1 送信したデータを保持し、このデータと受信したデータを比較する事によってビッ トエラーを検出します。 chksum_w 2 ドライバは、この変数を使って送信と受信のチェックサムを計算します。 datalength_b 1 ドライバは、この変数を使ってメッセージデータの数を維持します。 handle_b 1 受信した ID バイトを保持するレジスタです。 bufferptr_b 1 ドライバが使う記憶領域を指すポインタです。ID に応じて、データをメモリに書き 込むか、メモリから読み出します。 l_state_b 1 LIN バスのステートを示します。 l_errflgs_b 1 LIN バスのエラー情報を格納します。 l_comflgs_b 1 実行中のバス アクティビティを示します。 表 4: LIN ステート Enum. 値 ステート名 概要 0 LIN_ST_SYNCHBREAK スレーブはブレーク フィールドを受信する準備ができています。 1 LIN_ST_SYNCHBYTE スレーブは同期バイトを受信します。 2 LIN_ST_IDENTIFIER スレーブは PID を受信します。 3 LIN_ST_XMIT スレーブはマスタ要求に応答します。 4 LIN_ST_RECEIVE スレーブはマスタからデータを受信します。 5 LIN_ST_SLEEP スレーブは復帰信号を受信する準備ができています。

(13)

レジスタ 1: エラーフラグ

R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 LE_TIMEOUT LE_NORESPONSE LE_INCOMPLETE LE_BITERR LE_CHKSUMERR LE_PARITYERR LE_SYNCERR LE_BRKERR

bit 7 bit 0 補遺 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 7 LE_TIMEOUT: タイムアウト エラービット 1 = バス アクティビティ タイムアウト エラーが発生した 0 = バス アクティビティ タイムアウト エラーは発生していない bit 6 LE_NORESPONSE: 応答なしエラービット 1 = 受信モード中にマスタからの応答がなかった 0 = 受信モード中にマスタからの応答があった bit 5 LE_INCOMPLETE: 未完了エラービット 1 = 不完全なフレーム送受信が発生した 0 = 不完全なフレーム送受信は発生していない bit 4 LE_BITTERR: ビットエラー ビット 1 = 通信中にビットエラーが発生した 0 = 通信中にビットエラーは発生していない bit 3 LE_CHKSUMERR: チェックサム エラービット 1 = 受信モード中にチェックサム エラーが発生した 0 = 受信モード中にチェックサム エラーは発生していない bit 2 LE_PARITYERR: パリティエラー ビット 1 = 受信した PID でパリティエラーが発生した 0 = 受信した PID でパリティエラーは発生していない bit 1 LE_SYNCERR: 同期エラービット 1 = 同期フィールドが検出されなかった 0 = 同期フィールドは検出された bit 0 LE_BRKERR: ブレークエラー ビット 1 = ブレーク フィールドが検出されなかった 0 = ブレーク フィールドは検出された

(14)

レジスタ 2: ステータスフラグ

R-W/0-0 LastFrame_PID<7:0>

bit 15 bit 8

U-0 U-0 U-0 U-0 U-0 R-W/0-0 R-W/0-0 R-W/0-0 R-W/0-0 — — — — — Goto_sleep Overrun Successful_transfer Error_In_Response

bit 7 bit 0

補遺 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 15-8 LastFrame_PID<7:0>: 直近フレーム PID

直近フレーム PID とは、バス上で直近に検出されてノード内で処理された PID の事です。オーバーラン が発生すると、直近フレーム PID の 1 つまたは複数の値が失われます ( 直近の値だけが維持されます )。 bit 7-4 予約済み bit 3 Goto_Sleep: スリープ移行フラグビット 1 = 前回のステータス読み出し関数への呼び出し以降に、GOTO Sleep 命令を受信した 0 = GOTO Sleep 命令は受信していない bit 2 Overrun: オーバーラン フラグビット 1 = 前回のステータス読み出し関数への呼び出し以降に、2 個以上のフレームが処理された 0 = オーバーランは発生していない bit 1 Successful_transfer: 転送成功フラグビット 1 = 前回のステータス読み出し関数への呼び出し以降に、1 つまたは複数のフレーム応答がエラーなく処 理された 0 = フレーム転送は完了していない bit 0 Err_In_Response: 応答中エラー フラグビット 1 = 前回のステータス読み出し関数への呼び出し以降に、ノードが処理した 1 つまたは複数のフレームの フレーム応答セクションでエラーが発生した ( 例 : チェックサム エラー、フレーミング エラー等 ) 0 = フレーム応答エラーは発生していない

(15)

lin.c

lin.c ファイルは、LIN スレーブの動作に必要な全て

の関数を含みます。以下では、各 API 関数と、その使 い方について説明します。

• LIN_Initializer

-C プロトタイプ : void LIN_Initializer (void); 概要 : LIN スレーブに必要な全てのパラメータを初 期化します。システム初期化後に main 関数内でこ の関数を呼び出す事で LIN 動作を開始します。 - パラメータ : なし - 戻り値 : なし • LIN_Driver

-C プロトタイプ : void LIN_Driver (void); - 概要 : この関数は受信した LIN 信号に従ってス テートを変更します。 - パラメータ : なし - 戻り値 : なし • LIN_ReadStatus -C プロトタイプ : lin_status LIN_ReadStatus(void); - 概要 : この関数は、呼び出されると 16 ビットの ステータスワードを返します。 - パラメータ : なし - 戻り値 :16 ビット ステータスワード • LIN_SendWakeupSignal -C プロトタイプ : void LIN_SendWakeupSignal (void); - 概要 : バス上で復帰命令を生成します。この関数 は、復帰呼び出しをシミュレートする復帰文字を LIN バス上に送信します。 - パラメータ : なし - 戻り値 : なし • LIN_GotoSleep - C プロトタイプ : void LIN_GotoSleep (void); - 概要 : Goto_sleep フラグビットをセットし、 タイマを無効にしてスリープモードへ移行しま す。マスタは GOTO SLEEP 命令を送信する際に この関数を使います。 - パラメータ : なし - 戻り値 : なし レジスタ 3: 通信フラグ

U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0

— — — — — — LF_COMPLETE LF_PENDING bit 7 bit 0 補遺 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア bit 7-2 予約済み bit 1 LF_COMPLETE: 通信完了フラグビット 1 = 送信または受信が完了した 0 = 送信または受信は完了していない bit 0 LF_PENDING: 通信実行中フラグビット 1 = 送信または受信が実行中 0 = 送信または受信はまだ開始されていない

(16)

• LIN_AssignFrameID

- C プロトタイプ : uint8_t LIN_AssignFram-eID (uint8_t *l_NAD)

- 概要 : この関数は、スレーブモード中にフレーム の PID に NAD (Node Diagnostic Address) と、指 定されたサプライヤ ID を割り当てます。変更され たフレームは指定されたメッセージIDを持つ必要 があり、呼び出し後に保護された ID として PID を持ちます。 - パラメータ : なし - 戻り値 : 8 ビット値 • LIN_AssignNAD - C プロトタイプ : uint8_t LIN_AssignNAD (uint8_t *l_NAD) - 概要 : この関数は NAD 、サプライヤ ID コード、 ファンクションIDコードが一致する全てのスレー ブノードの NAD を割り当てます。それらのノー ドの新しい NAD は新しい NAD です。 - パラメータ : なし - 戻り値 :8 ビット値 • LIN_ReadByID - C プロトタイプ : uint8_t LIN_ReadByID (uint8_t *l_NAD) - 概要 : この関数は、NAD で選択されたノードに対 して、ID パラメータに関連付けられたプロパティ を返すよう要求します。表 5を参照してください。 - パラメータ : なし - 戻り値 : 8 ビット値

lin_app.h

このファイルは、ノード設定を表す LIN 記述ファイル (LDF) の抜粋です。 このファイルは以下により構成されます。 • フレーム定義 • フレーム共用体定義 • データ交換用に予約されたバッファのサイズ

フレーム定義

• #define <Frame_Name>_Index value インデックス値を定義します。値はユーザ定義の連続 した整数です。

• #define <Frame_Name>_ID value

フレーム ID を定義します。値のレンジは 0 ~ 63(0x3F) です。

• #define <Frame_Name>_PID value

PID を 定 義 し ま す。「LIN Specification Package Revision 2.0」 [1] 内の Appendix 7.2 を参照してくださ い。

• #define <Frame_Name>_Len value

チェックサムを含まない応答フレームの長さを定義し ます。

• #define <Frame_Name>_MsgID value

スレーブノードの各イベントのメッセージIDを定義し ます。

lin_app.h

このファイルはアプリケーション インターフェイス であり、ユーザが書く必要があります。これにより、 ユーザはアプリケーションの LIN 通信を定義できま す。 lin_app.c ファイルは以下により構成されます。

ID_Table 変数

ユーザは、この変数に書き込む事で、アプリケーショ ンが処理する必要のある LIN フレームの ID を定義し ます。 表 5: ID の値 ID 意味 0 LIN 製品 ID 1 シリアル番号 2 – 15 予約済み 16 – 31 メッセージ ID 1 ~ 16 32 – 63 ユーザ定義 64 – 255 予約済み

(17)

このリストの各メンバーは、1 つの LIN フレームとそ の ID に対応します。各メンバーの型は t_id_list で す。各メンバーは以下の方法で定義する必要がありま す。 例 5: ID リスト • bufferptr: フレームに割り当てられたメモリのアド レス • len: 対応するフレームのデータバイトの数 (0 ~ 8) • idptr: フレーム ID を格納する変数のアドレス • direction: データフローの方向 - 型は t_message_direction です。マスタが要 求しているデータに対しては ID_REQUEST に設定 し、スレーブが送信するデータに対しては ID_RESPONSE に設定する必要があります。 • MsgID: 各フレームのメッセージ ID

参考資料

1. LIN Specification Package Revision 2.0、 LIN Consortium、http://www.lin-subbus.org

2. MPLAB® Code Configurator ユーザガイド (DS40001725)、http://www.microchip.com/ pagehandler/en_us/devtools/code_configurator/ home.html

3. MPLAB® XC8 C Compiler User’s Guide (DS50002053)、Microchip Technology, Inc.

補遺 A: ソースコード

文書のサイズを考慮し、本書には完全なソースコード を記載していません。ソースコードの完全なバージョ ンと全てのサポートファイルを収めたZipファイルは、 以下の Microchip 社ウェブサイトからダウンロードで きます : www.microchip.com. typedef struct { uint8_t *bufferptr; uint8_t len; uint8_t *idptr; t_msg_direction direction; uint16_t MsgID; }t_id_list;

(18)
(19)

本書に記載されているデバイス アプリケーション等に関する 情報は、ユーザの便宜のためにのみ提供されているものであ り、更新によって無効とされる事があります。お客様のアプ リケーションが仕様を満たす事を保証する責任は、お客様に あります。Microchip 社は、明示的、暗黙的、書面、口頭、法 定のいずれであるかを問わず、本書に記載されている情報に 関して、状態、品質、性能、商品性、特定目的への適合性を は じ め と す る、い か な る 類 の 表 明 も 保 証 も 行 い ま せ ん。 Microchip 社は、本書の情報およびその使用に起因する一切の 責任を否認します。Microchip 社の明示的な書面による承認な しに、生命維持装置あるいは生命安全用途に Microchip 社の製 品を使用する事は全て購入者のリスクとし、また購入者はこ れによって発生したあらゆる損害、クレーム、訴訟、費用に 関して、Microchip 社は擁護され、免責され、損害をうけない 事に同意するものとします。暗黙的あるいは明示的を問わず、 Microchip社が知的財産権を保有しているライセンスは一切譲 渡されません。 商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、 KEELOQ、KEELOQロゴ、MPLAB、PIC、PICmicro、PICSTART、 PIC32ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、 米 国お よ びそ の 他の 国 にお け る Microchip Technology Incorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、 米国における Microchip Technology Incorporated の登録商標 です。

Silicon Storage Technology は、その他の国における Microchip Technology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、 chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、 dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、 HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、 MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、 Omniscient Code Generation、PICC、PICC-18、PICDEM、 PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、 SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、 WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ る Microchip Technology Incorporated の登録商標です。 SQTP は、米国における Microchip Technology Incorporated のサービスマークです。

GestICとULPPは、その他の国におけるMicrochip Technology Germany II GmbH & Co. & KG (Microchip Technology Incorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。 ©2013, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.

ISBN: 978-1-63277-279-4 Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。 • Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。 • Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流 通している同種製品の中でも最も高度であると考えています。 • しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、 Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所 有権の侵害に該当する可能性が非常に高いと言えます。 • Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。 • Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護 機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。 コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社 のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォ ルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を 取得しています。Microchip 社の品質システム プロセスおよび手順は、 PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイ ス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、ア ナログ製品に採用されています。さらに、開発システムの設計と製造 に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得し ています。

QUALITY MANAGEMENT SYSTEM

CERTIFIED BY DNV

(20)

北米 本社 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel:480-792-7200 Fax:480-792-7277 技術サポート : http://www.microchip.com/ support URL: www.microchip.com アトランタ Duluth, GA Tel:678-957-9614 Fax:678-957-1455 オースティン (TX) Tel:512-257-3370 ボストン Westborough, MA Tel:774-760-0087 Fax:774-760-0088 シカゴ Itasca, IL Tel:630-285-0071 Fax:630-285-0075 クリーブランド Independence, OH Tel:216-447-0464 Fax:216-447-0643 ダラス Addison, TX Tel:972-818-7423 Fax:972-818-2924 デトロイト Novi, MI Tel:248-848-4000 ヒューストン (TX) Tel:281-894-5983 インディアナポリス Noblesville, IN Tel:317-773-8323 Fax:317-773-5453 ロサンゼルス Mission Viejo, CA Tel:949-462-9523 Fax:949-462-9608 ニューヨーク (NY) Tel:631-435-6000 サンノゼ (CA) Tel:408-735-9110 カナダ - トロント Tel:905-673-0699 アジア / 太平洋 アジア太平洋支社 Suites 3707-14, 37th Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel:852-2943-5100 Fax:852-2401-3431 オーストラリア - シドニー Tel:61-2-9868-6733 Fax:61-2-9868-6755 中国 - 北京 Tel:86-10-8569-7000 Fax:86-10-8528-2104 中国 - 成都 Tel:86-28-8665-5511 Fax:86-28-8665-7889 中国 - 重慶 Tel:86-23-8980-9588 Fax:86-23-8980-9500 中国 - 東莞 Tel:86-769-8702-9880 中国 - 杭州 Tel:86-571-8792-8115 Fax:86-571-8792-8116 中国 - 香港 SAR Tel:852-2943-5100 Fax:852-2401-3431 中国 - 南京 Tel:86-25-8473-2460 Fax:86-25-8473-2470 中国 - 青島 Tel:86-532-8502-7355 Fax:86-532-8502-7205 中国 - 上海 Tel:86-21-5407-5533 Fax:86-21-5407-5066 中国 - 瀋陽 Tel:86-24-2334-2829 Fax:86-24-2334-2393 中国 - 深圳 Tel:86-755-8864-2200 Fax:86-755-8203-1760 中国 - 武漢 Tel:86-27-5980-5300 Fax:86-27-5980-5118 中国 - 西安 Tel:86-29-8833-7252 Fax:86-29-8833-7256 アジア / 太平洋 中国 - 厦門 Tel:86-592-2388138 Fax:86-592-2388130 中国 - 珠海 Tel:86-756-3210040 Fax:86-756-3210049 インド - バンガロール Tel:91-80-3090-4444 Fax:91-80-3090-4123 インド - ニューデリー Tel:91-11-4160-8631 Fax:91-11-4160-8632 インド - プネ Tel:91-20-3019-1500 日本 - 大阪 Tel:81-6-6152-7160 Fax:81-6-6152-9310 日本 - 東京 Tel:81-3-6880- 3770 Fax:81-3-6880-3771 韓国 - 大邱 Tel:82-53-744-4301 Fax:82-53-744-4302 韓国 - ソウル Tel:82-2-554-7200 Fax:82-2-558-5932 または 82-2-558-5934 マレーシア - クアラルンプール Tel:60-3-6201-9857 Fax:60-3-6201-9859 マレーシア - ペナン Tel:60-4-227-8870 Fax:60-4-227-4068 フィリピン - マニラ Tel:63-2-634-9065 Fax:63-2-634-9069 シンガポール Tel:65-6334-8870 Fax:65-6334-8850 台湾 - 新竹 Tel:886-3-5778-366 Fax:886-3-5770-955 台湾 - 高雄 Tel:886-7-213-7828 台湾 - 台北 Tel:886-2-2508-8600 Fax:886-2-2508-0102 タイ - バンコク Tel:66-2-694-1351 Fax:66-2-694-1350 ヨーロッパ オーストリア - ヴェルス Tel:43-7242-2244-39 Fax:43-7242-2244-393 デンマーク - コペンハーゲン Tel:45-4450-2828 Fax:45-4485-2829 フランス - パリ Tel:33-1-69-53-63-20 Fax:33-1-69-30-90-79 ドイツ - デュッセルドルフ Tel:49-2129-3766400 ドイツ - ミュンヘン Tel:49-89-627-144-0 Fax:49-89-627-144-44 ドイツ - プフォルツハイム Tel:49-7231-424750 イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781 イタリア - ベニス Tel:39-049-7625286 オランダ - ドリューネン Tel:31-416-690399 Fax:31-416-690340 ポーランド - ワルシャワ Tel:48-22-3325737 スペイン - マドリッド Tel:34-91-708-08-90 Fax:34-91-708-08-91 スウェーデン - ストックホルム Tel:46-8-5090-4654 イギリス - ウォーキンガム Tel:44-118-921-5800 Fax:44-118-921-5820

各国の営業所とサービス

表 1: ファームウェア処理時間 ビットレート (bps) ファームウェア処理時間 (%) 2000 2.7 2400 3.2 9600 13 10417 14 20000 278 ビット PIC®マイクロコントローラで EUSART を使って LIN スレーブモードを実装する方法 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。
図 1: システム モジュール GUI
図 3: Timer1 設定 GUI
図 5: [PROJECTS] ウィンドウ 11. mcc.h および mcc.c ファイルは、 コンフィグレー ション ビットと oscillator_initializer の 定義を含みます。また、system_initializer 関数も含みます。この関数は、他のイニシャライ ザ (EUSART イニシャライザ、Timer1 イニシャラ イザ等 ) を内部で呼び出すアプリケーション プロ グラム内で呼び出す必要があります。 12
+2

参照

関連したドキュメント

 医薬品医療機器等法(以下「法」という。)第 14 条第1項に規定する医薬品

【ご注意点】 ・カタログの中からお好みの商品を1点お 選びいただき、同封のハガキに記載のお

未記入の極数は現在計画中の製品です。 極数展開のご質問は、

問55 当社は、商品の納品の都度、取引先に納品書を交付しており、そこには、当社の名称、商

 □ 同意する       □ 同意しない (該当箇所に☑ をしてください).  □ 同意する       □ 同意しない

この資料には、当社または当社グループ(以下、TDKグループといいます。)に関する業績見通し、計

の知的財産権について、本書により、明示、黙示、禁反言、またはその他によるかを問わず、いかな るライセンスも付与されないものとします。Samsung は、当該製品に関する

「系統情報の公開」に関する留意事項