usbcan-i 絶縁変換器(linux...

30
株式会社日新テクニカ ホームページ:http://www.nissin-tech.com メール:[email protected] 1 USBCAN-I 絶縁変換器(Linux も使える) 株式会社日新テクニカ http://www.nissin-tech.com [email protected] 2013/11/27 copyright@2013

Upload: others

Post on 13-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 1

USBCAN-I 絶縁変換器(Linux も使える)

株式会社日新テクニカ

http://www.nissin-tech.com

[email protected]

2013/11/27

copyright@2013

Page 2: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 2

修正履歴

修正日 修正内容

2013/11/27 初作成

関連のソフトとサンプルはこちらです。

http://kanebebe.dip.jp/download/USB-CAN-I

Page 3: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 3

1. 仕様 ...............................................................................................................................5

1.1. CAN BUS端子の結線.............................................................................................6 1.2. 指示LED ................................................................................................................6

2. ドライバ&ツール..........................................................................................................6 3. APIライブラリ ..............................................................................................................7

3.1 ライブラリの使い方 ...................................................................................................7 3.2 ライブラリの#define..................................................................................................9 3.3 ライブラリの構造体 ...................................................................................................9

3.3.1 USBCANデバイスの情報.....................................................................................9 3.3.2 CANフレームの構造体.......................................................................................10 3.3.3 CANコンバータのステータス ............................................................................10 3.3.4 エラー情報.........................................................................................................10 3.3.5 イニシャル用の構造体 ....................................................................................... 11

3.4 関数の説明 ............................................................................................................... 11 3.4.1 USBCANデバイスを開く................................................................................... 11 3.4.2 USBCANデバイスをクロス ...............................................................................12 3.4.3 CANのイニシャル ..............................................................................................12 3.4.4 USBデバイスの情報を読む ................................................................................15 3.4.5 最後のエラー情報を読む ...................................................................................16 3.4.6 パラメータを読む ..............................................................................................19 3.4.7 パラメータを設定する .......................................................................................21 3.4.8 読まない受信したフレーム数を獲得 .................................................................23 3.4.9 CANチャネルをスタートする ............................................................................23 3.4.10 CANチャネルをリセットする ..........................................................................24 3.4.11 CANフレームを送信する .................................................................................24 3.4.12 受信したCANフレームを読む .........................................................................25

4. Linux環境のソースコードをコンパイルする..............................................................25 4.1 USBドライバをコンパイルする ...............................................................................26 4.2 カーネル・ライブラリをコンパイルする.................................................................27 4.3 ライブラリをコンパイルする....................................................................................28 4.4 テスト用のサンプルをコンパイルする .....................................................................28 4.5 ARM/Linuxボードに実装 .........................................................................................28

Page 4: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 4

※ 使用されたソースコードはhttp://www.nissin-tech.com/

からダウンロードできます。

※ この文書の情報は、事前の通知なく変更されることがあり

ます。

※ (株)日新テクニカの書面による許可のない複製は、いかな

る形態においても厳重に禁じられています。

Page 5: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 5

1. 仕様

USB2.0/1.1 でを接続する CAN2.0A/B × 1, ISO11898 準処に対応 CAN ボーレート 5kbps~1Mbps で自由に設定可 CAN バスが電気絶縁、絶縁電圧 2500Vrms。 最大データ トラフィック:3000fps(標準 CAN フレーム) Windows9x/me/2000/XP/7 に対応 Linux-2.6.x に対応、ドライバとライブラリのソースコードも提供しております。弊社

の ARM/Linux シリーズボードも使える。 分析ソフト CANalyst(英語版)に対応 ライブラリと豊富な(VC、VB、Delphi、Labview)サンプルを提供、二次開発最適 動作温度:-25℃~85℃ 外形寸法:110mm×56mm×25mm

弊社の KaneBeBe シリーズボードと一緒に動く風景

Page 6: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 6

1.1. CAN BUS 端子の結線

端子番号 名前 説明 1 CANL CAN バスの CAN_L 線 2 CANH CAN バスの CAN_H 線 3 RES+ 4 RES-

120Ω終端抵抗の接続端子。ショットすると、120Ω終端抵抗を接続する。

5 GND CAN バスの GND

1.2. 指示 LED

指示 LED 状態 説明 PWR 点灯 電源正常 ERR 点滅 CAN バスエラー、正常に受送

信できません CAN 点滅 受送信時

同時に点滅すれば、デバイスが

正常、起動を待っています。

2. ドライバ&ツール

Driver フォルダには windows 32/64bit 用のドライバと Linux-2.6.x 用のドライバがありま

す。

Linux 環境のインストール手順: Linux 用 の ド ラ イ バ フ ァ イ ル Driver¥Linux V1.03¥driver¥usbcan.o を

/lib/modules/(*)/kernel/drivers/usb にコピーします。 ※ (*)は Linux のバージョンによって異なります。Linux のバージョン

Page 7: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 7

は 2.6.32 の場合は、2.6.32 です。 Linux 用 の ラ イ ブ ラ リ Driver¥Linux V1.03¥dll¥libcontrolcan.so と フ ォ ル ダ

Driver¥Linux V1.03¥dll¥kerneldlls を/lib にコピーします。 次のコマンドでライブラリのインストールを完成する。 # ldconfig /lib

ドライバをインストール完成した後、windows 環境のツール CANalyst-1.0.5.8.exe をイン

ストールして実行させます。

このツールのメニューの「語言」で英語が選択できます。 このツールで CAN デバイスのパラメータの設定、CAN フレームの受送信ができます。

3. API ライブラリ

3.1 ライブラリの使い方 API¥API Library フォルダのファイル ControlCAN.h、ControlCAN.lib、ControlCAN.dllと kerneldlls フォルダをワークスペース(workspace)にコピーします。 ソースコード(CPP)に次の行を添加する #include “ControlCAN.h”

リンクのライブラリに ControlCAN.lib を添加します。

Page 8: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 8

ライブラリの関数の使うフロー:

Page 9: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 9

3.2 ライブラリの#define デバイスタイプ:

デバイスタイプ 値 USBCAN1 3

USBCAN2 4

エラーコード: 名前 値 説明 ERR_CAN_OVERFLOW 0x00000001 CAN 内部 FIFO がオーバーフロー

ERR_CAN_ERRALARM 0x00000002 CAN エラー・アラーム

ERR_CAN_PASSIVE 0x00000004 CAN の passive エラー

ERR_CAN_LOSE 0x00000008 CAN の LOSE エラー

ERR_CAN_BUSERR 0x00000010 CAN bus エラー

ERR_DEVICEOPENED 0x00000100 デバイスが既に open されました

ERR_DEVICEOPEN 0x00000200 デバイスの open がエラー

ERR_DEVICENOTOPEN 0x00000400 デバイスはまだ open されません

ERR_BUFFEROVERFLOW 0x00000800 Buffer がオーバーフロー

ERR_DEVICENOTEXIST 0x00001000 デバイスがありません

ERR_LOADKERNELDLL 0x00002000 ライブラリのロードがエラー

ERR_CMDFAILED 0x00004000 コマンドの実行がエラー

ERR_BUFFERCREATE 0x00008000 メモリが不足

3.3 ライブラリの構造体 3.3.1 USBCAN デバイスの情報

typedef struct_VCI_BOARD_INFO{

USHORT hw_Version; //ハードウェアのバージョン、16 進、0x100 は V1.00

USHORT fw_Version; //ファームウェアのバージョン、16 進。

USHORT dr_Version; //ドライバのバージョン、16 進。

USHORT in_Version; //ライブラリのバージョン、16 進。

USHORT irq_Num; //割り込み番号

USHORT can_Num; //CAN チャネル数

USHORT str_Serial_Num[20]; //デバイスのシリアル番号

USHORT str_hw_Type[40]; //ハードウェアのタイプ、例“USBCAN V1.00”

USHORT Reserved[4];

Page 10: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 10

} VCI_BOARD_INFO,*PVCI_BOARD_INFO;

3.3.2 CAN フレームの構造体 typedef struct _VCI_CAN_OBJ{

UINT ID; //フレームの ID

UINT TimeStamp; //受信のタイム、イニシャル後からカウントされる

BYTE TimeFlag; //1 なら、受信のタイム TimeStamp を使う

BYTE SendType; //送信タイプ、0 正常送信、1 シングル送信、2 受送信、

//3 シングル受送信

BYTE RemoteFlag; //リモートフレーム

BYTE ExternFlag; //extern フレーム

BYTE DataLen; //データの長さ(<=8)

BYTE Data[8]; //フレームのデータ

BYTE Reserved[3];

}VCI_CAN_OBJ,*PVCI_CAN_OBJ;

3.3.3 CAN コンバータのステータス typedef struct _VCI_CAN_STATUS{

UCHAR ErrInterrupt; //割り込みカウンター、読むと 0 にする

UCHAR regMode; //CAN のモード・レジスター

UCHAR regStatus; //ステータス・レジスター

UCHAR regALCapture; //ロスト・レジスター

UCHAR regECCapture; //エラー・レジスター

UCHAR regEWLimit; //エラー制限・レジスター

UCHAR regRECounter; //受信エラーカウンター・レジスター

UCHAR regTECounter; //送信エラーカウンター・レジスター

DWORD Reserved;

}VCI_CAN_STATUS,*PVCI_CAN_STATUS;

3.3.4 エラー情報 typedef struct _ERR_INFO{

UINT ErrCode; //エラーコード

BYTE Passive_ErrData[3]; //passive エラー

BYTE ArLost_ErrData; //ロストエラー

} VCI_ERR_INFO,*PVCI_ERR_INFO;

Page 11: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 11

3.3.5 イニシャル用の構造体 typedef struct _INIT_CONFIG{

DWORD AccCode; //SJA1000 の ACR0/1/2/3 に対応、ACR0 は H Byte

DWORD AccMask; //SJA1000 の AMR0/1/2/3 に対応、AMR0 は H Byte

DWORD Reserved;

UCHAR Filter; //フィルターモード、0:シングル、1:ダブル

UCHAR Timing0; //ボーレート・タイマー0

UCHAR Timing1; //ボーレート・タイマー1

UCHAR Mode; //モード、0:正常、1:受信だけ

}VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;

Timing0 と Timing1 はボーレートを設定する

CAN ボーレート Timing0 Timing1

5kbps 0xbf 0xff

10kbps 0x31 0x1c

20kbps 0x18 0x1c

40kbps 0x87 0xff

50kbps 0x09 0x1c

80kbps 0x83 0xff

100kbps 0x04 0x1c

125kbps 0x03 0x1c

200kbps 0x81 0xfa

250kbps 0x01 0x1c

400kbps 0x80 0xfa

500kbps 0x00 0x1c

666kbps 0x80 0xb6

800kbps 0x00 0x16

1000kbps 0x00 0x14

3.4 関数の説明

3.4.1 USBCAN デバイスを開く DWORD __stdcall VCI_OpenDevice(DWORD DevType,DWORD DevIndex, DWORD Reserved);

入力:

Page 12: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 12

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

戻り値:

0: エラー

1: 成功

3.4.2 USBCAN デバイスをクロス DWORD __stdcall VCI_CloseDevice(DWORD DevType,DWORD DevIndex);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

戻り値:

0: エラー

1: 成功

3.4.3 CAN のイニシャル DWORD __stdcall VCI_InitCan(DWORD DevType, DWORD DevIndex, DWORD CANIndex,

PVCI_INIT_CONFIG pInitConfig);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号

pInitConfig:

イニシャル用の構造体

戻り値:

0: エラー

1: 成功

フィルターモードはシングル、受信は標準フレームの場合は

Page 13: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 13

ACR0/1/2/3 と AMR0/1/2/3 は CAN コントローラーSJA1000 のレジスターです。

フィルターモードはシングル、受信は拡張フレームの場合は

Page 14: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 14

フィルターモードはダブル、受信は標準フレームの場合は

Page 15: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 15

フィルターモードはダブル、受信は拡張フレームの場合は

3.4.4 USB デバイスの情報を読む DWORD __stdcall VCI_ReadBoardInfo(DWORD DevType, DWORD DevIndex,

PVCI_BOARD_INFO pInfo);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

pInfo:

Page 16: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 16

USB デバイス情報の構造体

戻り値:

0: エラー

1: 成功

3.4.5 最後のエラー情報を読む DWORD __stdcall VCI_ReadErrInfo(DWORD DevType, DWORD DevIndex, DWORD CANIndex,

PVCI_ERR_INFO pErrInfo);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。デバイス全体エラー情報を読めば-1

pErrInfo:

エラー情報の構造体

戻り値:

0: エラー

1: 成功

ErrCode Passive_ErrData ArLost_ErrData 説明

0x0100 NC NC 既に open した

0x0200 NC NC Open エラー

0x0400 NC NC まだ open しない

0x0800 NC NC Buffer overflow

0x1000 NC NC デバイスがなし

0x2000 NC NC DLL ライブラリをロードするエラー

0x4000 NC NC コマンドを実行するエラー

0x8000 NC NC メモリが不足

0x0001 NC NC CAN デバイスの FIFO overflow

0x0002 NC NC CAN デバイス・エラー・アラーム

0x0004 次の表をご参照 NC CAN デバイスの passive エラー

0x0008 NC 次の表をご参照 CAN デバイスの LOSE エラー

0x0010 NC NC CAN BUS エラー

Page 17: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 17

(PErrInfo‐>ErrCode&0x0004)==0x0004 なら、CAN デバイスが passive エラーあります。

Passive_ErrData[0]のビットの説明:

Bit7 Bit6 説明

0 0 ビット・エラー

0 1 フォーマット・エラー

1 0 Fill エラー

1 1 Reserved

Bit5 = 0: 送信時のエラー;

Bit5 = 1: 受信時のエラー;

Bit4 Bit3 Bit2 Bit1 Bit0 説明

0 0 0 1 1 フレームの開始

0 0 0 1 0 ID.28-ID.21

0 0 1 1 0 ID.20-ID.18

0 0 1 0 0 SRTR ビット

0 0 1 0 1 IDE ビット

0 0 1 1 1 ID.17-ID.13

0 1 1 1 1 ID.12-ID.5

0 1 1 1 0 ID.4-ID.0

0 1 1 0 0 RTR ビット

0 1 1 0 1 Reserved

0 1 0 0 1 Reserved

0 1 0 1 1 Data Length Code

0 1 0 1 0 Data area

0 1 0 0 0 CRC

1 1 0 0 0 CRC 定義符号

1 1 0 0 1 ACK

1 1 0 1 1 ACK 定義符号

1 1 0 1 0 フレームの終了

1 0 0 1 0 中止

1 0 0 0 1 Active エラー・フラッグ

1 0 1 1 0 Passive エラー・フラッグ

1 0 0 1 1 Control ビット・エラー

1 0 1 1 1 エラー定義符号

Page 18: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 18

1 1 1 0 0 Overflow フラッグ

PErrInfo->Passive_ErrData[1]は受信エラー・カウンター;

PErrInfo->Passive_ErrData[2]は送信エラー・カウンター;

(PErrInfo->ErrCode&0x0008)==0x0008 なら、CAN デバイスは LOSE エラーがあります。

PErrInfo->ArLost_ErrData のビット表示 Bit4 Bit3 Bit2 Bit1 Bit0 十進の値 説明

0 0 0 0 0 0 LOSE は ID の bit1 にあります

0 0 0 0 1 1 LOSE は ID の bit2 にあります

0 0 0 1 0 2 LOSE は ID の bit3 にあります

0 0 0 1 1 3 LOSE は ID の bit4 にあります

0 0 1 0 0 4 LOSE は ID の bit5 にあります

0 0 1 0 1 5 LOSE は ID の bit6 にあります

0 0 1 1 0 6 LOSE は ID の bit7 にあります

0 0 1 1 1 7 LOSE は ID の bit8 にあります

0 1 0 0 0 8 LOSE は ID の bit9 にあります

0 1 0 0 1 9 LOSE は ID の bit10 にあります

0 1 0 1 0 10 LOSE は ID の bit11 にあります

0 1 0 1 1 11 LOSE は ID の SRTR にあります

0 1 1 0 0 12 LOSE は ID の IDE にあります

0 1 1 0 1 13 LOSE は ID の bit12 にあります

0 1 1 1 0 14 LOSE は ID の bit13 にあります

0 1 1 1 1 15 LOSE は ID の bit14 にあります

1 0 0 0 0 16 LOSE は ID の bit15 にあります

1 0 0 0 1 17 LOSE は ID の bit16 にあります

1 0 0 1 0 18 LOSE は ID の bit17 にあります

1 0 0 1 1 19 LOSE は ID の bit18 にあります

1 0 1 0 0 20 LOSE は ID の bit19 にあります

1 0 1 0 1 21 LOSE は ID の bit20 にあります

1 0 1 1 0 22 LOSE は ID の bit21 にあります

1 0 1 1 1 23 LOSE は ID の bit22 にあります

1 1 0 0 0 24 LOSE は ID の bit23 にあります

1 1 0 0 1 25 LOSE は ID の bit24 にあります

1 1 0 1 0 26 LOSE は ID の bit25 にあります

Page 19: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 19

1 1 0 1 1 27 LOSE は ID の bit26 にあります

1 1 1 0 0 28 LOSE は ID の bit27 にあります

1 1 1 0 1 29 LOSE は ID の bit28 にあります

1 1 1 1 0 30 LOSE は ID の bit29 にあります

1 1 1 1 1 31 LOSE は ID の ERTR にあります

CAN のステータスを読む

DWORD __stdcall VCI_ReadCanStatus(DWORD DevType, DWORD DevIndex, DWORD

CANIndex, PVCI_CAN_STATUS pCANStatus);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

pCANStatus:

ステータスの構造体

戻り値:

0: エラー

1: 成功

3.4.6 パラメータを読む DWORD __stdcall VCI_GetReference(DWORD DevType,DWORD DevIndex,DWORD

CANIndex,DWORD RefType,PVOID pData);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

RefType:

パラメータのタイプ

Page 20: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 20

pData:

パラメータの構造体

戻り値:

0: エラー

1: 成功

RefType pData 説明

1 長さが 1 バイト、入力は

CAN デバイスの内部レジ

スターのアドレス;

出力は CAN デバイスの内

部レジスターの値。

CAN デバイスの内部レジスターの値を読む。

例:

BYTE val[16];

val[0] = 1;

VCI_GetReference(VCI_USBCAN1,0,0,1,(PVOID)val);

成功すれば、val[0]には戻るレジスターの値です。

RefType = 2 の場合は、pData の戻り値:

pData[0]は Reserved;

pData[1]は CAN デバイスの BTR0 あの値;

pData[2]は CAN デバイスの BTR1 の値;

pData[3]はフィルタのモード

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

MFORMATB AMODEBMFORMATB = 1: 拡張フレームを受信、標準フレームを捨て;

=0: 標準フレーム受信、拡張フレームを捨て。

AMODEB = 1: シングル・フィルタ =0: ダブル・フィルタ

pData[4]はフィルタの enable

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

BF2EN BF1EN

BF2EN = 1: フィルタ 2 をイネーブル、対応のマスク・レジスターが書き込めません;

=0: フィルタ 2 を disable する、対応のマスク・レジスターが書き込めます。

BF1EN = 1: フィルタ 1 をイネーブル、対応のマスク・レジスターが書き込めません;

=0: フィルタ 1 を disable する、対応のマスク・レジスターが書き込めます。

※ シングル・フィルタの場合は、BF1EN だけ使えます。

pData[5]はフィルタの優先順位

Page 21: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 21

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

BF2PRIO BF1PRIO

BF2PRIO = 1: フィルタ 2 が優先、受信情報はフィルタ 2 を通過すると、すぐ受信割り込み

が出てきます;

=0: フィルタ 2 が優先なし、受信 FIFO は級数を超えた後、受信割り込みが出てき

ます。

BF1PRIO = 1: フィルタ 1 が優先、受信情報はフィルタ 1 を通過すると、すぐ受信割り込み

が出てきます;

=0: フィルタ 1 が優先なし、受信 FIFO は級数を超えた後、受信割り込みが出てき

ます。

pData[6-9]はフィルタの ACR0-3 値。

pData[10-13]はフィルタの AMR0-3 値。

3.4.7 パラメータを設定する DWORD __stdcall VCI_SetReference(DWORD DevType,DWORD DevIndex,DWORD

CANIndex,DWORD RefType,PVOID pData);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

pData:

パラメータの構造体

戻り値:

0: エラー

1: 成功

RefType pData 説明

1 長さが 2 バイト、pData[0]

は CAN デバイスの内部レ

ジスターのアドレス、

CAN デバイスの内部レジスターを書き込む。

Page 22: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 22

pData[1]は書き込み値。

RefType=2 の場合は、次は pData の説明:

pData[0]は設定したいフィルタの番号

= 1: フィルタ 1;

= 2: フィルタ 2;

= 3: フィルタ 3;

= 4: フィルタ 4;

pData[1]はフィルタのモードを設定する

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

MFORMATB AMODEBMFORMATB = 1: 拡張フレームを受信、標準フレームを捨て;

=0: 標準フレーム受信、拡張フレームを捨て。

AMODEB = 1: シングル・フィルタ =0: ダブル・フィルタ

pData[2]はフィルタを enable する

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

BF2EN BF1EN

BF2EN = 1: フィルタ 2 をイネーブル、対応のマスク・レジスターが書き込めません;

=0: フィルタ 2 を disable する、対応のマスク・レジスターが書き込めます。

BF1EN = 1: フィルタ 1 をイネーブル、対応のマスク・レジスターが書き込めません;

=0: フィルタ 1 を disable する、対応のマスク・レジスターが書き込めます。

※ シングル・フィルタの場合は、BF1EN だけ使えます。

pData[3]はフィルタの優先順位を設定する

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

BF2PRIO BF1PRIO

BF2PRIO = 1: フィルタ 2 が優先、受信情報はフィルタ 2 を通過すると、すぐ受信割り込み

が出てきます;

=0: フィルタ 2 が優先なし、受信 FIFO は級数を超えた後、受信割り込みが出てき

ます。

BF1PRIO = 1: フィルタ 1 が優先、受信情報はフィルタ 1 を通過すると、すぐ受信割り込み

が出てきます;

=0: フィルタ 1 が優先なし、受信 FIFO は級数を超えた後、受信割り込みが出てき

Page 23: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 23

ます。

pData[4-7]はフィルタの ACR0-3 を設定する。

pData[8-11]はフィルタの AMR0-3 を設定する。

3.4.8 読まない受信したフレーム数を獲得 ULONG __stdcall VCI_GetReceiveNum(DWORD DevType,DWORD DevIndex,DWORD

CANIndex);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

戻り値:

読まない受信したフレーム数

バッファーをクリアする

DWORD __stdcall VCI_ClearBuffer(DWORD DevType,DWORD DevIndex,DWORD CANIndex);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

戻り値:

0: エラー

1: 成功

3.4.9 CAN チャネルをスタートする DWORD VCI_StartCAN(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);

入力:

Page 24: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 24

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

戻り値:

0: エラー

1: 成功

3.4.10 CAN チャネルをリセットする DWORD __stdcall VCI_ResetCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

戻り値:

0: エラー

1: 成功

3.4.11 CAN フレームを送信する ULONG __stdcall VCI_Transmit(DWORD DevType, DWORD DevIndex, DWORD CANIndex,

PVCI_CAN_OBJ pSend, ULONG Len);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

Page 25: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 25

pSend:

CAN フレーム

Len:

CAN フレームの数

戻り値:

実際送信した CAN フレーム数

3.4.12 受信した CAN フレームを読む ULONG __stdcall VCI_Receive(DWORD DevType, DWORD DevIndex, DWORD CANIndex,

PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1);

入力:

DevType:

デバイスのタイプ:USBCAN1 または USBCAN2

DevIndex:

デバイスの番号:1 台 USBCAN を接続すれば 0;2 台があれば 0 または 1。

CANIndex:

デバイスの CAN チャネルの番号。

pReceive:

CAN フレーム

Len:

CAN フレームの数

WaitTime:

待ち時間(ms)

戻り値:

実際受信した CAN フレーム数。0xFFFFFFFF なら、エラーがあります。

VCI_ReadErrInfo 関数でエラー情報を読んでください。

4. Linux 環境のソースコードをコンパイルする

Linux 環境用のソースコードは usbcan-i-2.6-20131127.tar.gz です。USB ドライバ、ライ

ブラリ、サンプルなどを含む。

Page 26: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 26

弊社の ARM/Linux シリーズボードで使えます。コンパイル例は弊社の ARM/Linux シリーズ

ボードの開発環境で行います。

まず、ソースコードを解凍する。

# tar zxvf usbcan-i-2.6-20131127.tar.gz 生成されたディレクトリに入ります。 # cd usbcan-i-2.6 サブディレクトリをリストします

# ls controlcan dll driver test controlcan はライブラリです; dll はカーネルライブラリです; driver は USB ドライバです; test はテスト用のサンプルです。 4.1 USB ドライバをコンパイルする まず USB ドライバのソースコードを ARM/Linux カーネルソースにコピーする。 # cp driver/usbcan.c /path/to/arm/linux カーネル/drivers/usb/class /path/to/arm/linux カーネル/drivers/usb/class の Kconfig ファイルを編集して、次の内

容を添加する。 config USB_CAN tristate "USB CAN support" depends on USB help Say Y here if you want to connect a USB device that follows the USB.org specification for USB CAN devices to your computer's USB port. To compile this driver as a module, choose M here: the module will be called usbcan. /path/to/arm/linux カーネル/drivers/usb/class の Makefile ファイルを編集して、次の

行を添加する。

Page 27: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 27

obj-$(CONFIG_USB_CAN) += usbcan.o ARM/Linux カーネルのソースに入って、再配置する。 # make menuconfig Device Drivers --->USB support --->

アイテム「USB CAN support」の前に、「M」を入れます。Exit して保存する。 カーネルのコンパイル # make zImage USB ドライバをコンパイル」する # make modules 完成すると、 /path/to/arm/linux カーネル /drivers/usb/class では USB ドライバ

usbcan.ko が生成されました。 4.2 カーネル・ライブラリをコンパイルする カーネル・ライブラリのソースコードに入ります。 # cd usbcan-i-2.6/dll

Page 28: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 28

コンパイルする # make カーネル・ライブラリを生成します。 libusbcan.so.1.01 libusbcan.so.1 libusbcan.so 4.3 ライブラリをコンパイルする ライブラリのソースコードに入ります。 # cd usbcan-i-2.6/controlcan コンパイルする # make ライブラリを生成します。 libcontrolcan.so.1.01.0 libcontrolcan.so.1.01 libcontrolcan.so.1 libcontrolcan.so 4.4 テスト用のサンプルをコンパイルする テスト用のソースコードに入ります。 # cd usbcan-i-2.6/test コンパイルする # make 実行ファイルを生成します。 testusbcan 4.5 ARM/Linux ボードに実装 生成されたライブラリ libcontrolcan.so.1.01.0

Page 29: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 29

libcontrolcan.so.1.01 libcontrolcan.so.1 libcontrolcan.so をボードの/lib/にコピーする。 生成されたカーネル・ライブラリ libusbcan.so.1.01 libusbcan.so.1 libusbcan.so をボードの/lib/kerneldlls にコピーする。 ボードの/lib/kerneldlls では kerneldll.ini ファイルを作ります。kerneldll.ini ファイルは

テキストファイルです。中身は: [KERNELDLL] COUNT=18 1=PCI5121.dll 2=PCI9810B.dll 3=USBCAN.dll 4=USBCAN.dll 5=PCI9820B.dll 6=CAN232.dll 7=PCI5121.dll 8=CANLite.dll 9=ISA9620B.dll 10=ISA5420.dll 11=PC104CAN.dll 12=CANETE.dll 13=DNP9810B.dll 14=PCI9840B.dll 15=PC104C2.dll 16=PCI9820I.dll 17=CANET_TCP.dll 18=pec9920.dll USB ドライバ(usbcan.ko)とテスト用のサンプル(testusbcan)はボードの適用なディレク

Page 30: USBCAN-I 絶縁変換器(Linux も使えるkanebebe.dip.jp/download/USB-CAN-I/usbcanI-manualjp.pdf株式会社日新テクニカ ホームページ: メール:info@nission-tech.com

株式会社日新テクニカ

ホームページ:http://www.nissin-tech.com メール:[email protected] 30

トリにコピーする。 ボードのコンソールで次のコマンド: まず、USB ドライバをロードする # insmod usbcan.ko USBCAN (minor200) connected usbcore: registered new interface driver usbcan USBCAN-II driver loaded USB CAN I 変換器を ARM/Linux ボードの USB ポートに挿入すると、次の情報が出てき

ます。 usb 1-1: New USB device found, idVendor=0471, idProduct=1200 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 1-1: Product: iTEK USBCAN usb 1-1: Manufacturer: iTEK INC. usb 1-1: configuration #1 chosen from 1 choice USBCAN (minor200) connected テスト用のサンプルを実行させます。 # ./testusbcan