您的位置:首页 > 运维架构 > Linux

SYSTECH USB-CAN总线分析仪Linux驱动安装篇(树莓派)

2017-06-02 11:22 826 查看
入手了一个德国SYSTECH的USB-CAN分析仪,鉴于没有Linux下的详细安装步骤,这里写一篇文章介绍下在树莓派上的安装步骤。

1. 购买SYSTECH的USB-CAN硬件。

可以在taobao上搜下,我就不列了。

原厂的介绍见:http://www.systec-electronic.com/en/products/industrial-communication/interfaces-and-gateways/can-usb-adapter-usb-canmodul1

硬件图片如下:



2. USB连接

将设备插入树莓派的USB口,

> lsusb

...

Bus 001 Device 005: ID 0878:1101 # <-- 看到多了一个设备

...

> lsusb -v # <-- 设备详细信息,估计采购买的是盗版,啥信息都没有。

Bus 001 Device 005: ID 0878:1101

Couldn't open device, some information will be missing

Device Descriptor:

  bLength                18

  bDescriptorType         1

  bcdUSB               1.10

  bDeviceClass          255 Vendor Specific Class

  bDeviceSubClass       255 Vendor Specific Subclass

  bDeviceProtocol       255 Vendor Specific Protocol

  bMaxPacketSize0        64

  idVendor           0x0878

  idProduct          0x1101

  bcdDevice            3.05

  iManufacturer           1

  iProduct                2

  iSerial                 3

  bNumConfigurations      1

3. 编译驱动。

这里以驱动包里的readme.txt为索引,列出安装驱动的主要步骤及注意事项。

驱动包官网下载地址:SYSTEC Linux驱动

第1步:升级你的树莓派到最新(建议)

* Linux Kernel version >= 2.6.32 

$ sudo apt-get update
$ sudo apt-get install rpi-update

第2步:安装编译时需要的kernel文件

$ sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source && sudo chmod +x /usr/bin/rpi-source && /usr/bin/rpi-source -q --tag-update

第3步:检查kernel里CAN相关的配置是否打开(默认已打开)

* Following kernel options have to be set: 

CONFIG_CAN=m

CONFIG_CAN_RAW=m

CONFIG_CAN_BCM=m

CONFIG_CAN_DEV=m

CONFIG_CAN_CALC_BITTIMING=y

这里默认已经打开,不放心可以确认下:

$ cd /lib/modules/4.9.30+/build/

$ make menuconfig <-- 从菜单里选择Save导出配置项到文件.config里

$ less .config | grep CONFIG_CAN

第4步:编译Linux驱动

$ cd systec_can

$ make

Load the driver from the local source directory

------------------------------------------------

1. Load basic CAN drivers

$ sudo modprobe can_raw

$ sudo modprobe can_dev

2. Install firmware

$ sudo make firmware_install

3. Load USB-CANmodul driver

$ sudo insmod systec_can.ko

5. 启动can网络。

$ sudo ip link set can0 type can bitrate 125000

$ ip link set can0 up

6. 开始can开发。

首先监测can总线上的数据:

用下面这个工具:

$ git clone git://github.com/linux-can/can-utils/

$ cd can-utils

$ make

$ ./candump can0

然后开始开发,如果你用的是python,推荐一个python-can,地址:https://github.com/hardbyte/python-can,可以使用examples/send_one.py来测试,同时观察candump窗口。我这里扩展了下测试代码,发完一帧后开始接收,供参考(有问题可加QQ群204148284一起讨论):

'''
Test CAN bus.

Notes: Before test, start CAN network first by:
ip link set can0 type can bitrate 125000
ifconfig can0 up
ip -details -statistics link show can0
'''
from __future__ import print_function
import can

def send_one():
bus = can.interface.Bus('can0', bustype='socketcan_ctypes')
msg = can.Message(arbitration_id=0xc0ffee,
data=[0, 25, 0, 1, 3, 1, 4],
extended_id=True)
print("payload len:{}".format(msg.dlc))
try:
bus.send(msg)
print("Message sent on {}".format(bus.channel_info))
except can.CanError:
print("Message NOT sent")

def recv_line(sec=2):
bus = can.interface.Bus('can0', bustype='socketcan_ctypes')
pkt = bytearray()
while True:
msg = bus.recv(sec)
if msg != None:
pkt.extend(msg.data)
print('received:{} type:{}'.format(msg, type(msg)))
else:
break

print('rcv data:{}'.format([str(hex(x)) for x in pkt]))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux驱动 usb can