usbcan-i 絶縁変換器(linux...
TRANSCRIPT
株式会社日新テクニカ
ホームページ:http://www.nissin-tech.com メール:[email protected] 1
USBCAN-I 絶縁変換器(Linux も使える)
株式会社日新テクニカ
http://www.nissin-tech.com
2013/11/27
copyright@2013
株式会社日新テクニカ
ホームページ:http://www.nissin-tech.com メール:[email protected] 2
修正履歴
修正日 修正内容
2013/11/27 初作成
関連のソフトとサンプルはこちらです。
http://kanebebe.dip.jp/download/USB-CAN-I
株式会社日新テクニカ
ホームページ: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
株式会社日新テクニカ
ホームページ:http://www.nissin-tech.com メール:[email protected] 4
※ 使用されたソースコードはhttp://www.nissin-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 シリーズボードと一緒に動く風景
株式会社日新テクニカ
ホームページ: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 のバージョン
株式会社日新テクニカ
ホームページ: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 を添加します。
株式会社日新テクニカ
ホームページ: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];
株式会社日新テクニカ
ホームページ: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;
株式会社日新テクニカ
ホームページ: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);
入力:
株式会社日新テクニカ
ホームページ: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: 成功
フィルターモードはシングル、受信は標準フレームの場合は
株式会社日新テクニカ
ホームページ:http://www.nissin-tech.com メール:[email protected] 13
ACR0/1/2/3 と AMR0/1/2/3 は CAN コントローラーSJA1000 のレジスターです。
フィルターモードはシングル、受信は拡張フレームの場合は
株式会社日新テクニカ
ホームページ: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:
株式会社日新テクニカ
ホームページ: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 エラー
株式会社日新テクニカ
ホームページ: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 エラー定義符号
株式会社日新テクニカ
ホームページ: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 にあります
株式会社日新テクニカ
ホームページ: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:
パラメータのタイプ
株式会社日新テクニカ
ホームページ: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]はフィルタの優先順位
株式会社日新テクニカ
ホームページ: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 デバイスの内部レジスターを書き込む。
株式会社日新テクニカ
ホームページ: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 は級数を超えた後、受信割り込みが出てき
株式会社日新テクニカ
ホームページ: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);
入力:
株式会社日新テクニカ
ホームページ: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 チャネルの番号。
株式会社日新テクニカ
ホームページ: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 ドライバ、ライ
ブラリ、サンプルなどを含む。
株式会社日新テクニカ
ホームページ: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 ファイルを編集して、次の
行を添加する。
株式会社日新テクニカ
ホームページ: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
株式会社日新テクニカ
ホームページ: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
株式会社日新テクニカ
ホームページ: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)はボードの適用なディレク
株式会社日新テクニカ
ホームページ: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