CAN шина
Обзор
Шина CAN соответствует стандарту ISO и изначально была разработана для транспортных средств. Она управляет системой управления шасси и отвечает за такие критически важные функции, как электрооборудование двигателя и противоскольжение. Эта система также используется для предоставления диагностической информации для технического обслуживания автомобиля. Для этой шины типична конфигурация «многозвезда»: основная линия шины разветвляется на дополнительные линии шины на своих концах, а затем подключается к нескольким узлам устройств. Дифференциальное напряжение подаётся по витой паре напряжением от 1,5 до 2,5 В и от 2,5 до 3,5 В для обеспечения помехоустойчивости сигнала. Скорость передачи данных до 1 Мбит/с возможна при длине сети менее 40 м. Уменьшение скорости передачи данных позволяет увеличить дальность передачи данных (например, 500 м при 125 кбит/с). ( Источник : Джеремайя Дж. Флерчингер ) Контроллеры, поддерживающие CAN FD, улучшенную версию CAN с кадрами до 64 байт и скоростью передачи данных до 4 Мбит/с, будут доступны во второй половине 2014 года. Версия can4linux, поддерживающая CAN FD на IFI CAN, готова к использованию.
Хотя CAN-сеть была разработана как автомобильная коммуникационная сеть, она используется во многих других областях: в промышленности, медицине, морских лабораториях и т.д. Чаще всего она используется совместно с протоколом более высокого уровня, основанным на CAN, например, CANopen .
Дополнительную информацию можно найти по адресу:
- http://en.wikipedia.org/wiki/CAN_bus
- CiA CAN in Automation ассоциации пользователей CAN автоматизации
- CAN Wiki
- https://elinux.org/CAN_Bus
Поддержка CAN в Linux
CAN поддерживается драйверами устройств Linux. Существует два основных типа: драйверы на основе символьных устройств и драйверы на основе сетевых сокетов. Ядро Linux поддерживает CAN с помощью фреймворка SocketCAN.
- SocketCAN Documentation
- mailing list for Linux Kernel CAN development
- linux-can git repository
- linux-can-next git repository
Одним из символьных драйверов является can4linux.
- can4linux documentation
- GitLab project page (Old: SourceForge project page)
- German Wikipedia article
- English Wikipedia article
Поддерживаемые протоколы SocketCAN
- RAW: отправка и получение необработанных CAN-кадров
- BCM: диспетчер вещания, перекладывающий повторяющуюся работу на ядро Linux
- ИЗОТР ...
- SAE J1939
Контроллеры, поддерживаемые SocketCAN
- Микрочип MCP251x
- SoC Atmel AT91
- Карты ESD 331 CAN
- NXP (Philips) SJA1000
- SoC Freescale MPC52xx
- Бош CC770
- Intel AN82527
- TIs SoCs
- Последовательные/сетевые устройства, использующие протокол ASCII (драйвер slcan)
| Vendor | Device Name | Driver Module Name | Controller | Kconfig Option | Linux Mainline | Remarks |
|---|---|---|---|---|---|---|
| VScom | NetCAN Plus 110 | slcan | (unknown) | CONFIG_CAN_SLCAN | 2.6.38 | needs slcand and socat |
| VScom | USB-CAN Plus | slcan | SJA1000T | CONFIG_CAN_SLCAN | 2.6.38 | needs slcand |
| LAWICEL | CAN232 | slcan | (unknown) | CONFIG_CAN_SLCAN | 2.6.38 | needs slcand |
| LAWICEL | CANUSB | slcan | (unknown) | CONFIG_CAN_SLCAN | 2.6.38 | needs slcand |
| TITAN | USB-CAN | slcan | (unknown) | CONFIG_CAN_SLCAN | 2.6.38 | needs slcand |
| PEAK | PCAN-PCI | peak_pci | sja1000 | CONFIG_CAN_PEAK_PCI | 3.2 | supports all PCAN-[mini]PCI[e][104] variants |
| PEAK | PCAN-USB | peak_usb | (unknown) | CONFIG_CAN_PEAK_USB | 3.4 | supports PCAN-USB[pro][hub] (no LIN support) |
| Kvaser | PCIcanx | kvaser_pci | sja1000 | CONFIG_CAN_KVASER_PCI | 2.6.31 | supports all PCI-[mini]PCI[e][104] variants |
| Kvaser | PCIe products | kvaser_pciefd | Kvaser kcan | CAN_KVASER_PCIEFD | 5.4 6.6 6.9 |
PCIEcan 4xHS PCIEcan 2xHS v2 PCIEcan HS v2 Mini PCI Express HS v2 Mini PCI Express 2xHS v2 PCIEcan 1xCAN v3 PCIEcan 2xCAN v3 PCIEcan 4xCAN v2 Mini PCI Express 1xCAN v3 Mini PCI Express 2xCAN v3 M.2 PCIe 4xCAN PCIe 8xCAN |
| Kvaser | USB products | kvaser_usb | (unknown) | CONFIG_CAN_KVASER_USB | 3.8 3.16 4.0 4.7 4.19 5.11 5.12 5.14 6.9 6.11 |
Leaf Light |
| EMS Wünsche | CPC-Card | ems_pcmcia | sja1000 | CONFIG_CAN_EMS_PCMCIA | 3.2 | discontinued |
| EMS Wünsche | CPC-USB/ARM7 | ems_usb | (unknown) | CONFIG_CAN_EMS_USB | 3.2 | |
| EMS Wünsche | CPC-PCI/PCIe | ems_pci | sja1000 | CONFIG_CAN_EMS_PCI | 3.2 | up to four channel |
| EMS Wünsche | CPC-PC104P | ems_pci | sja1000 | CONFIG_CAN_EMS_PCI | 3.2 | up to four channel on a PC104+ board |
| 8devices | USB2CAN | usb_8dev | (STR750FV2) | CONFIG_CAN_8DEV_USB | 3.9 | STR750FV2 Firmware |
| Softing | CANcard2 | softing_cs | sja1000 or NEC-005(?) | CONFIG_CAN_SOFTING_CS | 2.6.38 | Supports {CAN,EDIC}card{,SJA,2} PCMCIA cards
Needs firmware softing-fw-4.6-binaries.tar.gz |
| Microchip | CAN BUS Analyzer Tool | mcba_usb | PIC18F2680 | CONFIG_CAN_MCBA_USB | 4.12 | SocketCAN driver |
| FEE CTU | CTU CAN FD Core | ctucanfd | CTU CAN FD Core | CONFIG_CTUCANFD | 5.19 | Open Source VHDL CAN FD IP Core - tested on |
| Linux Automation GmbH et al. |
candleLight | gs_usb | STM32F07 | CONFIG_CAN_GS_USB | 3.16 | Open Hardware project by Hubert Denkmair (LXA variant), with open source firmware |
| CANhack RKS+CAN | RKS+CAN | slcan | sja1000 compatible | CONFIG_CAN_SLCAN | all | needs slcand https://github.com/kaufmannr/dieselschrauber-can-rks-wrapper-for-csharp |
Поддержка SocketCAN в языках/средах программирования
- Android
- Java
- Python
- Python library for CAN
- Matlab/Simulink blocks to send and receive CAN messages
- TTCN
can4linux Supported Controllers
- Allwinner A20 with integrated CAN (on the popular BananaPi single-board computer, BananaPi-Pro, Banana-Mberry, Olimex Olinux-A20)
- Analog Devices BlackFin BF537
- Atmel AT91 SoCs
- Freescale FlexCAN (ColdFire 5282, i.MX25, i.MX28, i.MX35)
- Intel 82527 (the replacement Bosch CC770 should work)
- Microchip Stand Alone CAN MCP2515
- NXP Stand Alone CAN SJA1000 (on different ISA or PCI/PCIe boards)
- Xilinx Zynq with XCAN
- 'virtual' CAN mode without CAN hardware
- 'virtual' CAN mode supporting CAN FD
- IFI CAN FPGA IP, in classic CAN mode and CAN FD mode
- KVASER PCICan-4HS with up to four classic CAN mode and CAN FD mode
can4linux Support in Programming Languages/Environments
- C - many examples and useful applications are provided with the package, check can4linux-examples/
- Tcl/Tk also in can4linux-examples/
- Python also in can4linux-examples/
CAN Controllers Emulation
- SJA1000 CAN controller based PCI board emulation for QEMU
- Cards models provided:
- Kvaser PCIcan-S single I/O mapped SJA1000 model compatible with kvaser_pci Linux driver on guest side
- Advantech PCM-3680i PCI CAN (dual SJA1000 channel)
- MIOe-3680 PCI CAN (dual SJA1000 channel)
- The emulated CAN buses can be connected to virtual or physical SocketCAN interface if Linux is used as host system
- The work has been integrated into QEMU mainline and will be included in QEMU 3.0 release
- Documentation of CAN Bus emulation is included in the QEMU manual CAN Bus Emulation Support chapter
- Original project repository: https://gitlab.fel.cvut.cz/canbus/qemu-canbus branch can-pci
- Work started by 2013 GSoC project when RTEMS project donated its slot to work on QEMU CAN support - see RTEMS related page for more info and use instructions
- RTLWS 17 article introducing QEMU CAN emulation
- LinuxDays 2017 presentation GNU/Linux, CAN and CANopen in Real-time Control Applications includes description how to emulate PCI GPIO cards and PCI CAN interface in QEMU system and interconnect that all through COMEDI and OrtCAN compoanents to implement complete virtual CANopen node
- Cards models provided:
- CTU CAN FD core emulation and CAN FD host SoketCAN support
- Development version ctu-canfd of https://gitlab.fel.cvut.cz/canbus/qemu-canbus repository
- Accepted in QEMU mainline
- CTU CAN FD Driver Documentation
SocketCAN Bechmarking
- Daily Mainline and Preempt-RT Kernel CAN (FD) Latency Results
- CTU CAN Bus Latency Tester Tools Project
- Old stalled projects CAN gateway timing analysis and repository with old benchmark infrastructure
SocketCAN Tutorials
CAN tools
- CANdevStudio is a Qt based tool that aims to provide easy to use and comprehensive CAN bus simulation environment. Supports variety of different CAN controllers. Works on Linux, Windows and macOS.