USB-CAN总线接口
适配器接口函数
图书馆使用说明
第一部分结束VIEW
如果用户只是使用USB-CAN总线接口适配器进行CAN总线通信测试,则可以直接使用随机提供的USB-CAN Tool软件进行测试数据的收发。
如果用户打算为自己的产品编写软件程序。 请仔细阅读以下说明并参考amp我们提供的代码:
⑴ C++Builder ⑵C# ⑶VC ⑷VB ⑷VB.NET ⑩Delphi ⑺LabVIEW ⑻ LabWindows/CVI ⑼Matlab ⑽QT ⑾Python/Python-可以。
开发库 file :ControlCAN.lib、ControlCAN.DLL
VC版函数声明 file :控制CAN.h
VB版函数声明 file: 控制CAN.bas
实验室VIEW 版本库函数包模块:ControlCAN.llb
Delphi版本函数声明 file: 控制CAN.pas
第二部分兼容函数库和数据结构
2.1. 类型定义
2.1.1.设备类型
类型定义 | 类型值 | 描述 |
DEV_USBCAN2 | 4 | USBCAN-2A/USBCAN-2C/CANalyst-II MiniPCIe-CAN |
2.1.2. VCI_BOARD_INFO
VCI_BOARD_INFO 结构包含 USB-CAN 系列接口卡设备信息。
该结构将填充在 VCI_ReadBoardInfo 函数中。
成员:
硬件版本
硬件版本号,十六进制表示法。 例如 0x0100 表示 V1.00。
fw_版本
硬件版本号,十六进制表示法。 例如 0x0100 表示 V1.00。
第 2 页
dr_版本
驱动版本号,十六进制。 例如 0x0100 表示 V1.00。
in_版本
接口库版本号,十六进制表示。 例如 0x0100 表示 V1.00。
中断号
系统预留。
可以数
表示 CAN 通道总数。
str_Serial_Num
此板卡的序列号。
str_hw_类型
硬件类型,例如“USBCAN V1.00”(注意:包括字符串终止符'\0')。
预订的
系统预留。
2.1.3. VCI_CAN_OBJ
在函数VCI_Transmit 和VCI_Receive 中,VCI_CAN_OBJ 结构用于发送CAN 消息帧。
成员:
ID
消息标识符。 直接ID格式,右对齐,请参考:附件一:ID对齐详解。
时间圣amp
接收圣amp 时间帧信息,CAN控制器初始化时开始计时,单位为0. 1ms。
时间标志
在是否使用时间st方面amp, 1 是有效的 TimeStamp. TimeFlag 和 TimeStamp 只有在接收到帧时才有意义。
发送类型
发送类型。 = 0 表示 Normal 类型, = 1 表示 Single Send。
远程标志
是否为远程标志。 = 1 表示远程标志, = 0 表示数据标志。
外部标志
是否为外部标志。 = 1 表示外部标志, = 0 表示标准标志。
数据线
Data length(<=8) ,即数据的长度。
数据
数据包。
预订的
系统预留。
2.1.4. VCI_INIT_CONFIG
VCI_INIT_CONFIG 结构定义了 CAN 的初始化配置。 该结构将填充在 VCI_InitCan 函数中。
成员:
密码
接收过滤后的接受代码。
掩码
接收过滤掩码。
预订的
预订的。
筛选
过滤方式,允许设置范围0-3,详见过滤方式表2.2.3节。
时序0
SJA1000 波特率参数,Timing0 (BTR0)。
时序1
SJA1000 波特率参数,Timing1 (BTR1)。
模式
操作模式,0 = 正常操作,1 = 只听模式,2 = 自发接纳和发送测试模式。
评论:
关于过滤器的设置请参考:附件二:CAN参数设置说明。
CAN Timing0和Timing1用于设置波特率,这两个参数只在初始化时使用tage.
常规波特参考表:
CAN波特率 | 时序0(BTR0) | 时序1(BTR1) |
10k bps | 0x31 | 0x1C |
20k bps | 0x18 | 0x1C |
40k bps | 0x87 | 0xFF |
50k bps | 0x09 | 0x1C |
80k bps | 0x83 | 0xFF |
100k bps | 0x04 | 0x1C |
125k bps | 0x03 | 0x1C |
200k bps | 0x81 | 0xFA |
250k bps | 0x01 | 0x1C |
400k bps | 0x80 | 0xFA |
500k bps | 0x00 | 0x1C |
666k bps | 0x80 | 0xB6 |
800k bps | 0x00 | 0x16 |
1000k bps | 0x00 | 0x14 |
33.33 Kbps | 0x09 | 0x6F |
66.66 Kbps | 0x04 | 0x6F |
83.33 Kbps | 0x03 | 0x6F |
- 用户只需按照SJA1000(16MHz)设置波特率参数即可。
- 适配器暂时不支持低于 10K 的波特率。
五、功能说明
2.2.1. VCI_开放设备
该函数用于连接设备。
DWORD __stdcall VCI_OpenDevice(DWORD DevType、DWORD DevIndex、DWORD 保留);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
预订的
保留参数,填0。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
2.2.2. VCI_关闭设备
该函数用于关闭连接。
DWORD __stdcall VCI_CloseDevice(DWORD DevType,DWORD DevIndex);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
2.2.3. VCI_InitCan
该函数用于初始化指定的CAN。
DWORD __stdcall VCI_InitCAN(DWORD DevType, DWORD DevIndex, DWORD CANIndex,
PVCI_INIT_CONFIG pInitConfig);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN通道索引,比如当只有一个CAN通道时,索引号为0,如果有两个,则索引号可以为0或1。
p初始化配置
初始化参数结构。 成员参数列表:
成员 | 功能描述 |
pInitConfig->AccCode | AccCode 和 AccMask 可以一起工作来确定哪些数据包可以被接受。 这两个寄存器用于设置ID左对齐,即AccCode和AccMask的最高位(Bit31)与ID值的最高位对齐。 |
pInitConfig->AccMask | 关于ID对齐参考附件: 附件一: ID对齐细节。 例:如果设置AccCode的值为0x24600000(即0x123左移21位),AccMask的值 设置为0x00000000,则只接受CAN报文帧ID为0x123的数据包(AccMask值为0x00000000表示所有位相关 |
位)。 如果AccCode值设置为0x24600000,AccMask值设置为0x600000(0x03左移21位),则只接受CAN报文帧ID为0x120~0x123的数据包(AccMask值 0x600000 表示除了 bit0 ~ bit1 其他位(bit2 ~ bit10)都是相关位)。 笔记: 此过滤器设置 examp标准框架的文件,例如ample,高11位为有效位; 在扩展帧的情况下,则有效 ID 为 29 位。 AccCode 和 AccMask 设置高 29 位为有效位! |
|
pInitConfig->保留 | 预订的 |
pInitConfig->过滤器 | 过滤模式设置请参考过滤模式表部分。 |
pInitConfig->Timing0 | 波特率T0设置 |
pInitConfig->Timing1 | 波特率T1设置 |
pInitConfig->模式 | 操作模式: 0-正常运行 1-只听模式 2-自发收送测试模式(ZLG函数库中不包含该值) |
过滤模式表:
价值 | 姓名 | 描述 |
1 | 接收所有类型 | 适用于标准框架和加长框架! |
2 | 只接收标准帧 | 适用于标准框架,并扩展 |
frame会直接过滤掉! | ||
3 | 只接收扩展帧 | 适用于扩展框架,标准框架将被删除 直接过滤! 。 |
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
例如
2.2.4. VCI_ReadBoardInfo
该函数用于读取适配器硬件信息。 一般来说,可以忽略。
DWORD __stdcall VCI_ReadBoardInfo(DWORD DevType,DWORD
DevIndex,PVCI_BOARD_INFO pInfo);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始升序排列。 pInfo
VCI_BOARD_INFO 是用来存放设备信息的结构体指针。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
2.2.5。 VCI_GetReceiveNum
该函数用于指定接收到但还没有被读取的帧在指定的接收缓冲区中。
DWORD __stdcall VCI_GetReceiveNum(DWORD DevType、DWORD DevIndex、DWORD CANIndex);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN 通道索引。
返回:
返回尚未读取的帧。
例如
#include “ControlCan.h” int ret=VCI_GetReceiveNum(2,0,0);
2.2.6. VCI_清除缓冲区
该函数用于清除指定通道的接收和发送缓冲区
USB-CAN 适配器。
DWORD __stdcall VCI_ClearBuffer(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN 通道索引。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
2.2.7. VCI_StartCAN
该函数用于启动CAN控制器和适配器内部中断接收功能。
DWORD __stdcall VCI_StartCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN 通道索引。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
2.2.8. VCI_复位CAN
该函数用于复位 CAN 控制器。
DWORD __stdcall VCI_ResetCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN 通道索引。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
2.2.9. VCI_传输
该函数用于发送 CAN 报文帧。
DWORD __stdcall VCI_Transmit(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pSend,DWORD 长度);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN 通道索引。 发送
必须发送的数据帧数组的首地址。
长度
需要发送的数据帧数,最大1000,高速下推荐48。
返回:
返回实际已经发送的帧数,返回值=-1表示设备错误。
例如
2.2.10。 VCI_接收
该函数用于请求接收。
DWORD __stdcall VCI_Receive(DWORD DevType,DWORD DevIndex,DWORD CANIndex,PVCI_CAN_OBJ pReceive,ULONG Len,INT WaitTime);
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
CAN索引
CAN 通道索引。
接收
接收数据帧的第一个设置指针。
伦
数据帧的数组长度必须大于2500才能返回正常消息。
否则,无论是否收到消息,返回长度都将为零。 适配器为每个通道设置一个 2000 帧的缓冲区。 用户可以根据自己的系统和工作环境,从2500中选择合适的数组长度。
等待时间保留。
返回:
返回实际读取的帧数,-1表示设备错误。
例如
第三部分其他函数及数据结构说明
本章介绍USB-CAN适配器接口库ControlCAN.dll中包含的不兼容ZLG接口库的其他数据类型和函数。 请做
如果使用兼容的ZLG模型进行二次开发,不要调用这些函数,以免影响兼容性。
3.1 功能说明
3.1.1. VCI_UsbDeviceReset
重置USB-CAN适配器,重置后需要使用VCI_OpenDevice重新打开设备。
DWORD __stdcall VCI_UsbDeviceReset(DWORD DevType,DWORD DevIndex,DWORD 保留
参数:
开发类型
设备类型。 请参阅:适配器设备类型定义。
开发指数
设备索引,例如ample,当只有一个USB-CAN适配器时,索引号为0,当有多个USB-CAN适配器时,索引号从0开始按升序排列。
保留 保留。
返回:
返回值=1,表示操作成功; = 0表示操作失败; = -1 表示设备不存在。
bRel = VCI_UsbDeviceReset(nDeviceType, 独立性, 0);
3.1.2. VCI_查找UsbDevice2
当同一台 PC 使用多个 USB-CAN 时,用户可以使用此功能查找当前设备。
DWORD __stdcall VCI_FindUsbDevice2(PVCI_BOARD_INFO pInfo);
参数:
信息
pInfo用于存放参数的第一个数据缓冲区地址指针。
返回
返回插入计算机的 USB-CAN 适配器的编号。
第四部分接口库函数使用流程
为了增加设备功能,我们提供了额外的功能(以绿色背景呈现的功能),这些功能包括:VCI_FindUsbDevice2 VCI_UsbDeviceReset。 二次开发时,这些函数不一定要调用。 即使忽略这些功能,也可以实现USB-CAN适配器的所有功能。
www.waveshare.com
www.waveshare.com/wiki
文件/资源
![]() |
WAVESHARE USB-CAN总线接口适配器接口函数库 [pdf] 使用说明书 USB-CAN Bus Inter face Adapter接口函数库,USB-CAN,Bus Inter face Adapter接口函数库,接口函数库,函数库 |