表紙

LIN・CAN スタータキット RL78/F24
LIN ソフトウェア編 マニュアル
ルネサス エレクトロニクス社 RL78/F24(QFP-100 ピン)搭載
HSB シリーズマイコンボード 評価キット-本書を必ずよく読み、ご理解された上でご利用ください

株式会社
REV.1.0.0.0

目次

－目 次－

注意事項 ......................................................................................................................................................... 1
安全上のご注意 ............................................................................................................................................... 2
概要 ................................................................................................................................................................ 4
1.

サンプルプログラムに含まれる関数の使用の流れ .......................................................................................... 5
1.1.

1.1.1.

初期化 .............................................................................................................................................. 5

1.1.2.

MASTER ヘッダ・レスポンス送信 ...................................................................................................... 5

1.1.3.

MASTER ヘッダ送信（SLAVE レスポンス要求） ................................................................................ 5

1.2.

SLAVE 動作 ............................................................................................................................................ 6

1.2.1.

初期化 .............................................................................................................................................. 6

1.2.2.

レスポンスデータ設定 ....................................................................................................................... 6

1.2.3.

受信待機 .......................................................................................................................................... 7

1.3.
2.

MASTER 動作 ........................................................................................................................................ 5

レスポンスデータの受信（MASTER/SLAVE 共）....................................................................................... 7

サンプルプログラムの動作 .............................................................................................................................. 92.1. MASTER 側動作 ................................................................................................................................... 10
2.1.1. UART モード ................................................................................................................................... 10
2.1.2.

3.

2.2.

SLAVE 側動作 ...................................................................................................................................... 17

2.3.

処理のフロー ......................................................................................................................................... 19

関数仕様 ...................................................................................................................................................... 23
3.1.

4.

タイマモード .................................................................................................................................... 16

ヘッダファイルで定義している定数 ......................................................................................................... 23

3.1.1.

lin.h の定数定義 ............................................................................................................................. 23

3.1.2.

lin_operation.h の定数定義 ............................................................................................................ 29

3.2.

lin.c 内で定義している関数 .................................................................................................................... 32

3.3.

割り込みコールバック関数...................................................................................................................... 40

3.4.

使用しているグローバル変数 ................................................................................................................. 42

割り込み処理 ................................................................................................................................................ 45
4.1.

MASTER レスポンス送信動作 ............................................................................................................... 45

4.2.

MASTER ヘッダ送信動作 ...................................................................................................................... 45

4.3.

MASTER ヘッダ送信動作（応答する SLAVE なし） ................................................................................ 46

4.4.

割り込み関数 ......................................................................................................................................... 46

4.4.1.

送信割り込み .................................................................................................................................. 46

4.4.2.

受信割り込み .................................................................................................................................. 47

4.4.3.

ステータス割り込み ......................................................................................................................... 48

4.5. フラグ変数に関して ................................................................................................................................ 48
4.5.1. MASTER レスポンス送信の際の MASTER 側................................................................................ 49
4.5.2.

MASTER レスポンス送信の際の SLAVE 側 ................................................................................... 50
LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

5.

6.

4.5.3.

MASTER ヘッダ送信の際の MASTER 側 ...................................................................................... 51

4.5.4.

MASTER ヘッダ送信の際、レスポンス送信を行う SLAVE 側 .......................................................... 52

4.5.5.

MASTER ヘッダ送信の際、レスポンス受信を行う SLAVE 側 .......................................................... 53

プログラムのデバッグに関して ...................................................................................................................... 55
5.1.

SCI デバッグ表示 .................................................................................................................................. 55

5.2.

割り込みのポートデバッグに関して ......................................................................................................... 55

5.3.

モニタプログラムに関して ....................................................................................................................... 56

まとめ ........................................................................................................................................................... 61
取扱説明書改定記録 ....................................................................................................................................... 62
お問合せ窓口................................................................................................................................................... 62

注意事項
本書を必ずよく読み、ご理解された上でご利用ください【ご利用にあたって】
1. 本製品をご利用になる前には必ず取扱説明書をよく読んで下さい。また、本書は必ず保管し、使用上不明な点がある場合は再読し、よく理解して使用して下さい。
2. 本書は株式会社北斗電子製マイコンボードの使用方法について説明するものであり、ユーザシステムは対象ではありません。

3. 本書及び製品は著作権及び工業所有権によって保護されており、全ての権利は弊社に帰属します。本書の無断複写・複製・転載はできません。
4. 弊社のマイコンボードの仕様は全て使用しているマイコンの仕様に準じております。マイコンの仕様に関しましては製造元にお問い合わせ下さい。弊社製品のデザイン・機能・仕様は性能や安全性の向上を目的に、予告無しに変更することがあります。また価格を変更する場合や本書の図は実物と異なる場合もありますので、御了承下さい。
5. 本製品のご使用にあたっては、十分に評価の上ご使用下さい。
6. 未実装の部品に関してはサポート対象外です。お客様の責任においてご使用下さい。

【限定保証】
1. 弊社は本製品が頒布されているご利用条件に従って製造されたもので、本書に記載された動作を保証致します。
2. 本製品の保証期間は購入戴いた日から１年間です。

【保証規定】
保証期間内でも次のような場合は保証対象外となり有料修理となります
1. 火災・地震・第三者による行為その他の事故により本製品に不具合が生じた場合
2. お客様の故意・過失・誤用・異常な条件でのご利用で本製品に不具合が生じた場合
3. 本製品及び付属品のご利用方法に起因した損害が発生した場合
4. お客様によって本製品及び付属品へ改造・修理がなされた場合【免責事項】
弊社は特定の目的･用途に関する保証や特許権侵害に対する保証等、本保証条件以外のものは明示・黙示に拘わらず一切の保証は致し兼ねます。また、直接的・間接的損害金もしくは欠陥製品や製品の使用方法に起因する損失金・費用には一切責任を負いません。損害の発生についてあらかじめ知らされていた場合でも保証は致し兼ねます。
ただし、明示的に保証責任または担保責任を負う場合でも、その理由のいかんを問わず、累積的な損害賠償責任は、弊社が受領した対価を上限とします。本製品は「現状」で販売されているものであり、使用に際してはお客様がその結果に一切の責任を負うものとします。弊社は使用または使用不能から生ずる損害に関して一切責任を負いません。

保証は最初の購入者であるお客様ご本人にのみ適用され、お客様が転売された第三者には適用されません。よって転売による第三者またはその為になすお客様からのいかなる請求についても責任を負いません。
本製品を使った二次製品の保証は致し兼ねます。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

1

安全上のご注意
製品を安全にお使いいただくための項目を次のように記載しています。絵表示の意味をよく理解した上でお読み下さい。

表記の意味
取扱を誤った場合、人が死亡または重傷を負う危険が切迫して生じる可能性がある事が想定される取扱を誤った場合、人が軽傷を負う可能性又は、物的損害のみを引き起こすが可能性がある事が想定される

絵記号の意味一般指示

一般禁止

使用者に対して指示に基づく行為を強制するものを示します

一般的な禁止事項を示します

電源プラグを抜く

一般注意

使用者に対して電源プラグをコンセントから抜くように指示します

一般的な注意を示しています

以下の警告に反する操作をされた場合、本製品及びユーザシステムの破壊・発煙･発火の危険があります。マイコン内蔵プログラムを破壊する場合もあります。
1. 本製品及びユーザシステムに電源が入ったままケーブルの抜き差しを行わないでください。
2. 本製品及びユーザシステムに電源が入ったままで、ユーザシステム上に実装されたマイコンまたはＩＣ等の抜き差しを行わないでください。
3. 本製品及びユーザシステムは規定の電圧範囲でご利用ください。
4.

本製品及びユーザシステムは、コネクタのピン番号及びユーザシステム上のマイコンとの接続を確認の上正しく扱ってください。

発煙･異音･異臭にお気付きの際はすぐに使用を中止してください。
電源がある場合は電源を切って、コンセントから電源プラグを抜いてください。そのままご使用すると火災や感電の原因になります。

2

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

以下のことをされると故障の原因となる場合があります。
1. 静電気が流れ、部品が破壊される恐れがありますので、ボード製品のコネク
タ部分や部品面には直接手を触れないでください。
2. 次の様な場所での使用、保管をしないでください。
ホ コ リ が 多い 場所 、 長時 間 直 射日 光 があ たる 場 所 、 不 安定 な 場所 、
衝撃や振動が加わる場所、落下の可能性がある場所、水分や湿気の多い
場所、磁気を発するものの近く
3. 落としたり、衝撃を与えたり、重いものを乗せないでください。
4. 製品の上に水などの液体や、クリップなどの金属を置かないでください。
5. 製品の傍で飲食や喫煙をしないでください。
ボード製品では、裏面にハンダ付けの跡があり、尖っている場合があります。
取り付け、取り外しの際は製品の両端を持ってください。裏面のハンダ付け跡
で、誤って手など怪我をする場合があります。

CD メディア、フロッピーディスク付属の製品では、故障に備えてバックアップ（複製）をお取りください。
製品をご使用中にデータなどが消失した場合、データなどの保証は一切致しかねます。
アクセスランプがある製品では、アクセスランプの点灯中に電源を切ったり、パソ
コンをリセットをしないでください。
製品の故障や、データ消失の原因となります。

本製品は、医療、航空宇宙、原子力、輸送などの人命に関わる機器やシステム
及び高度な信頼性を必要とする設備や機器などに用いられる事を目的として、設計及び製造されておりません。
医療、航空宇宙、原子力、輸送などの設備や機器、システムなどに本製品を使用され、本製品の故障により、人身や火災事故、社会的な損害などが生じても、弊社では責任を負いかねます。お客様ご自身にて対策を期されるようご注意ください。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

3

概要
本書は、「LIN・CAN スタータキット RL78/F24」付属 CD に含まれる、LIN 動作のサンプルプログラムの解説を行う
資料となります。
・付属 CD（本マニュアルに関連する内容のみ抜粋）
フォルダ
SOURCE¥

RL78_F24_100_LIN¥ (*1)
OTHERS¥RL78_F24_64_LIN¥ (*2)

OTHERS¥RL78_F15_LIN3¥ (*2)

RL78_F24_100_LIN_MONITOR¥ (*1)

BINARY¥

RL78¥HSBRL78F24-100 (*1)
RL78¥OTHERS¥ (*2)

内容
LIN サンプルプログラム[本書で説明する内容]
HSBRL78F24-64を通信相手として LIN のサン
プルプログラムの動作を見る
場合のサンプルプログラム
HSBRL78F15-100を通信相手として LIN のサン
プルプログラムの動作を見る
場合のサンプルプログラム
LIN モニタプログラム
パケットモニタ用サンプルプロ
グラム[5.3 節]SOURCE に含まれるサンプ
ルプログラムの mot ファイル(*1)本キット付属の HSBRL78F24-100 向けのプロジェクト、バイナリです。
(*2)通信対向機として使用可能な当社製マイコンボード向けのプロジェクト、バイナリです。

4

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

1. サンプルプログラムに含まれる関数の使用の流れ
1.1. MASTER 動作
LIN インタフェースを MASTER に設定して使用する場合の使用法を示します。

1.1.1. 初期化
lin_init(0, LIN_MASTER, 0x30);

1 つ目の引数は、LIN の ch を指定します。RL78/F24 の場合は、0~1 を指定可能です。
2 つ目の引数は、LIN_MASTER(0)か LIN_SLAVE(1)を指定します。この定数は、lin.h で定義されています。
3 つ目の引数は、LIN の ID を指定します。0x0~0x3f の値が指定可能です。
※MASTER 設定の場合、ここで設定した ID はグローバル変数に保持されますが、動作で使用される事はありません

1.1.2. MASTER ヘッダ・レスポンス送信
unsgned char data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
lin_master_header_response_send(0, 0x30, data, 8);

MASTER 側から、ヘッダ＋レスポンスデータを送信する場合、
1 つ目の引数は、LIN の ch を指定します。
2 つ目の引数は、ヘッダに含まれる LIN の ID を指定します。
3 つ目の引数は、送信データ（最大 8 バイト）を指定します。
4 つ目の引数は、送信バイト数（1~8）を指定します。

1.1.3. MASTER ヘッダ送信（SLAVE レスポンス要求）
lin_master_header_send(0, 0x31, 8);

MASTER 側から、ヘッダを送信する場合、
1 つ目の引数は、LIN の ch を指定します。
2 つ目の引数は、ヘッダに含まれる LIN の ID を指定します。（データを送信して欲しい SLAVE の ID）
3 つ目の引数は、受信予定のバイト数（1~8）を指定します。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

5

※CAN のリモートフレーム要求の場合、送信元が DLC（データバイト数）をパケットに埋め込んで送信します。受信側（レスポンスデータを返送する側）は、受信した DLC に基づき、（基本的には）DLC のバイト数のレスポンスデータを送信します。
それに対し、LIN の場合は、MASTER から送信するヘッダには、データのバイト数の情報が含まれません。上記関数の受信予定バイト数（3 番目の引数）と、SLAVE 側が返送するバイト数が合っていないとエラーとなり、データを受信しません。
LIN の場合は、パケット毎にデータバイト数を変えるのは、色々弊害があるので、データバイト数（パケット長）は、
lin.h 内で、LIN_RESPONSE_DATA_SIZE 定数で定義しています（固定化しています）。
（通信の途中で、レスポンスデータのバイト数を変える場合は、MASTER 側と SLAVE 側で何らかの手段でデータバ
イト数の値の情報を共有する仕組みの追加が必要になります。
2.1.1 の初期化は、最初に 1 回（もしくは、ID や MASTER/SLAVE 種別を変更するタイミングで）行ってください。初期化後は、2.1.2, 2.1.3（MASTER レスポンス送信、MASTER ヘッダ送信）を任意のタイミングで実行して構いません。

1.2. SLAVE 動作
LIN インタフェースを SLAVE に設定して使用する場合の使用法を示します。

1.2.1. 初期化
lin_init(1, LIN_SLAVE, 0x31);

1 つ目の引数は、LIN の ch を指定します。RL78/F24 の場合は、0~1 を指定可能です。
2 つ目の引数は、LIN_MASTER(0)か LIN_SLAVE(1)を指定します。この定数は、lin.h で定義されています。
3 つ目の引数は、LIN の ID を指定します。0x0~0x3f の値が指定可能です。

1.2.2. レスポンスデータ設定
unsgned char data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
lin_response_data_set(1, data, 8);

1 つ目の引数は、LIN の ch を指定します。
2 つ目の引数は、送信データ（最大 8 バイト）を指定します。
3 つ目の引数は、送信バイト数（1~8）を指定します。

6

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

SLAVE がデータ（レスポンスデータ）を送信できるのは、自分自身の LIN-ID を含むヘッダが LIN バスに流れてきた
場合（自分自身の LIN-ID を受信した場合）のみです。ヘッダ送信が行えるのは、MASTER デバイスのみですので、
SLAVE 側は自らのタイミングでの送信はできません。
本関数は、受信したヘッダに自分自身の ID が含まれている際にレスポンスとして返信するデータを設定します。な
お、実際のデータの送信処理は、受信割り込み関数内で行われます。
※レスポンスデータ設定関数 lin_response_data_set()呼び出し直後（lin_response_data_set()から処理が戻る前）に受信割り込みが入った場合、前回 lin_response_data_set()で設定したデータが送信されます

1.2.3. 受信待機
lin_slave_header_receive(1);1 つ目の引数は、LIN の ch を指定します。
指定した ch の受信をスタンバイします。本関数は、1.2.1 の初期化後 1 回実行してください。
1.2.1 の初期化は最初に 1 回行ってください。1.2.2 のレスポンスデータ設定と 1.2.3 の受信待機はどちらが先でも問題ありません。
1.2.2 のレスポンスデータ設定は、任意のタイミングで何度でも実行可能です。

1.3. レスポンスデータの受信（MASTER/SLAVE 共）
データの受信は、受信割り込み関数内で行われ、受信データは、リングバッファ構造のグローバル変数(g_lin_recv_buf)に保持されます。
MASTER 動作の場合、ヘッダ送信を行ってレスポンスが返ってきた際にデータを受信します。
SLAVE 動作の場合、自分自身の LIN-ID 以外のレスポンスデータ（MASTER がレスポンス送信したデータと、他のSLAVE がレスポンス送信したデータ）を受信します。
（MASTER, SLAVE 共、自分自身が送信したデータは、受信しません。）※本来はそのようなケースはないはずですが、MASTER に設定したポートは「他のデバイスが送信したヘッダ」と「他のデバイスが送信したヘッダに対するレスポンス」に関しては受信しません

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

7

受信データを保持する、g_lin_recv_buf は lin_message 構造体としており、
typedef struct{unsigned char id;
unsigned char data[8];unsigned char sum;
unsigned char size;} lin_message;

LIN-ID とレスポンスデータ、チェックサム、データバイト数を保持します。
g_lin_recv_buf は 2 次元の配列となっており、g_lin_recv_buf[ch][index]の構成。index のサイズは、lin.h 内で
LIN_RECV_BUF_SIZE（=デフォルト値 16）として定義されています。（ch は、RL78/F24 の場合 0,1）g_lin_recv_buf に保持されているデータの読み出しは、
int ret;lin_message lin_msg;
ret = lin_read_data(0, &lin_msg);の様に行います。
受信データがある場合、ret == LIN_RET_SUCCESS(0)となります。受信しているデータが無い場合、
ret == LIN_RET_NODATA(-1)となります。
（ret != LIN_RET_NODATA(-1)の間 lin_read_data()を複数回実行すると、格納されている全てのデータを取り出せます。）※ret == LIN_RETFLAG_LOST_DATA(0x80)の場合は、バッファが溢れて捨てられたデータがある事を示しています、バッファが溢れた場合古いデータから破棄されます（ret == LIN_RETFLAG_LOST_DATA(0x80)の場合でも取り出したデータは有効です）
現状のサンプルプログラムでは、受信割り込み関数では受信バッファにデータを格納する処理としています。受信時に何かアクションを行わせたい場合は、受信コールバック関数を有効化して、受信コールバック関数内（linn_interrupt_receive_callback(), n=0~1, ch 番号）内に処理を追加してください。※詳細は 3.3 節参照

8

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

2. サンプルプログラムの動作

SW2
評価用スイッチ

LED2
評価用 LED

P80(ANI0)
本ポートの A/D 変換結果 P80を送信(MASTER)
P81
P81(ANI1)
本ポートの A/D 変換結果を送信(SLAVE)

5V
動作確認時の接続

JP12-3（左側）ショートJ6
DC 電源入力
付属 AC アダプタ
を接続

USBRL78WRITER
を接続(*1)

J8
LIN0 インタフェース[LIN MASTER]
付属 3P ケーブル
（両端圧着）で接続
J9
LIN1 インタフェース[LIN SLAVE]

ジャンパを挿す必要あり
J4
フラッシュインタフェース

ジャンパを抜く必要あり※その他のジャンパは任意

SW1
リセットスイッチ(*1)キット付属の、USB-RL78WRITER を使用する際は、SW1 を SCI 側（右側）に設定してください
J4 1pin に接合

J1 20P I/F(FLASH I/F)
マイコンボードと接続

J2 USB-Serial(USB-miniB)
PC と接続LED1 USB Power（USB 側電源供給時 ON）

SW1（UART(SCI), 書き込みモード切り替え）JP1 USB-VBUS->VDD（USB-VBUS から VDD 供給）※出荷時オープン

通信アダプタとしては、USB-RL78WRITER 以外では、当社製 USB-ADAPTER などが使用可能です。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

9

サンプルプログラムでは J8 側のコネクタが LIN MASTER デバイスとして動作し、J9 側が LIN SLAVE デバイスとして動作するようになっています。

2.1. MASTER 側動作
サンプルプログラムは、「UART モード」（デフォルト）と「タイマモード」の 2 種類の動作モードを用意しています。デフォルトの UART モードは、MASTER からのヘッダ送信をキーボードからの入力で行う動作モードです。

2.1.1. UART モード
J4 に接続した通信アダプタにつながる端末（仮想 COM ポート）には、起動時下記の表示が出力されます。端末
は、115,200bps で開いてください。
Copyright (C) 2024 HokutoDenshi. All Rights Reserved.
LIN Starter kit RL78/F24 Sample program.
Command:
0 : MASTER header/response send(ID=0x30)
1 : SLAVE header send(ID=0x31)
2 : SLAVE header send(ID=0x32)
3 : SLAVE header send(ID=0x33)
4 : SLAVE header send(ID=0x34)
5 : SLAVE header send(ID=0x35)
LIN ネ ッ ト ワ ー ク 上 に LIN6 : SLAVE header send(ID=0x36)
ID=0x32~0x39 のデバイスが
7 : SLAVE header send(ID=0x37)
存在しない場合、応答なし
8 : SLAVE header send(ID=0x38)
9 : SLAVE header send(ID=0x39)
a-p : MASTER header/response send(ID=0x30) data[2]=0x00~0x0f>

キーボードからのコマンド
0: MASTER レスポンス送信
1~9: SLAVE に対しヘッダ送信
a-q: MASTER レスポンス送信（データの 3 バイト目 0x00~0x0f で送信）で動作します。

10

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

端末の画面で、キーボードから"0"を入力すると（リターンは不要）、LIN MASTER のポート(J8)からヘッダ・レスポン
ス通信が送信されます。

レスポンス

ヘッダ

V

ブレーク
PID
Sync フィールド

data[0] ....

0xF0
(0x30)MASTER が送信

0x00

0x01

data[7]
0x00

0x00

0x0A

0x79

0x00

0x00

Check
SUM

t

MASTER が送信

約 13ms
ヘッダ・レスポンスの送信元は、両方 MASTER になります。
その際端末には下記表示が出力されます。
-LIN header/response data send : LIN-ID=0x30 data=0x000100000A790000 (*1)
LIN data receive(ch1) : LIN-ID=0x30 data=0x000100000A790000 sum=0x8A (*2)--は一連のメッセージの開始を示す表示。
(*1)は、送信したことを示す表示。[太字:MASTER 側の動作に起因する表示](*2)は、LIN-ch0(J8)と LIN-ch1(J9)をケーブルで接続している時に表示されます。（LIN-ch1 側がデータを受信した表示。）[SLAVE 側の動作に起因する表示]
ヘッダには、MASTER に割り当てた LIN ID(0x30)が含まれます。0x30 はパリティを付与すると、0xF0 になりますので、実際に送出されるデータは 0xF0 です。
レスポンスデータは、本プログラムでは 8 バイト固定としており、以下のデータフォーマットとなっています。
－送信データ（MASTER 側 0 コマンド）－
1
2
3
0x00
0x01
0x00
送信時間（2 バイト）
ボード上
LED
※ボードを起動して
からの秒数

4
0x00
ボード上
SW

5
6
0x0A
0x79
P80/ANI0 端子の A/D
変換値(12bit)※4096 の約 2/3 の値

70x00
0x00 固定8
0x00
0x00 固定

1~2 バイト目は、ボードを起動してから 1 秒毎にインクリメントされる数値です。3 バイト目と 4 バイト目は、マイコン
ボード上の LED と SW の状態を示します。5,6 バイト目は端子の A/D 変換値です。7,8 バイト目は 0x00 固定です。
※A/D 変換値は、この動作例では 5V-R-□-R-R-GND（□のポイントが P80 の接続）なので、大体 4096/3×2=2731
付近の値となります

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

11

・3 バイト目 ボード上 LED の状態
0x00 : LED2 は消灯
0x01 : LED2 は点灯
・4 バイト目 ボード上の SW の状態(*1)
0x00 : SW2 は押されていない
0x01 : SW2 は押されている
・5~6 バイト目 端子の A/D 変換値
0x0000 ~ 0x0FFF, 12bit の A/D 変換値
P80/ANI0 端子の A/D 変換値(*2)(*1)64 ピンのボード(HSBRL78F24-64)向けのサンプルプログラムでは、SW3 となります(*2)MASTER が送信するデータ、SLAVE(LIN-ch1, J9)が送信するデータは P81/ANI1 端子の A/D 変換値となります[参考]64 ピンのボード(HSBRL78F24-64)向けのサンプルプログラムでは、LIN-ch0 のみ扱います
HSBRL78F24-64 で LIN-ch0 を MASTER として設定した場合は、P80/ANI1 の A/D 変換値、LIN-ch0 を SLAVEとして設定した場合は、P81/ANI1 の A/D 変換値を送信します
キーボードから、"1"~"9"を入力すると SLAVE デバイスに対するヘッダ送信を行います。
・送信した ID に合致する SLAVE デバイスが存在する場合
レスポンス

ヘッダ

V

ブレーク
PID
Sync フィールド
0xB1(0x31)MASTER が送信

data[0] ....
0x00

0x05

data[7]
0x00

0x00

0x05

0x39

0x00

0x00

Check
SUM

t

SLAVE が送信

約 13ms
この場合の端末の表示は以下の様になります。
-LIN header send : LIN-ID=0x31 (*1)
LIN data receive(ch0) : LIN-ID=0x31 data=0x0005000005390000 sum=0x0B (*2)(*1)は、ヘッダを送信したことを示す表示。[太字:MASTER 側の動作に起因する表示](*2)は、LIN-ch0(J8)と LIN-ch1(J9)をケーブルで接続している時に表示されます。（LIN-ch1 側がレスポンスデータを送信し、そのデータを LIN-ch0 が受信した表示。）[太字:MASTER 側の動作に起因する表示]※SLAVE 側がレスポンス送信した事を示すメッセージは出力されません
12

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

[参考]ボードの LED2 が点灯・消灯する条件に関して
・SW2 を押した状態で MASTER 側から SLAVE(ID=0x31)にヘッダを送信した場合

LED2
評価用 LED

SW2
評価用スイッチ

レスポンス

ヘッダ

V

ブレーク
PID
Sync フィールド
0xB1(0x31)MASTER が送信

data[0] ....
0xXX

0xXX

data[7]
0x00

0x01

0xXX

0xXX

0x00

0x00

Check
SUM

t

SLAVE が送信

約 13ms
LIN-ch1(SLAVE)が返す、レスポンスデータの 4 バイト目が 0x01 になります。そのデータを MASTER 側が受信した場合、ボード上の LED(LED2)が点灯する動作となります。
※SW2 を押さない状態で、MASTER 側から SLAVE(ID=0x31)にヘッダを送信した場合は、4 バイト目が 0x00 になり、そのデータを MASTER 側が受信した場合、ボード上の LED(LED2)が消灯する動作となります。
（MASTER 側は受信データの 4 バイト目のデータにより、ボード上の LED2 の点灯・消灯を切り替えます。）

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

13

・送信した ID に合致する SLAVE デバイスが存在しない場合
ヘッダ

V

ブレーク
PID
Sync フィールド

応答なし

0x32
(0x32)t

MASTER が送信

約 2ms-LIN header send : LIN-ID=0x31

LIN バス上に MASTER が送信したヘッダ含まれる ID に合致する SLAVE デバイスが存在する場合、SLAVE はレ
スポンスデータを送信します。ID に合致する SLAVE デバイスが存在しない場合は、ヘッダ送信に対する応答が無い状態となります。。[太字:ID=0x30 の MASTER 側の動作に起因する表示][参考]キーボードから、"a"~"p"を入力すると、MASTER ヘッダ・レスポンス送信となりますが、
レスポンス

ヘッダ

V

ブレーク
PID
Sync フィールド
0xF0(0x30)MASTER が送信

data[0] ....
0x00

data[7]

0x00

0x00
~
0x0F

0x00

0x00

0x00

0x00

0x00

Check
SUM

t

MASTER が送信

約 13ms
送信するデータの 3 バイト目が、a:0x00. b:0x01, c:0x02 ... p:0x0F と変化します。これは、LIN バス上に、
HSB_LIN_COMM（別売の LIN 通信モジュール）を接続した場合向けのコマンドです。
・HSB_LIN_COMM ボード（別売オプション）'a'コマンド→LED1~4=OFF/OFF/OFF/OFF'b'コマンド→LED1~4=OFF/OFF/OFF/ON

14

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

'c'コマンド→LED1~4=OFF/OFF/ON/ON'p'コマンド→LED1~4=ON/ON/ON/ON

HSB_LIN_COMM は受信した 3 バイト目のデータにより LED の点灯状態が変わる仕様なので、LIN バスに
HSB_LIN_COMM ボードを接続した場合、'a'~'p'コマンドで、HSB_LIN_COMM ボードの LED の点灯状態を LIN 通
信経由で制御できます。
－送信データ（MASTER 側 a~p コマンド）－
1
2
3
4
0x00
0x00
0x0X
0x00
0x00 固定 0x00 固定 'a': X=00x00 固定'b': X=1...
'p': X=F

50x00
0x00 固定

6
0x00
0x00 固定

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

7
0x00
0x00 固定8
0x00
0x00 固定15

2.1.2. タイマモード
lin_operation.h（抜粋）//LIN ID#define LIN_MASTER_ID 0x30//MASTER動作時に設定するID#define LIN_SLAVE_ID 0x31//SLAVE動作時に設定するID//SLAVEレスポンスを要求するID（MASTER動作時のみ使用）#define LIN_SLAVE_RESPONSE_START_ID 0x31//SLAVEレスポンス送信を要求する要求先 0x31, 0x32, 0x33,
0x34 ....
//レスポンス要求するSLAVEデバイス数（MASTER動作時のみ使用）#define LIN_SLAVE_DEVICE_NUM 4//0x31 ~ 0x34 に対してレスポンス要求する//動作モード（どちらかを選択）//#define LIN_OPERATION_MODE LIN_OPERATION_TIMER//下記のインターバル時間毎にヘッダ送信#define LIN_OPERATION_MODE LIN_OPERATION_UART//UARTからのコマンドでヘッダ送信//動作インターバル時間[x50ms]（MASTER動作時のみ使用）#define LIN_INTERVAL_TIME 20//1秒毎にヘッダを出す/*
MASTERの場合、50×LIN_INTERVAL_TIME[ms]毎に、(1)ID=0x30（マスタレスポンス送信）(2)ID=0x31（スレーブレスポンス送信要求）(3)ID=0x32（スレーブレスポンス送信要求）(4)ID=0x33（スレーブレスポンス送信要求）(5)ID=0x34（スレーブレスポンス送信要求）を繰り返す（(LIN_SLAVE_DEVICE_NUM+1)×50×LIN_INTERVAL_TIME[ms]で1周）*/

動作をタイマモードとする場合、lin_operation.h を書き換えて、プログラムをビルドしてください。書き換え箇所は、「動作モード（どちらかを選択）」の部分です。
デフォルトでは、LIN_OPERATION_UART が設定されていますので、これを LIN_OPERATION_TIMER 側が有効になる様に書き換えます。
動作モードを「タイマモード」（LIN_OPERATION_TIMER 側）に設定した場合は、（デフォルトでは）1 秒毎にMASTER 側 ch(LIN-ch0, J8)が1. MASTER レスポンス送信(*1)
2. LIN-ID=0x31 のヘッダ送信
3. LIN-ID=0x32 のヘッダ送信
4. LIN-ID=0x33 のヘッダ送信
5. LIN-ID=0x34 のヘッダ送信
1~5 を繰り返す、動作となります。（UART モードでの、キーボードの、0,1,2,3,4,0...を 1 秒毎に入力した動作）

16

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

(*1)の送信データは、UART モードと同じです、
送信する ID や、ヘッダ送信を行う回数、送信間隔は lin_operation.h 内で変更可能です。

2.2. SLAVE 側動作
SLAVE 側は、LIN の場合自発的にデータを送信する事は出来ません。
SLAVE 側でできる事は、・LIN バス上を流れているデータを受信する→MASTER がレスポンスデータを送信した場合と、自分以外の SLAVE がレスポンスデータを送信した場合・MASTER が送信したヘッダに、自分自身の ID が含まれていた場合にレスポンスデータを送信するとなります。
MASTER 側が、（ヘッダ及び）レスポンスデータを送信した場合。
-LIN header/response data send : LIN-ID=0x30 data=0x000400000A7E0000
LIN data receive(ch1) : LIN-ID=0x30 data=0x000400000A7E0000 sum=0x82 (*1)(*1)LIN-ch1(J9)の SLAVE デバイス(ID=0x31)がレスポンスデータを受信した表示例。[太字:ID=0x31 の SLAVE
側の動作に起因する表示]
自分自身以外の SLAVE がレスポンスデータを送信した場合。（MASTER, LIN-ch0 は、ID=0x32 のヘッダ送信）-LIN header send : LIN-ID=0x32
LIN data receive(ch0) : LIN-ID=0x32 data=0x0044040003380000 sum=0x4A (*1)
LIN data receive(ch1) : LIN-ID=0x32 data=0x0044040003380000 sum=0x4A (*2)

※HSBRL78F24-100 以外に、ID=0x32 の LIN デバイスを接続した場合
ID=0x32 のデバイスがレスポンスデータを送信し、HSBRL78F24-100 の LIN-ch0, LIN-ch1 が ID=0x32 のデバイ
スが送信したデータを受信。
(*1)は LIN-ch0 がデータを受信した表示(*2)は LIN-ch1 がデータを受信した表示※SLAVE 側は、オート・ボーレート設定としているので、SYNC フィールドの 0x55（L/H の繰り返し）の信号に合わせて通信速度が決定されます。通信速度は、2.4kbps~20kbps の範囲のデータを受信可能です。（パケット毎にビットレートが異なっていても受信可能です。）

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

17

MASTER 側が、ID=0x31 でヘッダ送信した場合
レスポンス

ヘッダ

V

ブレーク
PID
Sync フィールド
0xB1(0x31)MASTER が送信

data[0] ....
0x00

0x0E

data[7]
0x00

0x00

0x05

0x42

0x00

0x00

Check
SUM

t

SLAVE が送信

約 13ms-LIN header send : LIN-ID=0x31
LIN data receive(ch0) : LIN-ID=0x31 data=0x000E000005420000 sum=0xF8

SLAVE(LIN-ch1, J9)は黄枠部分のレスポンスデータを返しますが、SLAVE 側の動作自体を示す端末表示はありません。（SLAVE が送信したデータを MASTER が受信した際の表示は出力されます。）
SLAVE 側は、MASTER が送信したヘッダを受信して、ヘッダに含まれる ID が自分のものだった場合に、レスポン
スデータを返すという動作となりますので、下記のような動作となります。
・ヘッダは受信待機しておく・レスポンスデータを予め決めて設定しておく
ヘッダ受信後に、レスポンスデータを決めても良いですが、本サンプルプログラムではレスポンスデータは定期的（RTC タイマを使用して 1 秒に 1 回）に返信するデータ（8 バイト）を決めてセットしておく動作としています
・レスポンスデータを受信した場合は受信するレスポンスデータを受信した場合は、ID に応じて、「受信する」「受信しない」を選択可能ですが、本サンプルプログ
ラムでは、ID に拘わらず「受信する」動作としています（MASTER 側(ID=0x30)が送信したデータや、他の SLAVE が送信したデータを受信します。）－送信データ（SLAVE 側）－
1
2
0x00
0x0E
送信時間（2 バイト）
※ボードを起動して
からの秒数

3
0x00
ボード上
LED

4
0x00
ボード上
SW

5
6
0x05
0x42
P81/ANI1 端子(*1)のA/D 変換値(12bit)※4096 の約 1/3 の値

70x00
0x00 固定8
0x00
0x00 固定(*1)A/D 変換値の端子以外は MASTER 側がヘッダ・レスポンス送信で送信するデータと同じ※A/D 変換値は、この動作例では 5V-R-R-□-R-GND（□のポイントが P81 の接続）なので、大体 4096/3=1365 付
近の値となります18

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

2.3. 処理のフロー
メイン関数 r_main.c 内 main() ※「UART モード」キーボードからのコマンドで動作させる場合

start
UART
初期化
起動メッセージ
表示
LIN 初期化(MASTER)(1)(1)lin_init()

LIN 初期化(SLAVE)(2)(2)lin_init()
lin_response_data_set()
lin_slave_header_receive()

RTC スタート

main loop
文字入力読み
取り

no

入力あり
yes
'0'が入力された(3)lin_master_header_response_send()(4)lin_master_header_send()noyes'1'~'9'が
入力された

送信データ
設定
送信メッセージ
表示
MASTER
レスポンス送信
受信データ
確認
main loop(3)

no'a'~'p'が
入力された

yes

yes

送信メッセージ
表示

送信メッセージ
表示

MASTER
ヘッダ送信

(4)

no

MASTER
レスポンス送信

data_receive()※後のページにフローチャート記載
ch0(MASTER), ch1(SLAVE)の受信バッファにデータが格納されている場合
は画面表示

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

19

メイン関数 main() ※「タイマモード」タイマで一定時間毎にヘッダ送信させる場合

start
UART
初期化
起動メッセージ
表示
LIN 初期化(MASTER)(1)

LIN 初期化(SLAVE)(2)(1)lin_init()(2)lin_init(), lin_response_data_set(), lin_slave_header_receive()

RTC スタート
TAU00 タイマ
スタート
main loop
受信データ
確認

data_receive()※後のページにフローチャート記載

main loop

20

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

タイマ(TAU00)処理 timer.h 内 timer_tau00() 50ms 毎の定期処理 ※「タイマモード」の場合のみ使用

start
カウンタ(1)
インクリメントno

カウンタ(1)が設定値(*1)を超えた(*1)デフォルトでは 20（50ms×20=1 秒）#define LIN_INTERVAL_TIME 20

yes
カウンタ(2)
== 0

no

yes
送信データ
設定

id = 0x31 +カウンタ(2)-1

送信メッセージ
表示

送信メッセージ
表示

MASTER
レスポンス送信MASTER
ヘッダ送信

カウンタ(2)
インクリメント

カウンタ(2)が設定値(*2)を超えた(*2)デフォルトでは 4
no#define LIN_SLAVE_DEVICE_NUM 4

yes
カウンタ(2)=0
カウンタ(1)=0
end

MASTER レスポンス送信
MASTER ヘッダ送信(LIN-ID=0x31)
MASTER ヘッダ送信(LIN-ID=0x32)
MASTER ヘッダ送信(LIN-ID=0x33)
MASTER ヘッダ送信(LIN-ID=0x34)
上記動作を、1 秒間隔で繰り返します。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

21

1 秒毎の定期処理 r_cg_rtc_user.c 内 r_rtc_callback_constperiod()

start
シリアル NO
インクリメント※シリアル NO は MASTER レスポンス送信でも使用されます

SLAVE 用送信
データ生成

シリアル NO, LED, SW, ,A/D 変換値, 0x00, 0x00

SLAVE 送信
データセットA/D 変換実行

lin_response_data_set()※A/D 変換結果は変換完了時、割り込みで結果を回収し、グローバル
変数に代入します

end

受信データ確認 r_main.c 内 data_receice()startloop(ch0)
受信バッファ
読み出し(ch0)

受信データ
なし

lin_data_read()yesloop(ch1)

no
受信データ
表示

受信データ
data[3] != 0

受信バッファ
読み出し(ch1)

no

受信データ
なし

yes
LED2 点灯

LED2 消灯

lin_data_read()

yes

no
受信データ
表示

loop(ch0)loop(ch1)
end

受信データ処理は、メイン関数のループ内で呼び出されます。LIN-ch0 側(MASTER)の受信バッファが空になるま
で受信データの表示を行い、次に LIN-ch1 側(SLAVE)の受信バッファが空になるまで受信データの表示を行います。

22

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

3. 関数仕様
・ソースファイル構成
フォルダ
RL78_F24_LIN¥usr_src¥lin

ファイル
lin.c
lin.h
lin_operation.h

RL78_F24_LIN¥usr_src¥sci
sci.c
sci.h
RL78_F24_LIN¥usr_src¥timer
timer.ctimer.h

説明
LIN ソースフォルダ
LIN 通信処理関数
lin.c 向けヘッダファイル
速度や ID 等の定義
SCI ソースフォルダ
SCI(UART)処理関数
sci.c 向けヘッダファイル
タイマ処理フォルダ
定期処理関数timer.c 向けヘッダファイル

3.1. ヘッダファイルで定義している定数3.1.1. lin.h の定数定義
lin.h/*---------------------------------------------------------------------定数定義（ユーザ設定箇所）----------------------------------------------------------------------*///定義時端末にデバッグ表示を行う//#define SCI_DEBUG//定義時割り込みを端子でモニタする#define LIN_INTERRUPT_DEBUG//レスポンスデータサイズ#define LIN_RESPONSE_DATA_SIZE

8//受信バッファサイズ#define LIN_RECV_BUF_SIZE//lim_message構造体のバッファ数×ch分のメモリを消費

16//レスポンスデータのサイズを送信側と受信側で同じ値とする//割り込みコールバック関数の有効化//#define LIN_USE_SEND_CALLBACK_FUNCTION //送信割り込み関数のコールバック関数を使用する//#define LIN_USE_RECEIVE_CALLBACK_FUNCTION //受信割り込み関数のコールバック関数を使用する//#define LIN_USE_STATUS_CALLBACK_FUNCTION //ステータス割り込み関数のコールバック関数を使用する/*---------------------------------------------------------------------定数定義----------------------------------------------------------------------*///モード#define LIN_MASTER 0#define LIN_SLAVE 1//LIN-ch数#define LIN_CH_NUM#define LIN_CH0 0#define LIN_CH1 1

2//RL78/F24の場合2ch

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

23

lin.h（続き）//TXフラグ#define LIN_TX_FLAG 0x1//送信中#define LIN_TX_RESPONSE_FLAG 0x2//RXフラグ#define LIN_RX_READY

0x1//マスタレスポンス送信//レスポンス受信待機//速度設定(bps)#define LIN_SPEED_2400 1#define LIN_SPEED_9600 2#define LIN_SPEED_10417 3#define LIN_SPEED_19200 4//速度設定(LBRPxx)#define LIN_SPEED_LBRP0 130//2400bps, 9600bps, 19200bps向け 1/40MHz×130×1(LCKS:fa)×16 = 52us(=1/19200)#define LIN_SPEED_LBRP1 120//10417bps向け 1/40MHz×120×16×2(LCKS:fd)×16 = 96us(=1/10417)//速度設定（システムクロック選択ビット）#define LIN_SPEED_2400_LCKS 2//fc(LBRP0:1/8)#define LIN_SPEED_9600_LCKS 1//fb(LBRP0:1/2)#define LIN_SPEED_10417_LCKS 3//fd(LBRP1:1/2)#define LIN_SPEED_19200_LCKS 0//fa(LBRP0:1/1)//動作モード#define LIN_OPERATION_TIMER 0#define LIN_OPERATION_UART 1//タイマ動作//UARTコマンド入力に応じて動作//戻り値#define LIN_RET_SUCCESS 0//成功#define LIN_RET_NODATA -1//データなし#define LIN_RET_ARGUMENT_ERROR -2//引数エラー#define LIN_RET_IN_USE -3//送信中#define LIN_RET_PIOR_ERROR -4//端子設定(PIOR)エラー#define LIN_RETFLAG_LOST_DATA 0x80 //失われたデータあり（戻り値と or を取る）
（後略）

#define SCI_DEBUG
定義時端末表示がデバッグモードとなります。
-LIN header/response data send : LIN-ID=0x30 data=0x000200000A780000[intr(ch1)=recv][intr(ch0)=send][intr(ch0)=send][intr(ch1)=recv]
LIN data receive(ch1) : LIN-ID=0x30 data=0x000200000A780000 sum=0x8A-LIN header send : LIN-ID=0x31[intr(ch1)=recv][intr(ch0)=send][intr(ch1)=send][intr(ch0)=recv]
LIN data receive(ch0) : LIN-ID=0x31 data=0x001D000005360000 sum=0xF5

MASTER ヘッダ・レスポンス
送信

MASTER ヘッダ送信（SLAVE レスポンス送信）

赤字の行が表示される様になり、処理中にどの種類の割り込みが入っているかが判る様になります。
24

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

MASTER ヘッダ・レスポンス送信の場合は、MASTER 側がヘッダを送出した時点で、・ch1(SLAVE)の受信割り込み
・ch0(MASTER)の送信割り込みが、ほぼ同時に発生し、MASTER がレスポンス送信を終えた時点で、・ch0(MASTER)の送信割り込み
・ch1(SLAVE)の受信割り込みが発生しています。
MASTER ヘッダ・レスポンス
送信－意図的にエラーを起こさせた場合－

LIN header/response data send : LIN-ID=0x30 data=0x000100000A7C0000[intr(ch1)=recv][intr(ch0)=send][intr(ch1)=stat LST1=0x88 LEST1=0x80][intr(ch0)=send]

例えば、ch1(SLAVE)側を受信待機せずに、ch0(MASTER)側からデータ送信した場合、ch1(SLAVE)側はデータ受信してない（LIN data receive(ch1)の表示が出ない）ものの、[intr(ch1)=recv]となっているので、ch1 側には受信割り込みが発生している事が判ります。その後、[intr(ch1)=stat LST1=0x88 LEST1=0x80]
ch1(SLAVE)側はステータス割り込みが入り、その際のエラーステータス（LEST1=0x80, レスポンス準備エラー）が判ります。
MASTER ヘッダ・レスポンス
送信－LIN のケーブルを抜いた場合－
LIN header/response data send : LIN-ID=0x30 data=0x002F00000A7A0000[intr(ch0)=send][intr(ch0)=send]

なお、ch0 と ch1 をつなぐケーブルを抜いて、ch0(MASTER)側からデータ送信した場合、表示は上記の様になります。デバッグ表示 OFF の時の表示は「意図的にエラーを起こさせた場合」と同一ですが、デバッグ表示を行わせると、違いが判る様になります。（この例では、ch1 側は全く反応していません。）
本プログラムでは、チェックサムエラーとなった場合はデータを受信バッファに格納せずに捨てる仕様としています。
そのような場合でも、受信割り込み（ヘッダ受信時）やステータス割り込み（エラー発生時）は発生するはずなので、意図しない動作となった場合、デバッグ表示を有効にすると、エラー時のエラーステータスレジスタの値等の確認が可能となります。

#define LIN_INTERRUPT_DEBUG
定義時割り込みを端子でモニタできる様になります（詳細は 5 章参照）。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

25

#define LIN_RESPONSE_DATA_SIZE 8
レスポンスデータのデータサイズ（バイト数）
LIN は、パケット毎にデータサイズを変更するのに適していないプロトコルですので、本定数でデータサイズを固定化しています。

#define LIN_RECV_BUF_SIZE 16
受信バッファ(lin_message 構造体）の配列数
sizeof(lin_message)×LIN_CH_NUM(2)×LIN_RECV_BUF_SIZE のメモリを消費します。
※デフォルトでは LIN_RECV_BUF_SIZE=16 としていますが、保持できるデータ数は 15 となります（未読み出しの状態で、16 個目のデータを受信した場合、1 つ目のデータは（この時点では上書きはされないものの）
参照不可となります）→受信バッファはリングバッファの構成を取っており、2 つのインデックス g_lin_recv_buf_index1（書き込みインデックス）と g_lin_recv_buf_index2（読み出し済みインデックス）から構成されています。g_lin_recv_buf_index1 ==g_lin_recv_buf_index2 の場合、格納データが無いと判断しているアルゴリズムのため、実際に使用可能なデータ数
は LIN_RECV_BUF_SIZE-1 となっています。
※バッファメモリをフルに活用したい場合は、index1 と index2 の運用を見直してみてください// #define LIN_USE_SEND_CALLBACK_FUNCTION// #define LIN_USE_RECEIVE_CALLBACK_FUNCTION// #define LIN_USE_STATUS_CALLBACK_FUNCTION
割り込みコールバック関数の有効化。
LIN_USE_SEND_CALLBACK_FUNCTION を定義した場合、送信割り込み時に、
linn_interrupt_send_callback(n=0~1)関数が呼ばれます。
LIN_USE_RECEIVE_CALLBACK_FUNCTION を定義した場合、受信割り込み時に、
linn_interrupt_receive_callback(n=0~1)関数が呼ばれます。
LIN_USE_STATUS_CALLBACK_FUNCTION を定義した場合、ステータス割り込み時に、
linn_interrupt_status_callback(n=0~1)関数が呼ばれます。
（n: 0~1 は、LIN-ch 毎）
割り込み時にユーザ処理を追加したい場合、有効化して、コールバック関数の中身を記載してください。

26

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

#define LIN_SPEED_LBRP0 130#define LIN_SPEED_LBRP1 120
通信速度は、lin_operation.h で 2400, 9600, 10417, 19200bps を選択できるようになっています。
上記値は、LBRP0/1（速度設定レジスタ）に設定している値です。予め定義されている、4 種類の速度以外の速度値とする場合は、レジスタ設定値を計算して設定してください。

#define LIN_SPEED_2400_LCKS 2#define LIN_SPEED_9600_LCKS 1#define LIN_SPEED_10417_LCKS 3#define LIN_SPEED_19200_LCKS 0
LCKS
0
1
2
3

fx
fa
fb
fc
fd

分周比
1/1
1/2
1/8
1/2

プリスケーラ
LBRP0
LBRP0
LBRP0
LBRP1

2400bps の場合は「LBRP0 の 1/8」(=fc)、9600bps の場合は「LBRP0 の 1/2」(=fb)、10417bps の場合は
「LBRP1 の 1/2」(=fd)、19200bps の場合は「LBRP0 の 1/1」(=fa)をベースクロックとして選択する設定です。
LIN の通信速度（1bit の時間）は、
1/40MHz(fCLK) ×分周比(LCKS) ×プリスケーラ設定値(LBRP)×16 サンプリング
で決まります。1bit 時間は、
・LBRP0 側を使用
19200bps: 1/40MHz ×1 × 130 × 16 = 52[us], (LCKS=0, fa : 1 ×LBPR0(130))
9600bps: 1/40MHz ×2 × 130 × 16 = 104[us], (LCKS=1, fb : 2 ×LBPR0(130))
2400bps: 1/40MHz ×8 × 130 × 16 = 416[us], (LCKS=2, fc : 8 ×LBPR0(130))・LBRP1 側を使用
10417bps: 1/40MHz ×2 × 120 × 16 = 96[us], (LCKS=3, fd : 2 ×LBPR1(120))
上記設定値となります。
任意の速度とする場合は、LBRP0 または LBRP1 レジスタ値と、LCKS の値（どちらのプリスケーラを使用するかと分周比）を調整してください。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

27

本節で説明していない定数は、プログラム動作で使用されている定数値で基本的には変更の必要はありません。

typedef struct{unsigned char id;
unsigned char data[8];unsigned char sum;
unsigned char size;} lin_message;

lin_message 構造体は、・LIN-ID（1 バイト）・データ（8 バイト）・チェックサム（拡張チェックサム、1 バイト）・データサイズ（1~8 の値、1 バイト）で構成される、LIN の受信メッセージを扱う構造体です。

28

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

3.1.2. lin_operation.h の定数定義
lin_operation.h*---------------------------------------------------------------------定数定義（ユーザ設定箇所）----------------------------------------------------------------------*///使用CH#define LIN_USE_CH0//LIN-ch0を使用する#define LIN_USE_CH1//LIN-ch1を使用する//速度設定（いずれかを選択）//#define LIN_SPEED LIN_SPEED_2400//2400bps#define LIN_SPEED LIN_SPEED_9600//9600bps//#define LIN_SPEED LIN_SPEED_10417//10417bps//#define LIN_SPEED LIN_SPEED_19200//19200bps//割り込み優先度#define LIN_INTERRUPT_PRIORITY

1//0:最高優先度～3:最低優先度//LIN ID#define LIN_MASTER_ID 0x30 //MASTER動作時に設定するID#define LIN_SLAVE_ID 0x31 //SLAVE動作時に設定するID//SLAVEレスポンスを要求するID（MASTER動作時のみ使用）#define LIN_SLAVE_RESPONSE_START_ID 0x31//SLAVEレスポンス送信を要求する要求先 0x31,
0x32, 0x33, 0x34 ....
//レスポンス要求するSLAVEデバイス数（MASTER動作時のみ使用）#define LIN_SLAVE_DEVICE_NUM 4//0x31 ~ 0x34 に対してレスポンス要求する//動作モード（どちらかを選択）//#define LIN_OPERATION_MODE LIN_OPERATION_TIMER//下記のインターバル時間毎にヘッダ送信#define LIN_OPERATION_MODE LIN_OPERATION_UART//UARTからのコマンドでヘッダ送信//動作インターバル時間[x50ms]（MASTER動作時のみ使用）#define LIN_INTERVAL_TIME 20//1秒毎にヘッダを出す/*
MASTERの場合、50×LIN_INTERVAL_TIME[ms]毎に、(1)ID=0x30（マスタレスポンス送信）(2)ID=0x31（スレーブレスポンス送信要求）(3)ID=0x32（スレーブレスポンス送信要求）(4)ID=0x33（スレーブレスポンス送信要求）(5)ID=0x34（スレーブレスポンス送信要求）を繰り返す（(LIN_SLAVE_DEVICE_NUM+1)×50×LIN_INTERVAL_TIME[ms]で1周）*/

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

29

#define LIN_USE_CH0#define LIN_USE_CH1
使用する LIN-ch を有効にしてください。使用しない LIN-ch はコメントアウトして、定数を未定義としてください。

// #define LIN_SPEED LIN_SPEED_2400#define LIN_SPEED LIN_SPEED_9600// #define LIN_SPEED LIN_SPEED_10417// #define LIN_SPEED LIN_SPEED_19200
速度設定です。いずれか 1 行のみ有効化（コメントアウトを外す）してください。予め定義されている 4 種類以外の速度を使用する場合は、lin.h 側含め修正が必要です。
※MASTER の場合本速度設定が有効になります
SLAVE の場合、ヘッダに含まれる sync フィールドのパルス幅に従い通信速度が決定されます#define LIN_INTERRUPT_PRIORITY 1
LIN の割り込み優先度の設定です。0（最高優先度）～3（最低優先度）のいずれかの値としてください。
LIN の割り込みは、「送信割り込み」「受信割り込み」「ステータス割り込み」の 3 種類ありますが、本プログラムでは3 種類の割り込みに上記で設定した値を適用します。（3 種類の割り込みの優先度を変えたい場合は、lin.c の修正が必要です。）#define LIN_MASTER_ID 0x30
#define LIN_SLAVE_ID 0x31
サンプルプログラムでは、ch0 を MASTER, ID=0x30。ch1 を SLAVE, ID=0x31 に設定しています。LIN の ID はこの定数値を使用しています。

#define LIN_SLAVE_RESPONSE_START_ID 0x31
キーボードからのコマンドで動作するモードの場合の、コマンド 1~9。タイマ動作するモードの SLAVE に対しヘッダ送信を行う ID の開始値です。コマンド 1:ID=0x31、コマンド 2:ID=0x32。タイマ動作の場合 ID=0x31 から ID をインクリメントさせながら、ヘッダ送信します。

30

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

#define LIN_SLAVE_DEVICE_NUM 4
タイマ動作するモードの SLAVE に対しヘッダ送信を行う ID の数です。（コマンドモードの時は未使用です。）4 の場
合、ID=0x31~ID=0x34 の 4 つの SLAVE に対してヘッダ送信を行います。

// #define LIN_OPERATION_MODE LIN_OPERATION_TIMER#define LIN_OPERATION_MODE LIN_OPERATION_UART
サンプルプログラムの動作モードを決める定数です。どちらか一方を有効化してください。
LIN_OPERATION_UART は、UART 経由でコマンド入力で動作（デフォルト）、LIN_OPERATION_TIMER は、タイマモードで一定時間毎に、MASTER ヘッダ・レスポンス送信、MASTER ヘッダ送信…、を繰り返します。

#define LIN_INTERVAL_TIME 20
タイマ動作モード時のヘッダの送信間隔です。50ms（基本周期）の何倍かを指定する値です。（20 の場合、50ms×
20=1 秒間隔でのヘッダ送信。）
9600bps 設定の場合、8 バイトのレスポンスデータ送信で一連のパケット（ヘッダ＋レスポンス）の時間は、約 13msになります。LIN バスのケーブル長が長い場合（MASTER と SLAVE の距離が離れている場合）や、SLAVE がRL78/F24 ではなく別デバイスの場合等、13ms という時間は多少長くなる事はあり得ます。9600bps の場合は、この値を最小で 1 に設定（50ms 毎にヘッダ送信を行う設定）しても問題ないと思います。
2400bps 設定の場合は、8 バイトのレスポンスデータ送信で 53ms 程度となますので、最低でも 2 以上の値とする必要があります。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

31

3.2. lin.c 内で定義している関数
lin_init
概要：初期化関数
宣言：
int lin_init(unsigned char ch, unsigned char mode, unsigned char id)
説明：・ch の有効化
・割り込み設定・通信速度、通信条件の設定を行います引数：
ch: LIN の ch 番号(0~1)
mode: MASTER/SLAVE 区分 LIM_MASTER(0)、または LIN_SLAVE(1)
id: LIN-ID(0x0~0x3f)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
LIN_RET_PIOR_ERROR(-4): LIN 端子設定エラー（PIOR 設定が正しくない）
補足：
SLAVE 時は、本関数で設定した値と受信したヘッダに含まれる ID 値が一致した場合、レスポンス送信を行います
MASTER 時は、ここで指定した ID はグローバル変数に保存されますので設定した ID 値の参照は可能ですが本サンプルプログラムでは使用していません

lin_response_data_set
概要：レスポンスデータ設定関数
宣言：
int lin_response_data_set(unsigned char ch, unsigned char *data, unsigned char size)
説明：
・SLAVE 側での送信データの設定
を行います
32

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

引数：
ch: LIN の ch 番号(0~1)*data: レスポンスデータ（1~8 バイト）
size: データバイト数(1~8)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
補足：
SLAVE に設定した ch で実行するコマンドです
SLAVE 側の ch がレスポンス送信を行う予定がない場合（受信のみを行うケース）でも、本コマンドで受信データサイズの設定が必要です（その場合は*data はダミーで構いません）
SLAVE 側で自分自身の ID を含むヘッダを受信した場合、本コマンドで設定したレスポンスデータを送信します

lin_master_header_send
概要：ヘッダ送信関数
宣言：
int lin_master_header_send(unsigned char ch, unsigned char id, unsigned char size)
説明：・MASTER からヘッダの送信
を行います
引数：
ch: LIN の ch 番号(0~1)
id: ヘッダに含める LIN-ID(0x0~0x3f)
size: 受信予定のデータバイト数(1~8)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
LIN_RET_IN_USE(-3): 送信中（指定した ch で送信中）
補足：
本コマンドで設定した size と実際に受信したバイト数が合わない場合エラーとなり、データ受信は行われません（SLAVE 側で実行した lin_response_data_set()で指定した size と合わせる様にしてください）
実際に LIN バスに流れる ID は、指定した id 値にパリティが付与されたもの(PID)となります
本コマンドで指定する id は、パリティを付与しない 0~0x3f の ID を指定してください

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

33

lin_master_header_response_send
概要：ヘッダ・レスポンス送信関数
宣言：
int lin_master_header_response_send(unsigned char ch, unsigned char id, unsigned char *data,
unsigned char size)
説明：・MASTER からヘッダ・レスポンス送信の送信
を行います
引数：
ch: LIN の ch 番号(0~1)
id: ヘッダに含める LIN-ID(0x0~0x3f)（MASTER デバイスの ID）*data: 送信データ（1~8 バイト）
size: 送信のデータバイト数(1~8)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
LIN_RET_IN_USE(-3): 送信中（指定した ch で送信中）
補足：
実際に LIN バスに流れる ID は、指定した id 値にパリティが付与されたもの(PID)となります
本コマンドで指定する id は、パリティを付与しない 0~0x3f の ID を指定してください

lin_slave_header_receive
概要：ヘッダ受信待機関数
宣言：
int lin_slave_header_receive(unsigned char ch)
説明：・SLAVE 側のヘッダ受信待機状態への遷移
を行います
引数：
ch: LIN の ch 番号(0~1)

34

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
補足：
SLAVE デバイスの場合、lin_init()で初期化後、本関数でヘッダの受信待機状態にしてください
本関数実行前はヘッダの受信準備が整っていない状態です
lin_init() → lin_response_data_set() → 本関数 の順番で実行されることを想定しています
初期化後 lin_response_data_set()実行前にヘッダを受信した場合、意図しないデータを返送する事を抑止するために、本関数を設けています（意図しないデータを返送するよりエラーとして処理する）
lin_response_data_set()実行前に本コマンドを実行しても問題ありません※lin_init()では、レスポンスデータは 0x00×LIN_RESPONSE_DATA_SIZE に設定されていますので、
lin_response_data_set()未実行の場合は、受信したヘッダに SLAVE 自身の ID が含まれていた場合
0x00×LIN_RESPONSE_DATA_SIZE のレスポンスデータを送信します

lin_status_clear
概要：エラーステータスクリア関数
宣言：
int lin_status_clear(unsigned char ch)
説明：・エラーステータスのクリア
を行います
引数：
ch: LIN の ch 番号(0~1)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
補足：
ステータス・レジスタ(LSTn)
エラー・ステータス・レジスタ(LESTn)のクリアを行います

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

35

lin_read_data
概要：受信データ読み出し関数
宣言：
int lin_read_data(unsigned char ch, lin_message *msg)
説明：・受信バッファに格納されているデータの読み出し
を行います
引数：
ch: LIN の ch 番号(0~1)*msg: lin_message 構造体
lin_message 構造体
unsigned char id;

受信したデータのID

unsigned char data[8];受信データ

unsigned char sum;

チェックサム値

unsigned char size;

データバイト数

戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RETFLAG_LOST_DATA(0x80): 読み出し前に上書きされたデータあり（データの読み出し完了）
LIN_RET_NODATA(-1): 未読み出しのデータなし
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー
補足：
データを受信したタイミングで、受信割り込み関数内で、受信バッファ(g_lin_recv_buf)にデータが格納されます
本関数は、受信バッファに格納されているデータの読み出しを行います
未読み出しの(LIN_RECV_BUF_SIZE-1)数のデータが溜まっている状態で次のデータを受信すると、一番古いデータが上書きされます
その状態で本関数を呼び出すと、格納されているデータで一番古いデータが読み出され、関数の戻り値は失われたデータがある事を示す 0x80 を返します36

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

lin_read_data_size
概要：受信データ数読み出し関数
宣言：
lin_read_data_size(unsigned char ch)
説明：・受信バッファに格納されているメッセージ数の情報
を返します
引数：
ch: LIN の ch 番号(0~1)
戻り値：
0: 未読み出しのデータなし>0: 受信バッファに格納されているメッセージ数
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー

lin_read_buf_clear
概要：受信データクリア関数
宣言：
int lin_read_buf_clear(unsigned char ch)
説明：・受信バッファに格納されているデータをクリア（読み出し済みにセット）
を行います
引数：
ch: LIN の ch 番号(0~1)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_ARGUMENT_ERROR(-2): 引数エラー

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

37

－ローカル関数（外部からの呼び出し不可）－

lin_port_init
概要：ポート初期化関数
宣言：
int lin_port_init(unsigned char ch)
説明：・LIN 通信で使用する I/O ポートの初期化
を行います
引数：
ch: LIN の ch 番号(0~1)
戻り値：
LIN_RET_SUCCESS(0): 正常終了
LIN_RET_PIOR_ERROR(-4): LIN 端子設定エラー
補足：
LIN の端子はプログラムでは、下記の端子を使用する設定としています
別な端子を使用する場合や EN（LIN ドライバイネーブル端子）を使用しない場合は、本関数内の記載を適宜変更ください

LIN-ch0
LIN-ch1

LTXDn
P13
P42
P10
P106
P120

LRXDn
P14
P43
P11
P107
P125

備考
PIOR44=1
PIOR45=1, PIOR93=0
PIOR45=1, PIOR93=1

LIN の使用端子は、太字がデフォルトで、デフォルト以外の端子を選択する場合は、PIOR レジスタの設定が必要です。（下線が本キットでの使用端子）－本キットでの使用端子－

LIN-ch0
LIN-ch1

LTXDn

LRXDn

EN

P13
P106

P14
P17

P53
P156

Local
WAKE-up
P52
P157※LIN-ch0 側は、PIOR レジスタの設定は不要です。
LIN-ch1 側は、PIOR45=1 の設定が必要です。
Local WAKE-up の端子は本サンプルプログラムでは未使用です。

38

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

本サンプルプログラムの端子定義は、board.h 内で定義されており、以下の様になっています。
//LINのポート(LIN0)#define LIN0_TX_P13#define LIN0_RX_P14#define LIN0_EN_P53//LINのポート(LIN1)#define PIOR45 1#define LIN1_TX_P106#define LIN1_RX_P107#define LIN1_EN_P156[参考]
本サンプルプログラムを当社製、HSBRL78F24-64 で使用する場合の端子設定。
//LINのポート(LIN0)#define PIOR44 1#define LIN0_TX_P42#define LIN0_RX_P43#define LIN0_EN_P32

HSBRL78F24-64 では、PIOR レジスタの設定が必要で、上記の様な端子設定とする必要があります。（PIOR44の定数値を 1 に設定する事により、lin_init_port()関数内で、PIOR44=1 の設定が実行されます。）#define PIOR44 1 の設定がないにも拘らず#define LIN0_TX_P42 を定義した場合、lin_init_port()関数は、戻り値-4（PIOR 設定と、使用端子のミスマッチ）のエラーを返します。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

39

3.3. 割り込みコールバック関数
割り込みコールバック関数は、ユーザ記載のコード内で定義してください。

linn_interrupt_send_callback (n=0~1)
概要：送信割り込みコールバック関数
宣言：
void lin0_interrupt_send_callback(void)
void lin1_interrupt_send_callback(void)
説明：・送信割り込み処理の終わりでコールされます
引数： なし戻り値： なし
補足：
LIN-ch 毎に別関数となっています
使用時は、#define LIN_USE_SEND_CALLBACK_FUNCTION を有効化してください

linn_interrupt_receive_callback (n=0~1)
概要：受信割り込みコールバック関数
宣言：
void lin0_interrupt_receive_callback(void)
void lin1_interrupt_receive_callback(void)
説明：・受信割り込み処理の終わりでコールされます
引数： なし戻り値： なし
補足：
LIN-ch 毎に別関数となっています
使用時は、#define LIN_USE_RECEIVE_CALLBACK_FUNCTION を有効化してください

40

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

linn_interrupt_status_callback (n=0~1)
概要：ステータス割り込みコールバック関数
宣言：
void lin0_interrupt_status_callback(void)
void lin1_interrupt_status_callback(void)説明：・ステータス割り込み処理の終わりでコールされます
引数： なし戻り値： なし
補足：
LIN-ch 毎に別関数となっています
使用時は、#define LIN_USE_STATUS_CALLBACK_FUNCTION を有効化してください

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

41

3.4. 使用しているグローバル変数
g_lin_id
用途：ch 毎の LIN-ID を保持宣言：
unsigned char g_lin_id[LIN_CH_NUM];説明：SLAVE 動作時、ヘッダに含まれる ID と自局の ID（＝g_lin_ld）が一致しているかの判定に使用します

g_lin_mode
用途：ch 毎の動作モード(MASTER/SLAVE)を保持
宣言：
unsigned short g_lin_mode[LIN_CH_NUM];
説明：
MASTER 動作時、LIN_MASTER(0)SLAVE 動作時、LIN_SLAVE(1)
受信割り込み関数内で動作モードで処理を分ける際などに使用します

g_lin_tx_flag
用途：送信状態を表すフラグ変数
宣言：
unsigned short g_lin_tx_flag[LIN_CH_NUM];
説明：
送信中 LIN_TX_FLAG(0x1)
MASTER 動作時、レスポンスデータ送信予定 LIN_RESPONSE_FLAG(0x2)の OR を取ります ※詳しくは 4.5 節参照

42

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

g_lin_rx_flag
用途：受信状態を表すフラグ変数
宣言：
unsigned short g_lin_rx_flag[LIN_CH_NUM];
説明：
レスポンスデータ受信待機中 LIN_RX_READY (0x1)、それ以外 0 を取ります ※詳しくは 4.5 節参照

g_lin_recv_buf
用途：受信リングバッファ
宣言：
lin_message g_lin_recv_buf[LIN_CH_NUM][LIN_RECV_BUF_SIZE];
説明：
受信割り込み時、有効なレスポンスデータを受信すると本変数にデータを格納します

g_lin_send_buf
用途：送信バッファ（SLAVE 向け）
宣言：
unsigned char g_lin_send_buf[LIN_CH_NUM][8];説明：
SLAVE レスポンス送信の際、本バッファに格納されているデータを送信します

g_lin_recv_buf_index1
用途：受信リングバッファの書き込みインデックス
宣言：
unsigned short g_lin_recv_buf_index1[LIN_CH_NUM];

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

43

説明：
受信リングバッファにデータを格納する際、本インデックスが示す変数にデータが格納されます

g_lin_recv_buf_index2
用途：受信リングバッファの読み出しインデックス
宣言：
unsigned short g_lin_recv_buf_index2[LIN_CH_NUM];
説明：
受信リングバッファからデータを読み出す際、本インデックスが示す変数のデータを読み出します
読み出し時、g_lin_recv_buf_index2 == g_lin_recv_buf_index1 の場合、未読データがない事を示します

g_lin_recv_buf_override
用途：受信リングバッファの上書きフラグ
宣言：
unsigned short g_lin_recv_buf_override[LIN_CH_NUM];
説明：
受信リングバッファ書き込み時にバッファに空きがない（未読データで埋まっている）場合、格納されている中で最も古いデータから上書きされます
データの上書きが生じた際、本変数が 1 となります（データの読み出し時、データの上書きが生じた事を表す戻り値を返すと共に、本変数は 0 クリアされます）

44

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

4. 割り込み処理
4.1. MASTER レスポンス送信動作
ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信

MASTER が送信
MASTER デバイス

送信割り込み

送信割り込み

受信割り込み

受信割り込みSLAVE デバイス

MASTER レスポンス送信の場合は、送信(MASTER)側で、送信割り込みが「ヘッダ送信完了」のタイミングと「レスポンス送信完了」のタイミングで 2 回発生します。
SLAVE 側は、同様に受信割り込みが「ヘッダ受信完了」と「レスポンス受信完了」のタイミングで 2 回発生します。

4.2. MASTER ヘッダ送信動作
ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信
MASTER デバイス（ヘッダ送信）

SLAVE が送信
送信割り込み

受信割り込み

受信割り込み

送信割り込み

受信割り込み

受信割り込みSLAVE デバイス（ID 一致：レスポンス送信）

SLAVE デバイス（ID 不一致：受信）

受信したヘッダに含まれる
ID が自分自身の ID と一致しているかを比較して、「レスポンス送信を行う」か「受信」するか処理が分かれる

MASTER ヘッダ送信の際には、上記の様な割り込みの流れとなります。
SLAVE デバイスは、最初の受信割り込みで「レスポンス送信を行う」かどうかを判断する事になります。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

45

4.3. MASTER ヘッダ送信動作（応答する SLAVE なし）
ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PIDt
誰も送信しない

MASTER が送信

送信割り込みMASTER デバイス（ヘッダ送信）

ステータス割り込み

SLAVE デバイス（ID 不一致：受信）
受信割り込みID が自分自身の ID と一致しているか比較して、不一致だったので「受信」を選択

MASTER ヘッダ送信で応答する SLAVE が居ない場合、送信側ではステータス割り込みが入ります。
（エラーステータス LESTx=0x04, タイムアウトエラーとなります）※ステータス割り込みでエラーステータスをクリアするので、レスポンスがない場合でも動作の継続が可能です

4.4. 割り込み関数
4.4.1. 送信割り込み
lin.c 内 linn_interrupt_send() （n=0~1, ch 番号）
start
LIN_TX_RESPONSE_FLAG が立っている場合
g_lin_tx_flag& 0x2 != 0

0x2: LIN_TX_RESPONSE_FLAG
no0x1: LIN_TX_FLAG

yes
(1)

g_lin_tx_flag= 0x1

ステータスクリア(LSTn=LESTn=0)(2)
n=0~1, ch 番号

コールバック関数

linn_interrupt_send_callback()※コールバック関数有効化時に実行

end

・MASTER レスポンス送信の 1 回目（ヘッダ送信完了のタイミング）は(1)側・MASTER レスポンス送信の 2 回目（レスポンス送信完了のタイミング）は(2)側・SLAVE レスポンス送信の（レスポンス送信完了のタイミング）は(2)側が実行されます。
46

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

4.4.2. 受信割り込み
lin.c 内 linn_interrupt_receive() （n=0~1, ch 番号）
start
動作モードが SLAVE で LIN_RX_READY フラグが立っていないとき
SLAVE モード
かつ
g_lin_rx_flag& 0x1 != 0

0x1: LIN_RX_READY
noyes
受信した ID==自局の ID(1) yesnog_lin_rx_flag& 0x1 != 0

(2)

no

(3) yes

レスポンス送信

レスポンス受信待機

受信データを受信バッファにコピーg_lin_tx_flag= 0x1

g_lin_rx_flag= 0x1

g_lin_rx_flag=0
ステータスクリア(LSTn=LESTn=0)

0x1:
LIN_TX_FLAG
コールバック関数

n=0~1, ch 番号

linn_interrupt_receive_callback()※コールバック関数有効化時に実行

end

・MASTER ヘッダ送信時のレスポンス受信割り込みは(3)・SLAVE のヘッダ受信時にヘッダに含まれる ID が自局の ID と一致したときは(1)・SLAVE のヘッダ受信時にヘッダに含まれる ID が自局の ID と一致しなかったときは(2)・SLAVE のレスポンス受信時は(3)が実行されます。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

47

4.4.3. ステータス割り込み
lin.c 内 linn_interrupt_status() （n=0~1, ch 番号）
start
ステータスクリア(LSTn=LESTn=0)
フラグクリアg_tx_flag=0
g_rx_flag=0
コールバック関数

linn_interrupt_status_callback()※コールバック関数有効化時に実行

end

n=0~1, ch 番号

ステータス割り込みでは、ステータスレジスタと、フラグ変数をクリアします。

4.5. フラグ変数に関して割り込みで処理内容を変えるため、プログラムでは 2 種類のフラグ変数
g_lin_tx_flag[ch]g_lin_rx_flag[ch]を使用しています。フラグ変数は、LIN-ch 毎に独立です。
g_lin_tx_flag は
bit0: LIN_TX_FLAG(0x1) 送信中を示すフラグ
bit1: LIN_TX_RESPONSE_FLAG(0x2) MASTER レスポンス送信を示すフラグ
g_lin_rx_flag は
bit0: LIN_RX_READY(0x1) レスポンス受信を待機するフラグを持ちます。

48

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

4.5.1. MASTER レスポンス送信の際の MASTER 側(1)lin_master_header_response_send()内[ g_lin_tx_flag の、bit0(LIN_TX_FLAG)が立っている場合は、送信中としてエラーを返す ]・g_lin_tx_flag の、bit0(LIN_TX_FLAG)と bit1(LIN_TX_RESPONSE_FLAG)フラグを立てる(2)送信割り込み関数内(1)[linn_interrupt_send()][ g_lin_tx_flag の、bit1(LIN_TX_RESPONSE_FLAG)が立っている場合 ]→2 回入る送信割り込みの 1 回目、ヘッダ送信が終わったタイミング
・bit1(LIN_TX_RESPONSE_FLAG)フラグを落とす(2)送信割り込み関数内(2)[linn_interrupt_send()][ g_lin_tx_flag の、bit1(LIN_TX_RESPONSE_FLAG)が立っていない場合 ]→2 回入る送信割り込みの 2 回目、レスポンス送信が終わったタイミング
・g_lin_tx_flag の bit0(LIN_TX_FLAG)フラグを落とす

ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信

MASTER が送信

送信割り込みMASTER デバイス

送信割り込みlin_master_header_response_send()
g_lin_tx_flag
0x00

0x03

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

0x01

株式会社

0x00

49

4.5.2. MASTER レスポンス送信の際の SLAVE 側(1)受信割り込み関数内(1)[linn_interrupt_receive()][ g_lin_rx_flag の bit0(LIN_RX_READY)が立っていない場合 ]→2 回入る受信割り込みの 1 回目、ヘッダ受信のタイミングでの割り込み→ヘッダに含まれる ID でレスポンス送信を行うか、レスポンス受信を行うか判断するが MASTER レスポンス送信の場合は必ず IDが不一致となるはずである・レスポンス受信を行うので、g_lin_rx_flag の bit0(LIN_RX_READY)フラグを立てる(2)受信割り込み関数内(2)[linn_interrupt_receive()][ g_lin_rx_flag の bit0(LIN_RX_READY)が立っている場合 ]→2 回入る受信割り込みの 2 回目、レスポンス受信のタイミングでの割り込み・データ受信を行う（受信データを受信バッファにコピー）
・レスポンス受信が完了したので、g_lin_rx_flag の bit0(LIN_RX_READY)フラグを落とす

ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信

MASTER が送信

SLAVE デバイス

g_lin_rx_flag
0x00

50

受信割り込み

受信割り込み0x01

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

0x00

株式会社

4.5.3. MASTER ヘッダ送信の際の MASTER 側(1)lin_master_header_send()内[ g_lin_tx_flag の、b0(LIN_TX_FLAG)が立っている場合は、送信中としてエラーを返す ]・g_lin_tx_flag の、b0(LIN_TX_FLAG)フラグを立てる
・レスポンス受信を行うので、g_lin_rx_flag の bit0(LIN_RX_READY)フラグを立てる(2)送信割り込み関数内[linn_interrupt_send()][ g_lin_tx_flag の、bit1(LIN_TX_RESPONSE_FLAG)が立っていない場合 ]→ヘッダ送信が終わったタイミング（レスポンス送信の予定なし）
・g_lin_tx_flag の bit0(LIN_TX_FLAG)フラグを落とす（以降送信の予定がないので、送信中フラグを落とす）(2)受信割り込み関数内[linn_interrupt_receive()][ g_lin_rx_flag の bit0(LIN_RX_READY)が立っている場合 ]→レスポンス受信のタイミングでの割り込み・データ受信を行う（受信データを受信バッファにコピー）
・レスポンス受信が完了したので、g_lin_rx_flag の bit0(LIN_RX_READY)（受信待機）フラグを落とす

ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信
MASTER デバイス（ヘッダ送信）

SLAVE が送信
送信割り込み

受信割り込みlin_master_header_send()
g_lin_tx_flag
0x00

0x01

0x00

g_lin_rx_flag
0x00

0x01

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

0x00

株式会社

51

4.5.4. MASTER ヘッダ送信の際、レスポンス送信を行う SLAVE 側(1)受信割り込み関数内[linn_interrupt_receive()][ g_lin_rx_flag の bit0(LIN_RX_READY)が立っていない場合 ]→ヘッダ受信のタイミングでの割り込み→ヘッダに含まれる ID でレスポンス送信を行うか、レスポンス受信を行うか判断するが ID が一致してレスポンス送信を行うケース・レスポンス送信を行うので、g_lin_tx_flag の bit0(LIN_TX_FLAG)を立てる(2)送信割り込み関数内[linn_interrupt_send()]→レスポンス送信が終了したタイミング
・g_lin_tx_flag の bit0(LIN_TX_FLAG)フラグを落とす（送信が終わったので、送信中フラグを落とす）
ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信

SLAVE が送信

SLAVE デバイス（ID 一致：レスポンス送信）

g_lin_tx_flag
0x00

受信割り込み

送信割り込み0x01

0x00

g_lin_rx_flag
0x00

52

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

4.5.5. MASTER ヘッダ送信の際、レスポンス受信を行う SLAVE 側(1)受信割り込み関数内(1)[linn_interrupt_receive()][ g_lin_rx_flag の bit0(LIN_RX_READY)が立っていない場合 ]→2 回入る受信割り込みの 1 回目、ヘッダ受信のタイミングでの割り込み→ヘッダに含まれる ID でレスポンス送信を行うか、レスポンス受信を行うか判断するが ID が不一致だったので、レ
スポンス受信を行うケース
・レスポンス受信を行うので、g_lin_rx_flag の bit0(LIN_RX_READY)フラグを立てる(2)受信割り込み関数内(2)[linn_interrupt_receive()][ g_lin_rx_flag の bit0(LIN_RX_READY)が立っている場合 ]→2 回入る受信割り込みの 2 回目、レスポンス受信のタイミングでの割り込み・データ受信を行う（受信データを受信バッファにコピー）
・レスポンス受信が完了したので、g_lin_rx_flag の bit0(LIN_RX_READY)フラグを落とす

ヘッダ

V

ブレーク

レスポンス

Sync フィールド
PID

data(1)data(2)

Check
SUM

t
MASTER が送信

SLAVE が送信

SLAVE デバイス（ID 不一致：受信）

g_lin_tx_flag
0x00

受信割り込み

受信割り込み

0x01

0x00

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

53

以上、各ケースでのフラグ変数の変化を示します。
送信割り込み関数では、
g_lin_tx_flag の bit1(LIN_TX_RESPONSE)フラグ
g_lin_tx_flag & 0x2 != 0
（LIN_TX_RESPONSE フラグが立っている）
g_lin_tx_flag の LIN_TX_RESPONSE フラグを落とす※MASTER のみ

g_lin_tx_flag & 0x2 == 0
（LIN_TX_RESPONSE フラグが立っていない）
g_lin_tx_flag を 0 にする（送信完了）※MASTER, SLAVE 共

受信割り込み関数では、
g_lin_rx_flag の bit0(LIN_RX_READY)フラグ
g_lin_rx_flag==1（LIN_RX_READY フラグが立っている）
データ（レスポンスデータ）受信処理
g_lin_rx_flag を 0 にする（受信完了）※MASTER, SLAVE 共

g_lin_rx_flag==1（LIN_RX_READY フラグが立っていない）
ヘッダに含まれる ID により処理を分ける（レスポンス送信 or 受信待機）※SLAVE のみという、フラグによる処理分けを行っています。
・MASTER 動作、SLAVE 動作
・MASTER, SLAVE のどちらがレスポンスデータを送信するか・SLAVE の場合ヘッダに含まれる ID が自局の ID と一致するか
により、処理が分かれるので、多少複雑になっています。

54

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

5. プログラムのデバッグに関して
5.1. SCI デバッグ表示
lin.h 内の#define SCI_DEBUGを有効にすることにより、端末表示がデバッグモードとなります。
-LIN header send : LIN-ID=0x32[intr(ch1)=recv][intr(ch0)=send][intr(ch0)=recv][intr(ch1)=recv]
LIN data receive(ch0) : LIN-ID=0x32 data=0x00140400030E0000 sum=0xA4

MASTER ヘッダ送信（SLAVE レスポンス送信）

LIN data receive(ch1) : LIN-ID=0x32 data=0x00140400030E0000 sum=0xA4

割り込みが入ったタイミングで[intr...]の表示が出力されます。
※詳細は 3.2 節に記載しています

5.2. 割り込みのポートデバッグに関して送信、受信、ステータスの割り込みがどのタイミングで生じているかをモニタするのが、lin.h 内の定数定義#define LIN_INTERRUPT_DEBUGです。定義している場合、割り込みのタイミングで特定の I/O ポートを反転させます。
・割り込みのモニタ機能で使用する I/O ポート
マイコンボードHSBRL78F24-100

LIN0 送信(INTLIN0TRM)
P90(J2-1)

LIN0 受信(INTLIN0RVC)
P91(J2-2)

LIN0 ステータス(INTLIN0STA)
P92(J2-3)

LIN1 送信(INTLIN1TRM)
P93(J2-4)

LIN1 受信(INTLIN1RVC)
P94(J2-5)

LIN1 ステータス(INTLIN1STA)
P95(J2-6)

割り込みが入ってきた際、上記ポートが反転（L→H もしくは H→L）となりますので、オシロスコープ等で観測可能です。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

55

5.3. モニタプログラムに関して
CD 内の、SOURCE¥RL78_F24_100_LIN_MONITOR
プロジェクトは、LIN の通信モニタ用のサンプルプログラムです。
LIN-ch0(J8) データ送信用ポート(MASTER)
・ヘッダレスポンス送信（m コマンド）
ID=0x30（デフォルト）
送信データバイト数 1-8 バイト
送信データ（0x01 02 03 04 05 06 07 08, main.c 内に記載）
送信ビットレート 9,600bps（lin_operation.h 内で変更可）
・ヘッダ送信（q~o コマンド）
ID=0x31~39 のヘッダ送信
LIN-ch1(J9) データ受信用ポート(SLAVE)
オートボーレート（2.4~20kbps の信号受信可）
受信データバイト数 1-8 バイト（事前に設定要）
Copyright (C) 2024 HokutoDenshi. All Rights Reserved.
LIN Starter kit RL78/F24 Monitor sample program.
Command:1-8 : MASTER/SLAVE data packet byte size set(default=8)m : MASTER header/response send(ID=0x30)
q : SLAVE header send(ID=0x31)
w : SLAVE header send(ID=0x32)
e : SLAVE header send(ID=0x33)
r : SLAVE header send(ID=0x34)
t : SLAVE header send(ID=0x35)
y : SLAVE header send(ID=0x36)
u : SLAVE header send(ID=0x37)
i : SLAVE header send(ID=0x38)
o : SLAVE header send(ID=0x39)s : status printc : status clear>

キーボードからのコマンド
1-8: データサイズ指定コマンド
起動時のデフォルトは 8 バイト。送信、及び受信のバイト数を本コマンドで指定する。
m: ヘッダ・レスポンス送信
ID=0x30 でヘッダ・レスポンス送信を行う
56

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

q-o: ヘッダ送信
ID=0x31~0x39 でヘッダ送信を行う
s: ステータス,エラーレジスタの表示
c: ステータス,エラーレジスタのクリア
・LIN-ch0（送信動作）
LIN-ch0(J8)は、送信用のポートになりますので、LIN-SLAVE 機器を接続して下さい。通信レートは、デフォルトでは 9,600bps です。（変更時は、lin_operation.h を編集してください。）
・ID=0x32 のヘッダ送信, w コマンドの実行例（バス上に、レスポンスを返す SLAVE が存在する場合）
LIN header send : LIN-ID=0x32[intr(ch0)=send][intr(ch0)=recv]
LIN data receive(ch0) : LIN-ID=0x32 data=0x03100400034A0000 sum=0x69

・ID=0x33 のヘッダ送信, e コマンドの実行例（バス上に、レスポンスを返す SLAVE が存在しない場合）
LIN header send : LIN-ID=0x33[intr(ch0)=send][intr(ch0)=stat LST0=0x08 LEST0=0x04]

・ID=0x30 のヘッダ・レスポンス送信, m コマンドの実行例
LIN header/response data send : LIN-ID=0x30 data=0x0102030405060708[intr(ch0)=send][intr(ch0)=send]

・データサイズ変更コマンド, 1 コマンドの実行例
LIN default data byte size -> 1

データサイズ（送信及び受信）が 1 バイトになります。
・ID=0x30 のヘッダ・レスポンス送信, m コマンドの実行例
LIN header/response data send : LIN-ID=0x30 data=0x01[intr(ch0)=send][intr(ch0)=send]

送信バイト数が 1 バイトに変更されます。
LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

57

・LIN-ch1（受信動作）
LIN-ch1(J9)は、受信用のポートになりますので、LIN バスに接続して下さい。通信レートは、2.4k-20k オート・ボー
レートです。受信データバイト数は、起動後は 8 バイトです。（8 バイトのデータでなければ、受信完了しません。）1-8
コマンドで、受信データバイト数の変更が可能です。
・外部デバイスが ID=0x30 で 8 バイトのデータをヘッダ・レスポンス送信した場合[intr(ch1)=recv]
LIN header receive(ch1) : LIN-ID=0x30 9615[bps][intr(ch1)=recv]
LIN data receive(ch1) : LIN-ID=0x30 data=0x0000003200800000 sum=0x5C

表示としては、ヘッダを受信したタイミングとレスポンス（データ）を受信したタイミングで表示が 2 行に分かれます。
[intr...]の行は割り込み発生時の表示です。lin.h 内で SCI_DEBUG を未定義にした場合には、表示されなくなります。ヘッダ受信の際に、受信した信号のパルス幅から計算されるビットレートを表示します。
・外部デバイスが ID=0x32 でヘッダ送信した場合（レスポンスを返すスレーブが存在するケース）[intr(ch1)=recv]
LIN header receive(ch1) : LIN-ID=0x32 9615[bps][intr(ch1)=recv]
LIN data receive(ch1) : LIN-ID=0x32 data=0x0FFF040002D10000 sum=0xE6

このケースでは、ヘッダを送信したデバイスとレスポンスを送信したデバイスは別となりますが、ヘッダとレスポンスの表示が一連のデータとして表示されます。
・外部デバイスが ID=0x31 でヘッダ送信した場合（レスポンスを返すスレーブが存在しないケース）[intr(ch1)=recv]
LIN header receive(ch1) : LIN-ID=0x31 9615[bps]ヘッダの受信情報のみ表示を行います。
・ステータスの確認, s コマンド
LIN : status print
LIN0 : LST0=0x00 LEST0=0x00
LIN1 : LST1=0x80 LEST1=0x00

このケースでエラーを確認すると、LST b7(HTRC)=0b1 ヘッダ受信完了でレスポンスデータ待ちとなっている事が判ります。
（※この状態でヘッダを受信するとエラーとなります）

58

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

・外部デバイスが ID=0x12 で送信データ 2 バイトでヘッダ・レスポンス送信した場合[intr(ch1)=recv]
LIN header receive(ch1) : LIN-ID=0x12 9615[bps]

現状、受信バイト数が 8 バイトになっているので、ヘッダは受信しますが、データは受信しません。
・ステータスの確認, s コマンド
LIN : status print
LIN0 : LST0=0x00 LEST0=0x00
LIN1 : LST1=0xC0 LEST1=0x00

このケースでエラーを確認すると、LST b7(HTRC)=0b1, LST b6(D1RC)=0b1 ヘッダ受信完了、かつ 1 バイト目のデータ受信完了となっている事が判ります。（MASTER が 1 バイト目のデータを送信したのか、MASTER とは別な
SLAVE が 1 バイト目のデータを送信したのかは判断ができませんが、レスポンスデータを送信したデバイスが存在している事は判ります。）（※この状態でヘッダを受信するとエラーとなります）
・データサイズ変更コマンド, 2 コマンドの実行例
LIN default data byte size -> 2

・外部デバイスが ID=0x12 で送信データ 2 バイトでヘッダ・レスポンス送信した場合[intr(ch1)=recv]
LIN header receive(ch1) : LIN-ID=0x12 9615[bps][intr(ch1)=recv]
LIN data receive(ch1) : LIN-ID=0x12 data=0x3456 sum=0xE2

受信データサイズを変更すれば、8 バイト以外のデータも受信可能です。
※レスポンスデータを受信する際、受信前に RFDL レジスタにレスポンスデータサイズの指定が必要なため、任意のサイズのデータ受信はできません。LIN バスに流れているデータバイト数が不明な場合、1 コマンドで、データバイト
数を 1 バイトに設定した場合、データバイト数が 1 の場合受信完了となり、1 より大きい場合は下記のチェックサムエ
ラーとなります。
※受信待ちサイズより送信データバイト数が大きい場合
LIN default data byte size -> 1
[intr(ch1)=recv]
LIN header receive(ch1) : LIN-ID=0x12 9615[bps][intr(ch1)=stat LST1=0xC8 LEST1=0x20]

ステータス割り込みが発生し、エラー内容としては「チェックサムエラー」となる。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

59

レスポンスデータが存在しているのか不明な場合は、ヘッダ受信後に s コマンドでステータスを確認するか、1 コマ
ンドでデータバイト数を 1 に設定して、エラーが出ない場合：レスポンスデータが存在しない
受信完了：1 バイトのレスポンスデータあり
チェックサムエラー：レスポンスデータは存在しているが、受信サイズが合っていないという判断が可能です。
LIN バスにどのようなデータが流れているのかモニタする用途で使用可能な、サンプルプログラムとなります。
※SLAVE のレスポンス応答を行わせたい場合は、
main.c 内
g_lin_id[LIN_CH1] = 0xff;//レスポンスを返す事がない様ダミー値を設定

上記の 0xff のところを、レスポンスを返す ID に設定してください。レスポンスサイズは、1-8 コマンドでレスポンスデータのバイト数を設定可能です。

60

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

6. まとめ
lin.c に含まれる処理は、MASTER 動作時と SLAVE 動作時で、フラグ変数による場合分けは残っていますが、できるだけ簡素に使用できる様に構成したものです。
メイン関数や、タイマ割り込み関数はサンプルプログラムの位置付け、lin フォルダ内のファイル（lin.c, lin.h,
lin_operation.h（一部）は、独立して使用できるように組み立てています。

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル

株式会社

61

取扱説明書改定記録
バージョン
REV.1.0.0.0

発行日
2024.3.27

ページ
―

改定内容
初版発行

お問合せ窓口
最新情報については弊社ホームページをご活用ください。
ご不明点は弊社サポート窓口までお問合せください。
株式会社〒060-0042 札幌市中央区大通西 16 丁目 3 番地 7
TEL 011-640-8800 FAX 011-640-8801
e-mail：support@hokutodenshi.co.jp (サポート用)、order@hokutodenshi.co.jp (ご注文用)
URL:https://www.hokutodenshi.co.jp

商標等の表記について
・全ての商標及び登録商標はそれぞれの所有者に帰属します。

・

パーソナルコンピュータを PC と称します。

62

LIN・CAN スタータキット RL78/F24 ソフトウェア編 マニュアル株式会社

ルネサス エレクトロニクス RL78/F24(QFP-100 ピン)搭載
HSB シリーズマイコンボード 評価キット

LIN・CAN スタータキット RL78/F24
LIN ソフトウェア編 マニュアル株式会社©2024 北斗電子 Printed in Japan 2024 年 3 月 27 日改訂 REV.1.0.0.0 (240327)