We use cookies on our website to provide you with the best possible service and to further improve our website. By clicking the "Accept all" button, you agree to the use of all cookies. You can limit the cookies used by clicking on "Accept selection". Further information and an option to revoke your selection can be found in our privacy policy.


These cookies are necessary for basic functionality. This allows you to register on our website and forum or order products with our online shop.


With these cookies, we collect anonymized usage data for our website. For example, we can see which content is interesting for our visitors and which resolutions are used. We use the information to optimize our website to provide you with the best possible user experience.


show more

Linux PCAN Driver - Version History

2024-01-18 Driver Download Version 8.17.0

  • driver:
    • Makefile: redirect "which" stderr because newer versions are more verbose in case of errors
    • Makefile: use $(CC) instead of gcc when getting current compiler version
    • Makefile: also handle soft links when looking for kernel headers directory location
    • PCAN-USB Pro FD: add a warning msg when firmware version is older than 3.4.6 and hardware version is 4
    • CAN-FD: improve protection against message overflow in the kernel, in case of notification flooding from CAN-FD firmware
    • Fix usage of legacy names init_module()/cleanup_module()
    • Fix compilation issues with 6.4 and 6.5
    • Prevent kernel logs buffer flooding when timestamps difference is negative
  • netdev:
    • remove pcan_sync_*() functions calls which are useless in that mode
    • remove bus_load timer deletion to fix potential kernel crash when driver/device is removed
  • libpcanbasic:
    • include v4.8.0.5 (see also libpcanbasic/changelog.md)

Download Driver v8.17.0 (tar.gz) Download Manual (PDF)

2023-04-04 Driver Download Version 8.16.0

  • Added support of the new option PCANFD_OPT_SELF_ACK that requests the controller to acknowledge the frame it writes on the bus
  • Added support of the new option PCANFD_OPT_BRS_IGNORE that tells the controller to ignore incoming CAN FD frames with BRS flag set
  • Removed the deprecated REMAKE_INITRD parameter from the generated dkms.conf
  • Included PCAN-Basic for Linux v4.7.0.3 (see also libpcanbasic/changelog.md)

Download Driver v8.16.0 (tar.gz) Download Manual (PDF)

2022-10-04 Driver Download Version 8.15.2

  • Included PCAN-Basic for Linux v4.6.2.36 (see also libpcanbasic/changelog.md)

Download Driver v8.15.2 (tar.gz) Download Manual (PDF)

2022-07-25 Driver Download Version 8.15.1

  • Included PCAN-Basic for Linux v4.6.1.32 (see also libpcanbasic/changelog.md)
  • Fixed a compilation error when the driver is compiled against kernel 5.17
  • PCAN-Dongle: added missing fallthrough statements
  • PCAN-USB: Fixed full version number read for FW >= 2.1
    • Added support of new MCU for the new USB FD devices
    • Fixed endianess of PCAN-USB FD struct members
  • Added explicit error msg when lack of memory when allocating Rx/Tx fifos
  • PCAN-PCI Express FD: added 50 µs delay after bus=on command to be sure to receive STATUS[RB=1] next
  • Changed adapter name from "PCAN-PCIe FD" to "PCAN-PCI Express FD"
  • Added forgotten name of PCAN-miniPCIe FD in PCI/PCIe adapters database
  • PCAN-PCI Express [FD] flash memory access:
    • Fixed err when everything is ok
    • Increaseed SPI flash delay from 10 ms to 50 ms
  • PCAN-PCI Express [FD]: move usemsi/fdusemsi from unsigned int to unsigned char
  • Reworked the way rxqsize/txqsize parameters are verified
  • PCAN-Dongle: fixed typo in adapter name
  • UG: fixed some typos
  • Introduced 2 new parameters rxqprealloc/txqprealloc that enable to allocate once for all queues when module is loading rather than each time the device is opened
  • A documented pcan.conf is now installed in /etc/modprobe.d

Download Driver v8.15.1 (tar.gz) Download Manual (PDF)

2022-01-26 Driver Download Version 8.14.0

  • Included libpcanbasic v4.5.4.19 (see also libpcanbasic/changelog.md)
  • Included new tool pcanosdiag.sh which provides logs for faster and more accurate support
  • PCAN-USB fix: in some rare cases, the driver could discard to notify the user of the change from ACTIVE to PASSIVE state
  • ioctl(SET_INIT): reset Rx Fifo queue even in cases where the new bit timings do not change
  • Back to legacy handling of 1st STATUS msg. Previous behavior (=1st STATUS msg is not displayed when old API is used) is still possible by defining PCAN_RUN_AS_OLD_API_DID
  • lspcan: fixed GPL header
  • Added devices partnum: these are now visible from /sys/class/pcan/pcan*/adapter_partnum
  • PCIe-CAN FD fix: added (missing) support of PCAN-PC/104-Plus FD
  • CAN FD-USB fix: handle limit cases when records list exactly fills the 512 bytes rx buffer provided to the USB core
  • Introduced DKMS support (see documentation and "make install_with_dkms")
  • Extended usage of PCAN_EXTRA_PARAMS(TPEXTRAPARAMS) to allow old API users to get access to larger device data (like adapter name and part number) as well as newer 32-bit values (like the firmware version)
  • Fixed cases where PCANFD_OPT_FW_VERSION could return ff.ff.ff.00.
  • Module_decsription now indicates the variant of the current pcan.ko module among chardev, netdev, and RTDM variants (see modinfo)
  • PCAN-Chip USB: removed forgotten debug dump when reading I/O
  • PCAN-USB X6:
    • Fixed CAN index number in messages given to syslog
    • Fixed possible out of sequence order in USB interfaces enum when probing
  • PCAN-PCIe FD family: unconditionally do a RESET cmd before configuring the controller
  • pcanfdtst: added "-S --stop-on-bus v" option to request to stop when bus state reaches value >= v
  • receivetest: fixed "-n" usage
  • netdev:
    • Removed wrong IFF_ECHO bit from the netdev flags (the canX interfaces of the pcan driver don't support local echo)
    • Included last changes from socket-can, that is: don't count RTR packet bytes in ex statistics nor count ERR messages in stats either
  • RTDM: support of Xenomai 3.2 and 3.2.1
  • lib: fixed pcan_set_extra_params() parameters definition
  • lib/pcanfd_open(): better handle when ioctl(SET_INIT) must or must not be called next to open()

Download Driver v8.14.0 (tar.gz) Download Manual (PDF)

2021-09-29 Driver Download Version 8.13.0

  • Support of kernel 5.15.0-rc3
  • Added log msgs in kernel when controller errors occur
  • Increaseed rxqsize default value to 2k (due to heavy usage of echo bit by libpcanbasic)
  • Introduced txqhiwat new module parameter (chardev default=10000; netdev default=8000) which controls how the applications fill the Tx queue according to its filling rate (10000=full, 0=empty). This prevents from EAGAIN when sending several messages at once
  • Better define txqsize and rxqsize max values according to Kernel dynamic memory allocation capabilities
  • Improved/added ECHO management for CAN FD devices as well as for PCAN-USB and PCAN-USB Pro (see documentation)
  • usb: use uninterruptible waits in some different situations to prevent from possible deadlocks
  • Extended support of MSGTYPE_SINGLESHOT to all types of devices
  • sysfs: introduced 4 new counters of rx/tx frames and interrupts
  • netdev: set of changes to get closer to mainline drivers behavior:
    • Added forgotten IFF_ECHO netlink bit
    • Don't set any default bitrates since mainline drivers don't
    • Included ONE-SHOT mode support
    • Fixed the way sample point values are displayed by sysfs
    • sysfs displays bit-timing settings of the device rather than netdev ones
  • libpcanfd:
    • pcanfd_open(): don't call ioctl(SET_INIT) if there are no bits set in flags that require it
  • pcanfdtst:
    • Included echo id checking in echoed frames
    • Sync -F option in rx mode from content of 1st data received instead of 0x00
    • Fixed how frames are resent in case of EAGAIN
    • Added support of -1 | --one-shot option
  • RTDM:
    • Fixed nanosecond counter in rx timestamps
    • Removed lock/unlock useless usage in blocking mode
  • RTAI 5.3:
    • Added missing flags when linking RT applications

Download Driver v8.13.0 (tar.gz) Download Manual (PDF)

2021-05-10 Driver Download Version 8.12.0

  • Fix PCAN-Chip USB name
  • Fix compilation issue with kernels up to 5.12
  • Improve hardware timestamps handling
  • Add xeno_can_peak_pciefd to the driver black list
  • Support of legacy PCAN-Dongle and PCAN-PC card is now removed by default. Please use PAR=PARPORT_SUBSYSTEM, DNG=DONGLE_SUPPORT and PCC=PCCARD_SUPPORT to include their support in the driver now.


  • Simply use device raw timestamps (when available) in skb_hwtstamps

Download Driver v8.12.0 (tar.gz) Download Manual (PDF)

2021-01-19 Driver Download Version 8.11.0


  • Include dkms support (experimental! see "make -C driver dkms_install")
  • Overhaul of timestamp management for USB CAN-FD devices: calibration msgs are no more used as time base since their timestamps reset each time the option is set, while event timestamps don't. Events timestamps now is the time base, while calibration msgs are used to accumulate running time and manage 64-bit timestamps
  • Handle SOF option when FW does support it (CAN-FD FW >= 3.5.1). With this option, timestamps are fired when getting Start Of Frame rather than End Of Frame bit. This option can be set when setting ts_mode
  • Include dynamic clock reference selection; export clk_ref into sysfs; define drvclkref new module parameter to select the clock when the driver is loaded. The clock defines how timestamps evolve. drvclkref can be set with value 0, 1, 4 or 7 (see CLOCK_xxx in time.h). PCANFD_OPT_DRV_CLK_REF new option is also created
  • Move (and fix) dummy read made next to receiving response to USB GPIO cmd sent to the PCAN-Chip USB
  • USB: silently ignore EPROTO when reading instead of considering it as an error (same behavior as peak_usb)
  • USB: the controller is no more put in bus off before going to bus on
  • USB: fix explicit usage of little endian in USB records
  • Introduce PCANFD_IGNORE_SAME_BITTIMING that allows the driver to not change current bitrate (set by PCANFD_SET_INIT) if the new one is the same than the default one set with open()
  • USB-Pro: support of single-shot mode
  • CAN-FD: module parameter dbitrate=0 now correctly interpreted as "run in CAN 2.0 mode" only
  • Cleaning up old and useless code (the size of the archive has decreased by ~1MB)


  • Fix usage of hw timestamps in netdev mode: hw timestamps in netdev mode MUST be RAW hw timestamp only
  • Forward CAN bus errors to socket-can
  • Fix export of listen-only mode in ctrlmode_supported


  • Fix time_t deprecated usage in struct timeval
  • Makefile: add #include <errno.h> to enforce lib32 presence detection
  • Fix MSGTYPE old field according to pcanfd_msg flags content
  • Fix pcan_msg type according to MSGTYPE_STATUS and protect copy of DATA field
  • Fix timestamp conversion from old TPCANRdMsg to new pcanfd_msg


  • pcanfdtst: always consider timeout as exit condition
  • pcanfdtst: set TS_MODE option as soon as the device is opened
  • pcanfdtst: fix PCANFD_OLD_STYLE_API usage: with that option, pcanfdtst can run with old API (pcan < 8)
  • pcanfdtst/RTAI: fix usage of POSIX clock_get_time() since it might freeze the system sometimes
  • pcanfdtst: handle --len even if --incr is used on cmdline

Download Driver v8.11.0 (tar.gz) Download Manual (PDF)

2020-07-02 Driver Download Version 8.10.2


  • Include support of Kernels up to 5.8.0
  • Enlarge read() output buffer size to correctly output rx frames with more than 8 bytes of data ($ cat /dev/pcanX)
  • Allow command 'm' to specify more than 8 bytes ($ echo “m …” > /dev/pcanX). With this change, it is now possible to send CAN-FD message with more than 8 data bytes WITHOUT setting the BRS bit, through the write() method
  • Be sure that error frame won't be pushed in Rx queue if corresponding status bit is already set to avoid rx fifo flooding
  • pcanfd_pci: add wmb() to be sure that the whole record is really written in DMA before telling the device that it is
  • pcanfd_pci: force using raw spinlock when writing 64-bits commands to protect from RT patches that change spinlock into sleeping mutex
  • pcanfd_ucan: remove useless and potentially dangerous memset(0) of msg in Tx area before filling it: the memset() cmd might finish after the dlc field has been populated
  • pcan-usb: restore 20 ms delay before putting controller to off


  • add --file option to transfer a file onto the CAN bus and compute real transfer rate vs baudrate

Download Driver v8.10.2 (tar.gz) Download Manual (PDF)

2020-05-20 Driver Download Version 8.10.1


  • netdev mode: fixed potential kernel 5.4 crash (Ubuntu 20.04): when kernel 5.4 is detected, then alloc_candev() is used instead of alloc_netdev()
  • USB devices: wait for outstanding data URBs to be completed before going to BUS OFF
  • Install MSI workaround for all architectures (and not only for X86) since the problem of freeing 1st channel has also been seen with iMX6


  • Makefile: fixed CXX variable definition to g++ to allow C++ examples to be correctly cross-compiled

Download Driver v8.10.1 (tar.gz) Download Manual (PDF)

2020-03-11 Driver Download Version 8.10.0


  • RT/Xenomai 3.x: fixed possible deadlock by removing usage of dev->mutex before going to sleep
  • Xenomai 3.1: added --auto-init-solib option to build correct shared lib
  • PCAN-USB: handle error codes during close process to stop it when the PCAN-USB disconnects (when running pcan-settings -d=x for ex)
  • PCAN-USB Pro:
    • Fixed whole buffer size to 1K even in low-speed mode
    • Handle BUSLAST request when BUS is ON
    • Wait a bit after sending BUSOFF cmd so that USB pipes aren't deleted to quickly (this sometimes prevents from last data frames to be written on the bus)
  • USB devices: check root rights only if GLOBAL_ROOT_UID is defined (Kernel 3.5)
  • Added channel identification system (blinking LED) through:
    • New option PCANFD_OPT_FLASH_LED
    • New sysfs leaf "led": to flash the LED of an USB interface during 3 s, one types:
      $ echo 3000 | sudo tee /sys/class/pcan/pcanusb*/led
  • Added possibility of saving a unique device number ("devid") for PCIe card too
    • Fixed Udev rules so that devid is also used for PCIe cards
    • When probing a PCIe card, if the magic number has been found in the flash memory, then "Flash: Ok" is put in kernel logs
  • Fixed how devices are enum while pcan starts:
    • One line per PCAN interface (+ one line for extra info)
    • One line per channel with minor and, if used, user defined device number
  • Added LOOPBACK support to netdev mode
  • pcan_ioctl_extra_parameters: -ENOTSUPP now returned when device_params is NULL
  • libpcan: enlarged minor number to the (new) upper limit and fixed usage of /dev prefix in RTDM
  • Fixed compilation error with some Kernels that need ctypes.h to be included
  • driver/Makefile:
    • Handle kind of Linux distro so that Centos (RH) specific changes can be handled by the Makefile
    • Fixed DESTDIR usage so that depmod works with chroot
  • Updated License headers
  • Added new README and LICENSE files


  • pcan-setings: fixed status displayed when getting the device number failed
  • pcanfdtsts: added --ts-base cmdline option
  • RTAI: fixed test/Makefile
  • Reworked test Makefile so that it is a bit clearer
  • Fixed test programs return code in case of success and display report

Download Driver v8.10.0 (tar.gz) Download Manual (PDF)

2019-10-24 Driver Download Version 8.9.3

  • Fixed warning: this statement may fall through [-Wimplicit-fallthrough=] gcc 9 + kernel 5.3.0 (Ubuntu 19.10)
  • netdev: fixed missing "fall through" comments
  • RTDM: Removed useless lock around the device when entering RTDM API. Since the RTDM device is already referenced by the RTDM API, then the usage of another lock in the driver is at best useless, at worst a "lock-in-atomic context" bug generator
  • PCAN-Basic for Linux: Added a Python 3.x example. Path: examples/python/PCANBasicExample_py3.pyw

Download Driver v8.9.3 (tar.gz) Download Manual (PDF)

2019-08-05 Driver Download Version 8.9.0

  • lspcan: fixed several small bugs in display. For example, "rx_fifo_ratio" did not exist in netdev mode
  • Makefile: fixed CC to take CROSS_COMPILE into account in EACH Makefile so that standalone cross-compilation is possible
  • netdev: introduced new module param "defclk"

    This module parameter allows to select default clocks, in netdev mode only.
    This parameter can be used to set a new default clock value to all devices as well as some only. Its syntax follows the same rules than the "assign" parameter, that is:

    The global set of a common new default clock is done with this shortcut:
    • ci is a Hz value. "M" or "k" can be used too: for example, "20M" means 20 MHz clock value
    • If ci is 0 then the clock of the device(s) is unchanged
    • If ci is not a valid clock value, then it is silently ignored

    Note: assign and defclk definition were moved into pcan_netdev.c.

  • USB devices: pcan_usb_core.c: pcan_usb_plugout(): removed useless lock. The disconnect() method is called by the Kernel with a locked device. usb_if->isr_lock is therefore useless
  • PCI/PCIe devices: pcan_pci.c: pcan_pci_sja1000_remove() removed useless lock. Again like with USB devices, the "remove device" method must be fixed to avoid potential "schedule while in atomic context" issue when CONFIG_PREEMPT is set and when pcan is removed, with PCAN-PCIe cards running in MSI mode. In that specific case, free_irq() is called and might schedule() which is forbidden while in a critical section when preemption is disabled
  • ISA like devices: Fixed io module param type from ushort to ulong to enable mem mapped access
  • RT specific: This version has been successfully tested with Xenomai 3.0.9

Download Driver v8.9.0 (tar.gz) Download Manual (PDF)

2019-04-15 Driver Download Version 8.8.0

General Updates:

  • Added libpcanbasic directory that includes pcanbasic (lib, pcaninfo and C++ examples)
  • Makefile: added targets "netdev", "chardev", and "pcanbasic" so that user is, for example, able to make the netdev version directly with "$ make netdev"
  • Added banners in each Makefile that summarize each build and its environment
  • Each Makefile has been fixed with the correct usage of Makefile default variables:
    • Use of $(CXX) instead of "g++"
    • CC default is changed with "gcc"


  • Handled linux 5.x changes:
    • do_gettimeofday() has disappeared (so it is inlined for linux >= 5.0.0)
    • Forced usage of "M=" rather than old "SUBDIRS=" in driver Makefile, when detected Kernel is >= 5.0.0. For these Kernels, using SUBDIRS generates a warning messages stating that SUBDIRS will be removed in Linux 5.3
  • Makefile displays now which version is being built, among the chardev, the netdev, the Xenomai 3 or the RTAI 5.x versions
  • Fixed the transmission of last frame with SJA1000 (and USB) devices when application is closing roughly
  • Changed how writer is awakened on SJA1000 and USB devices to improve the ability of select() system call to be interrupted
  • Tx frames counter of USB devices is more accurate
  • Tx fifo is now flushed on ERROR_ACTIVE state notification
  • Fixed usage of select() under RTAI 5.1 and Xenomai 3.0 RTDM environments
  • RTDM: fixed initialization and clearing of both in and out events
  • driver/pcan.h: replaced the GPL by the LGPL so that it can be included in commercial products now
  • Added "dev_name" sysfs new var that displays the device name according to the environment the driver runs:
    • "/dev/pcanX" under Linux
    • "pcanX" in RTDM
  • usb-pro: added a 20 ms delay before closing bus
  • usb-pro: added PCAN_DEV_ERRCNT_RDY so that application is informed that it can get error counters from this device
  • Included the ability to program the flash of some USB devices (see PCANFD_OPT_MASS_STORAGE_MODE new option and PCANFD_FEATURE_MSD new features). Added "mass_storage_mode" in sysfs that enables to switch a USB device to Mass Storage Device mode. Note that switching to Mass Storage Device mode needs to be root!
  • Fixed "adapter_version" management to handle the fact that the USB X6 might run several fw with different versions
  • Bug: CONFIG_COMPAT: Fixed 32-bit application ioctl deadlock over a 64-bit driver
  • Removed locks around dev_register() and dev_unregister()


  • Fixed soname and change libpcanfd version to 8 (like pcan v8)
  • Makefile: fixed 32-bit over 64-bit compilation in lib/makefile
  • Makefile: used "/bin/echo" instead of "echo" ("echo" may be a shell internal command) to be sure that "-e" option is taken into account


  • pcanfdtst: moved to a full POSIX version so that this can be built and run under Xenomai, RTAI, and non-RT Linux versions: if ONE_TASK_PER_DEVICE is defined, then a thread is created for each device defined on the command line. If not defined, then the main thread uses the select() system call to wait for each device at once
  • pcanfdtst: added tx_ovr counters and flush printf() output buffers in RT mode
  • Because pcanfdtst uses clock_gettime(CLOCK_REALTIME) now then the Makefile must include the support of old ldd < 2.17
  • Added two new examples "receivetest_posix" and "transmitest_posix" that show how to write and build a POSIX application that is able to run under Linux as well as under any POSIX RT environments (Xenomai 3.0 and RTAI 5)
  • pcan-settings: added two new options:
    • -M, --MSD enables to switch a device to Mass Storage Device mode
    • -q, --quiet closes stdout and stderr
  • Note that switching to Mass Storage Device mode needs to be root!

Download Driver v8.8.0 (tar.gz) Download Manual (PDF)

2018-11-20 Driver Download Version 8.7.0


  • Fixed potential NULL pointer access bug when initializing in FD mode a non FD hardware
  • PCANFD_TYPE_ERROR_MSG are now posed only if something new has to be notified
  • BUS_LOAD notifications are now posted when bus_load has really changed
  • Fixed some rare negative time values in timestamps
  • Fixed old API init settings conversion ("echo i > /dev/pcanxx")
  • Init settings are no more set to their defaults when the device is closed
  • Fixed /proc/pcan "btr" column and sysfs "btr0btr1" node values
  • Fixed user bittimings and conversion
  • Changed mutex into spinlock when browsing the global devices list
  • Be more permissive with PCANFD_TYPE_CANFD_MSG written on a non-FD device if data_len is <= 8
  • src/pcan_fops.c: fixed double mutex_unlock() call
  • src/pcanfd_core.c: fixed potential task deadlock waiting for the event to be signaled
  • usb: reworked complete release of USB ressources
  • usb: fixed wrong loop condition in release loop when probing a channel fails
  • usb: PCAN-USB Pro and PCAN-USB hardware timestamsps are correctly handled now
  • usb: fixed PCAN-USB X6 channel_number returned by PCANFD_GET_STATE
  • xenomai: support of Xenomai 3 with full access to /sys/class/pcan
  • xenomai: fixed mininal_xenomai dir RT applications for Xenomai 3
  • xenomai: test/Makefile: added --no-auto-init flag to xeno-config
  • xenomai: driver/Makefile: changed "make xeno3" into "make xeno"
  • xenomai: pcanfdtst.c: added rendez-vous semaphore based to properly exit from main task (^C no more needed)
  • rtai: support of RTAI 5.1 with full access to /sys/class/pcan
  • rtai: added "minimal_rtai" subfolder in the "test" folder which is the same than "minimal_xenomai": two very small applications that read and write a bus
  • lib/Makefile: RT: disabled 32-bit compilation with 64-bit arch
  • pcanfdtst: fixed wrong help text of -B --brs option
  • receivetest: added 'x' flags for STATUS msgs received
  • test/*.cpp: fixed some bad indentations that give warning with gcc 6.3.0
  • netdev: incr netdev stats overrun and error counters in case of DATA_OVR
  • netdev: fixed pcan tx buffer overflow in case of flooding from the application
  • netdev: fixed a NULL pointer dereference in DEBUG mode msg
  • netdev: useless (chardev) rx FIFO object is now undefined in this mode
  • handle single-shot mode for CAN FD devices
  • netdev: fixed potential NULL pointer accces when interface is UP and the corresponding device is initialized (again) through the chardev interface
  • netdev: fixed potential NULL pointer access with PCAN-PCI Express FD canX interface running in non-MSI mode
  • netdev: removed useless "last_tx" init (this fixes lots of compilation issues)
  • netdev: don't normalize bittimings since they already are. This prevents from changing them to another <brp,tseg1,tseg2> n-uple

Download Driver v8.7.0 (tar.gz) Download Manual (PDF)

2018-07-24 Driver Download Version 8.6.0


  • driver: removed trailing \0 in characters strings adapter_name and adapter_version sysfs nodes
  • pci/pcifd: redesign MSI management (useless msi_step removed)
  • PCAN-PCI Express FD: defined new parameters fdirqtl and fdirqcl that allow to set different values than the default IRQ Time and Count Limit
  • PCAN-PCI Express FD: MSI: used pci_irq_vector() for Kernels 4.8+ except if MSI sharing is set
  • pcan-settings: fixd -d option value as LONG instead of INT
  • PCAN-PCIe *: renamed PCAN_PCIE_OEM (FD) to PCAN_Chip_PCIe (FD)
  • PCAN-USB-*: restored lost parent (real) device symlink in sysfs
  • pcanfdtst.c: fixed warnings from RTAI compilation
  • driver rt: fixed compilation issues
  • driver/Makefile: do test include/can/dev.h content only when Kernel is lower than 4.8
  • driver: added missing rx and tx error counters to BUS_LOAD periodic notification
  • driver: added some #ifdef NETDEV_SUPPORT around useless code and data when it is built in netdev mode to save memory
  • PCAN-USB FD*: enforced error processing when sending chained cmds: no need to continue sending cmds if one has failed
  • PCAN-USB FD*: fixed potential NULL pointer access in UCAN_USB_MSG_CALIBRATION handler
  • driver/API: added PCANFD_FEATURE_ECHO and PCANFD_MSG_ECHO new msg bit to explicitly request echo of the tx frame
  • pcanfdtst: added "—echo". New option to send CAN frames with local echo:
    $ pcanfdtst tx -b 500k --echo -i 0x001 -n 100 -I 4  /dev/pcanpcifd6
    ...                                                        ...
    1529485528~681375 /dev/pcanpcifd6 <      001 ..h..  4 - 5e 00 00 00
    1529485528.680472 /dev/pcanpcifd6 >      001 ..h..  4 - 5d 00 00 00
    1529485528~682451 /dev/pcanpcifd6 <      001 ..h..  4 - 5f 00 00 00
    1529485528.681548 /dev/pcanpcifd6 >      001 ..h..  4 - 5e 00 00 00
    1529485528~683528 /dev/pcanpcifd6 <      001 ..h..  4 - 60 00 00 00
    1529485528.682628 /dev/pcanpcifd6 >      001 ..h..  4 - 5f 00 00 00
    1529485528~684606 /dev/pcanpcifd6 <      001 ..h..  4 - 61 00 00 00
    1529485528.683706 /dev/pcanpcifd6 >      001 ..h..  4 - 60 00 00 00
    1529485528~685684 /dev/pcanpcifd6 <      001 ..h..  4 - 62 00 00 00
    1529485528.684784 /dev/pcanpcifd6 >      001 ..h..  4 - 61 00 00 00
    1529485528~686760 /dev/pcanpcifd6 <      001 ..h..  4 - 63 00 00 00
    /dev/pcanpcifd6 < [packets=100 calls=100 bytes=400 eagain=0]
    sent frames: 100
  • PCAN-PCIe FD: added FW version checking for DMA issue handling:
    Driver checks against FW < 3.3.0 to detect whether the DMA logic includes issue with the mix of 32-bit and 64-bit logical addresses
  • PCAN-PCIe FD: wait of end of PCIe transaction when resources are being cleared in the board, before releasing their corresponding part in the host
  • netdev: fixed memory leak and free of wMsgs and rMsgs msgs queues in case of alloc failure
  • driver: used device_destroy() instead of device_del() (see: source/drivers/base/core.c: "device_destroy - removes a device that was created with device_create()")
  • sysfs: fixed usage of dev->adapter when removing sysfs nodes: dev->adapter might be released before deleting the sysfs adapter related nodes
  • driver: added debug as a new target in Makefile and fix netdev build
  • PCAN-USB *: fixed plugging/unplugging of USB adapters while there is CAN traffic
  • PCAN-PCI/PCIe: introduced devs list in pcan_pci.c to correctly free resources in case of errors in _probe() function
  • driver: removed old and useless #idef/#endif: consider as if:
    • PCAN_USES_OLD_TX_ENGINE_STATE won't never be defined anymore
    • PCAN_USB_PCAN_SYSFS is always defined
  • driver: fixed delta_us computing in pcan_sync_timestamp() to prevent from event timestamp older than sync timestamps
  • driver: fixed timeval_add_us() to correctly handle the negative values of µs to add
  • driver: timestamp cooking is now done in user context rather than in interrupt context to save CPU time
  • PCAN-USB: fixed regression issue with PCAN-USB at 1Mbps, as well as timestamp 8-bit wrapping issue and improve rx management
  • driver CONFIG_COMPAT mode: fixed copy_to_msg32()
  • driver/API: added support for SET and GET_OPTION in CONFIG_COMPAT mode
  • driver: added SPDX identifiers to headers and C files
  • driver: Included last linux-can header files rather (very) old ones. This also enables to include last GLPv2 license
  • PCAN-PCIe *: included MSI workaround around can0 IRQ: now can0 IRQ is always the last IRQ freed:
    • If PCAN_PCI_MSI_WORKAROUND is not defined, then IRQ are requested (resp. freed) at _open() (resp. _close()) time, as before.
    • If PCAN_PCI_MSI_WORKAROUND is defined, then:
      • . if usemsi (fdusemsi) equals 0, then IRQ are requested (resp. freed) at _open() (resp. _close()) time.
      • . otherwise, IRQ are requested (resp. freed) at _probe() (resp. _exit()) time.
    Since this issue has been seen on x86, then PCAN_PCI_MSI_WORKAROUND is defined ONLY when CONFIG_X86 is defined
  • driver: included support of new Timer API since Kernel 4.15 (Ubuntu 18.04 LTS)
  • driver/API: changed the way STATUS[PCANFD_BUS_LOAD] is notified:
    Now the driver setup its own timer to push the STATUS[PCANFD_BUS_LOAD] msg by itself. This msg is no more pushed by the device ISR
    This enables to limit Rx queue flooding and ensure that the msg will always be pushed. The timer is stopped when the device is closed
    The timer is setup and started if flag PCAN_DEV_BUSLOAD_RDY is set only
  • driver: fixed bus_load: value should be 100x greater
  • PCAN-USB *: force GFP_DMA bit for URB data buffer allocation
  • PCAN-USB: reworked completely timestamps handling to handle clocks drift through the driver global timestamp system
  • PCAN-* FD: fixed 32-bit aligned parsing of incoming uCAN buffers
  • driver/API: initialize with default settings when no bitrate nor brp is given by user
  • PCAN-USB *: fixed usage of read_buffer_len in rx USB buffer (some buffers could not been read entirely)
  • driver: useed power of 2 value for clock_drift scale to save CPU time in timestamp management during ISR
  • driver/Makefile: used "modprobe", "udevadm" and "depmod" instead of the absolute path of the executable files
  • pcanfdtst: dsample_pt default value forced to sample_pt if dsample_pt was not given on cmd line
  • driver: improved the way init settings are checked and handled before opening a channel: now, any wrong value generates -EINVAL
  • lib/pcanfd_open(): process SAMPLEPT flags only when BITRATE values are given (processing any user sample point makes no sense when using BRP,TSEGx and SJW arguments)
  • driver: restore default settings on last close instead of keeping current ones
  • driver/API: fixed potential bug: user sample_point MUST not be greater than PCAN_SAMPT_SCALE
  • driver: fixed some DEBUG string format in 32-bit compilation
  • PCAN-USB *: improved the way timestamps are handled to be VM compatible
  • PCAN-USB *: request calibration msgs at _init() rather than at _open() time so that clocks are stabilized an clocks drifts are fixed when the channel is open
  • PCAN-USB *: fixed potential Kernel Oops in pcan_poll when application uses select() and USB device is unplugged
  • driver: changed mdelay() into msleep_interruptible() to save CPU time while in non-interrupt contexts
  • PCAN-USB *: fixed URB buffer address by using the heap instead of the stack
  • PCAN-USB *: added up to 2 retries when writing an URB, in case of time out. This fix should be enough for PCAN-USB Pro to run in VM
  • driver/API: fixed a bug that could lead to send a CAN FD msg with data_len > 8 and/or BRS while the channel was not opened in CAN FD mode
  • pcanfdtst.c: Added --play-forever option: while --play reads once a file and stops at the end of it, --play-forever loops reading it from the beginning
  • SJA1000 *: fixed potential bug for all internal SJA1000 based devices: no other choices than "software" timestamps for these devices
  • pcanfdtst.c: added a way to ctrl output line format (see % date --help)
  • pcanfdtst.c: added --filler option and "rec" mode to define the way DATA are filled and to record data into a file that could be played next
  • pcanfdtsts.c: now frames can be sent AND checked with incremented CAN ID and DLC
  • driver/API: removed useless PCANFD_TX_OVERFLOW notification when in blocking mode
  • pcandfdtst.c: added "getopt" and "setopt" new modes to get/set OPTIONS value from the driver
    Usage is:
    $ pcanfdtst getopt --opt-name x /dev/pcan
    $ pcanfdtst setopt --opt-name x --opt-value yyyy /dev/pcan
  • PCAN-Chip USB: Fixed PCAN-Chip name
  • PCAN-Chip FW 3.3.0: included digital/analog I/O full management
    (see also PCANFD_IO_xxx options in pcanfd.h)
  • driver: changed the way ENOSPC is handled in options processing: when user provides a too small buffer, -ENOSPC is returned and the "size" field of the opt pointer is updated with the needed value. Libpcanfd has been changed too. Now, user application knows what size should be allocated
  • driver/API: added 2 options to read FW and DRV versions
  • driver: fixed sjw usage in SJA1000 bittiming conversions
  • driver: fixed sample_point conversion between pcan and linux-can: pcan sample-point uses 3 decimals while linux-can uses 2
  • driver: fixed bitrate conversion issue: added sjw as a parameter to convert some BTR0BTR1 specs. Previous releases were considering a default sjw (=1) for the display
  • pcanfdtst.c: added -E --esi option to set ESI bit in tx frames
  • netdev: use jiffies only for Kernel > 4.7 (remove support of old kernels, for something that is not used anywhere else...)
  • driver/Makefile: removed the leading comment in var setting that could lead to compilation error
  • PCAN-USB *: fixed usb device ID reading and setting by looping on sending the request in case of ETIMEDOUT
  • PCAN-USB *: useed more modern way to dialog with USB devices by the mean of usb_bulk_msg()
  • pcan-settings: didn't return "errno" anymore but 0
  • pcanfdtst.c: don't fail in case of timeout if not waiting for a given number of frames (that is, when -n is not used on cmd line)
  • PCAN-USB X6: fixed comment for in its corresponding Udev rule
  • sysfs: "devid" entry only exists if devid makes sense for the device
  • pcanfdtst.c: useed alarm() and signal(SIGALRM) to setup a maximum time of running
  • pcanfdtst.c: changed the meaning of the "- n xxx" option: now this defines the count of CAN frames instead of the count of loops
  • driver: changed the good old enum scheme. Now devices ranges are:
      0    31      PCI/PCIe
      32   63      USB
      64   71      PC-CARD
      72   79      ISA/PC104
      80   87      DNG SP
      88   95      DNG EPP
    To restore the old one, build pcan with:
      0    7       PCI/PCIe
      8    15      ISA/PC104
      16   23      DNG SP
      24   31      DNG EPP
      32   39      USB
      40   47      PC-CARD
  • driver/API: addd PCANFD_FEATURE_SELFRECEIVE bit that says that the device is capable of self-sending CAN frames
  • driver/API: renamed HW_PCI_FD into HW_PCIE_FD which is closer to reality (pcan.h always defines HW_PCI_FD as HW_PCIE_FD, for compatibility reasons)
  • pcanfdtst.c: added -M | --max-duration option that enables user to set the maximum count of s. the application should run.
    If this duration is reached before the end of the test, the application returns 1
  • lib: fixed pcanfd_open() now unconditionally calls ioctl(SET_INIT) next to open() system call
  • netdev: fixed usage of CTRLMODE_LISTEN_ONLY and _FD_NON_ISO socket-CAN flags

Download Driver v8.6.0 (tar.gz) Download Manual (PDF)

Driver Download Version 8.5.1 (27.10.2017)


  • Driver and library include 2 new functions/ioctls that enable to get/set options values to an opened channel:
    • Set a delay between each frame written on the CAN bus (CAN FD controllers only)
    • Set a new hardware timestamp mode that enables applications to get the raw timestamp values from the device
    • Get the features of a channel (CAN FD capable, device number can be set,...)
    • Set the acceptance code and mask for 11-bit and 29-bit CAN IDs (standard or extended modes)
    • Define what kinds of message the application wants to receive: CAN, RTR, STATUS, ERROR, ...
  • The driver can be built with Kernels more recent than 4.10 in which pci_enable_msi_range() has been removed
  • Fixed BTR0BTR1 bit rate conversion with CAN adapters equipped with a clock > 8 MHz
  • Library's Makefile automatically builds the 32-bit version when running a 64-bit system if it is capable to
  • Tx and Rx error counters are now read from SJA1000 devices too
  • Added ERROR_MSG handling (SJA1000 + CAN FD controllers): the driver now forwards any error message it gets from the controller to the application. Application is notified of these errors, if the feature is enabled
  • The warning message "Compiling for __LP64__" displayed by the "make" command, has been removed
  • The Bootloader version is also given when any CAN USB adapters like the PCAN-USB FD is connected (dmesg)
  • The "CAN 2.0 A/B" mode is forced when a CAN FD controller is not initialized in CAN FD mode
  • Included the patch from "Benad, Friedrich [DE] mailto:friedrich.benad@airbus.com" that enables to compile the driver in netdev mode with Kernel 3.0
  • udev/45-pcan.rules: Fixed a typo in a comment
  • Add "peak_pciefd" (the mainline driver since 4.12) to the blacklist when PCAN is installed
  • Fixed RTR flag usage in outgoing CAN FD messages (unused) as well as an endianness issue in outgoing CAN messages (only big endian architectures)
  • Fixed issues around timestamping: now PCANFD_INIT_TS_DRV_REL is correctly handled
  • Fixed a compilation error with Kernel 4.11+ in netdev mode (last_rx field has been removed from struct net_device from v4.11)
  • Added "deftsmode" module parameter that enables to define the default timestamp mode used for all of the channels. This is useful for netdev mode
  • Fixed DMA usage in control URB with Kernel 4.13 for all PCAN-USB FD interfaces as well as for the PCAN-USB Pro. Kernel 4.13 is the Kernel of Ubuntu 17.10
  • Fixed lonely "(le)" (or "be") message in dmesg

Download Driver v8.5.1 (tar.gz) Download Manual (PDF)

2017-06-14 - Release Version - 8.4.0

  • Driver Download Version 8.4.0
  • make: fixed usage of "device_lock" only if HANDLE_HOTPLUG is defined, to avoid compilation errors when USB and PCC support not included
  • make: Korrektur der Definition pr_warn() mit Kernel älter als 2.6.35
  • make: Neue Option: COMPAT_SUPPORT=NO zum Deaktivieren von CONFIG_COMPAT (32-Bit-Anwendung wird auf 64-Bit-Treiber ausgeführt)
  • make: Bessere Unterstützung für das Cross-Kompilieren von Test-Anwendungen, Treiber-Installationen und Bibliotheken
  • make: Korrektur des 64-Bit-Anzeigeformats entsprechend CONFIG_ARCH_DMA_ADDR_T_64BIT
  • make: Korrektur des falschen und sinnfreien Vergleichs (a == a) bei Interface-Nummern von USB-FD-Interfaces
  • make: Korrektur des Typs sysfs_attr falls CONFIG_DEBUG_LOCK_ALLOC=y
  • make: Unterstützung für OpenSuse-ähnliche Systeme hinzugefügt, bei denen die Headers anders als bei Debian abgelegt sind
  • make install: Korrektur der Verwendung von depmod in Cross-Kompilier-Umgebungen
  • make install: DESTDIR_DEV hinzugefügt, um Header-Dateien anderswo zu ermöglichen, als im rootfs (Standard: DESTDIR)
  • PCAN-FD: Benutzer-API-Flag PCANFD_INIT_BUS_LOAD_INFO auf die Option CANFD BUSLOAD gemappt, um die Rate der Hardware-Interrupts zu begrenzen, falls "bus load" als Info nicht benötigt wird
  • PCAN-FD: Korrektur der Anzeige von "Unknown adapters" (unbekannte Adapter) durch Hinzufügen fehlender Namen für unterstützte FD-Interfaces
  • PCAN-PCIe FD: Bestimmte sysfs-Eigenschaften hinzugefügt, sodass die logischen/virtuellen Adressen der RX/TX-DMA-Zonen gelesen werden können
  • PCAN-PCIe FD: Modulparameter dmamask hinzugefügt
  • PCAN-PCIe FD: Korrektur "non-working"-Fehler beim ersten Mal open() + read()
  • PCAN-USB FD: Korrektur in timeval_add_us(), wenn der Zähler für μs genau 1 M ist und "ts_high" von 2 ^ 32 - 1 auf 0 übergeht
  • PCAN-USB Chip: hinzugefügt
  • libpcanfd: Korrektur bei Verwendung der (beiden) Argumente "sample_pt" im Aufruf von pcanfd_open()
  • libpcanfd: Korrektur der Abtastpunkt-Berechnung, wenn OFD_BTR0BTR1 oder OFD_BRPTSEGSJW in pcanfd_open() verwendet wird
  • driver: Korrektur der Anzeige von Standardwerten von usemsi/fdusemsi (modinfo)
  • driver: Korrektur der Berechnung von btr0btr1, indem der Wert sample_point berücksichtigt wird; btr0btr1 in sysfs zeigt nun den korrekten Wert auf Grundlage des ausgewählten sample_pt an
  • driver: Korrektur der Berechnung der Taktverschiebung für 32 und 64 Bits
  • pcanfdtst: Option -T hinzugefügt zur Sicherstellung, dass empfangene Zeitstempel nicht aus der Zukunft kommen und von der aktuellen Zeit nicht zu sehr abweichen

Download Driver v8.4.0 (tar.gz) Download Manual (PDF)

Driver Download Version 8.3.1 (15.02.2017)


  • netdev/pcanfd_pci: handle restart from BUSOFF
  • netdev: fixed a compilation issue with some 4.4.0-x kernels including Linux 4.8 changes of can/dev.h
  • pcanfd_usb: handle non-root USB controllers (PCAN-USB X6 support with non EHCI USB controllers)

Download Driver v8.3.1 (tar.gz) Download Manual (PDF)

Driver Download Version 8.3 (10.01.2017)


  • Support of the new PCAN-USB X6 USB to CAN adapter
  • 64-bit driver supports now 32-bit applications built with 32-bit libpcan ($ make -C lib all32)
  • Better netdev support with handling (auto-)restart mechanism in case of Bus Off
  • Dynamic allocation of Tx and Rx msgs fifos on open(). Release on close().
  • Set fdusemsi module option back to default 1 (MSI used only if not shared)
    (writing onto a not-connected channel caused loosing MSI for the the other connected channel)
  • Fixed that Tx/Rx fifo status bits were reset in the exported CAN status
  • pcanfdtst: improved Xenomai RT by fixing usleep() usage
  • Support of the OEM PCI/PCIe device ID 0x0019
  • Removed some spurious DEBUG msgs
  • uCAN (CAN FD) cmds unused bits are set to 0

Download Driver v8.3 (tar.gz) Download Manual (PDF)

Driver Download Version 8.2 (08.11.2016)


  • Fixed netdev lock/unlock around device_write()
  • Added information read from linux-can into /sys/class/pcan
  • Increased Tx fifo up to 500 entries
  • Fixed typo in Udev script: ctrl_number is actually ctrlr_number
  • Added two new ioctl to get bit timing ranges as well as available clocks from the driver (pcanfd.h, libpcanfd.h, and libpcanfd.c impacted)
  • Sample_point ratio is taken into account now, when computing bit timings specs
  • Added rtai and xeno as new Makefile targets
  • Removed OFD_DSAMPLEPT bits (pcanfd_open() only): if sample_point is given then it must be given for both nominal and data bit rates
  • The driver now considers the bit rate value only if BRP is not 0
  • Fixed handling of some errors cases from CAN-FD adapters
  • pcanfdtst(RTAI): creates a better unique task ID
  • Removed forgotten DEBUG logs for PCAN-PCI Express FD
  • Usage of RX_BARRIER mechanism in PCAN-PCI Express FD to prevent from any spurious interrupts
  • Added some control on channel index received from PCAN-PCI Express FD
  • Added PCANFD_BUS_ERROR as a new STATUS message to give SJA1000 applications BUS_ERROR interrupt notifications Added the STATUS message software ACTIVE for SJA1000 based devices. It occurs as soon as the bus is set up
  • Added support of MSI for the PCAN-PCI Express FD (see also new "fdusemsi" module parameter)
  • The SJA1000 interrupt handler is not entirely locked anymory. Only write access is locked
  • The global init of PCAN-PCI-like boards was moved to _probe() function
  • Fixed usage of "irqmaxloop" and "irqmaxrxmsg" when they're 0 on cmd line
  • Speed up of the way Rx frames are read and saved from the SJA1000 Rx buffer
  • Fixed a bug concerning the limitation of STATUS messages, which could cause that further status changes of the bus were not notified
  • Added the new module parameters "usemsi" and "fdusemsi" to ctrl if MSI should be enabled (0=INTA mode only, 1=MSI mode tested, 2=shared MSI mode tested). "usemsi" default = 1 and "fdusemsi" default = 2
  • Makefile: Added KBUILD_EXTRA_SYMBOLS def to remove 'undefined symbols' messages when building the driver with RTAI
  • libpcan.c: Added const qualifier to each pointer that cannot be modified
  • Posted a soft STATUS msgs when the driver exits from any error cases, to notfiy user application of the end of the error status
  • Fixed how DMA is handled in PCAN-PCI Express FD: now Rx DMA is set once for all while Tx DMA is setup each time the device is opened
  • Fixed the netdev way of copying clocks from pcan (no more intern_prescaler usage)
  • Enlarged bit timing ranges of any CAN-FD PC interface to their max
  • Fixed computation of bitrate_real field when setting bit rate using BRP

Download Driver v8.2 (tar.gz) Download Manual (PDF)

Driver Download Version 8.1 (10.06.2016)


  • First release of PCAN v8 handling CAN-FD and new CAN-FD API
  • pcanfd_pci: fixed 64-bits version
  • Upgraded user documentation

17.05.2016 - Beta Version 8.0.25 - Updates:

Using this version over any 8.0.x-beta needs rebuilding and reinstalling everything!

  • pcan_parse.c: fixed timestamp display
  • Added SingleShot feature for SJA1000 (-like) controllers (see PCANFD_MSG_SNG bit in pcanfd.h)
  • Fixed clock drift handling with PCAN-USB (Pro) FD in timestamps
  • Added "host_time_ns" and "hw_time_ns" new fieds in "struct pcanfd_state" to inform the user of the current timestamps basis
  • pcanfd-pci: forced fallback into INTA mode if MSI did not give the exact count of requested msgs, since experiments show that MSI are not sharable
  • Fixed clock drift to lower integer rounded effects

01.04.2016 - Beta Version 8.0.20 - Updates:
  • CAN 2.0 PCAN-USB devices: usage of dynamic mem alloc instead of static one for sent commands (required for other arch and/or usb controller drivers, like RPi3 + dwc_otg)
  • Read/write access: fixed usage of msg type for input CAN frames
  • Read/write access: set default init flag PCANFD_INIT_FD for uCAN devices so that default open is CAN-FD
  • Driver/Makefile: included remarks made by Mr. Udo Sprute (thx!) to build things cleaner
  • Open: fixed bug around mutex that could be released twice
  • Changed the way of locking access to the Tx engine vs. ISR and multi-tasking access

08.03.2016 - Beta Version 8.0.17 - Updates:
  • Fixed compilation issues with 2.6.32 LTE
  • Fixed typo in sysfs "nom_tsegx"
  • Checked status of class_create_file() to fix __must_check attribute
  • Fixed missing ending ; and removed DEBUG define
  • Fixed compilation of the driver when USB is not included nor supported
  • Fixed dma_addr_t usage against 32/64-bits arch dma addr type
  • Fixed RT compilation against Xenomai 2.6 kernels

26.02.2016 - Beta Version 8.0.16 - Updates:
  • CAN FD support for all PEAK-System CAN FD PC interfaces
  • Improved memory copies and signaling mechanism to accelerate the processing of messages
  • New modern and message oriented CAN FD API offering multi-messages read/write, enhanced status information, several bit-timing specifications for both nominal and data bitrates, clock selection, ... (new "pcanfd.h" include file and new "libpcanfd" library)
  • Bus load, rx and tx CAN errors counters available in messages received by the application (when supported by the hardware)
  • Extensive use of "/sysfs" to export lots of the properties and statistics for each CAN/CAN FD device node to user space
  • New free "pcanfdtst" test application enables to test CAN 2.0 as well as CAN FD transfer
  • 100% compatible with the old CAN API (old "pcan.h" include file and "libpcan" library are included by the new ones)
  • Enhanced support of real time (enhanced support of RTDM in the driver and Xenomai 2.0 and RTAI in the test applications)
  • New "lspcan" tool that displays information as well as statistics for CAN/CAN FD nodes ("/proc/pcan" always present but should be considered for CAN 2.0 usage only)
  • All pcan nodes are moved under "/sys/class/pcan" ("usbmisc" no more needed)
  • New device nodes and new tree representation (board oriented) under "/dev" (the Udev rules heavily make use of the new exported "/sysfs")

Download Driver v8.1 (tar.gz) Download Manual (PDF)

Driver Download Version 7.15.2 (29.07.2015)


  • Included Self-Receive facility for all USB adapters
  • PCAN-Driver_for_Linux_eng_7.x.pdf describes how to use new self-receive options in the write/read chardev API
  • $ cat /proc/pcan displays now "[pec]" if the PCIEC_SUPPORT option has been defined
  • Fixed the way the PCI driver handled a channel device probing failure (double deregistration could result to a some Kernel Ooops)
  • Removed the usage of obsolete function check_mem_region() for Kernels >= 4.0
  • Driver/Makefile: fixed Kernel version checking to be able to compile the driver against 4.x Kernels
  • Driver/Makefile: handle GCC v4.9 (date-time warning has become an error)
  • Driver/Makefile: fixed version checking of the gcc compiler
  • All Makefile (RT): handle newer versions of xeno_config and the way the "skin" is being set on command line
  • netdev interface: uses now alloc_can_skb() instead of dev_alloc_skb() for Kernels >= 3.9, to workaround the linux-can o-o-o frames issue
  • netdev interface: handles a special case of Kernels 4.1 & 4.1.1 to workaround the linux-can o-o-o frames issue
  • Added definition of get_can_dlc() for some old Kernels
  • Added the reset of the error counters of the PCAN-USB FD adapters before going to bus on
  • Minimal_xenomai and test: did some coding style cleaning
  • transmitest: rewrote the complete help displayed and enabled user to use hex numbers for -p, -i, -r and -n options on cmd line
  • bitratetest.c: now can correctly be built under Xenomai
  • test/minimal_xenomai: renamed xenomai_transmitt_test to xenomai_transmit_test

Download Driver 7.15.2 tar.gz Download Manual (PDF)

Driver Download Version 7.14 (07.01.2015)


  • Added support for the new PCAN-USB FD and PCAN-USB Pro FD USB adapters for use with the CAN 2.0b bus standard

Download Driver 7.14 tar.gz Download Manual (PDF)

Driver Download Version 7.13 (20.10.2014)


  • Added a new feature that exports the "Device ID" which might be written into some PCAN devices (such as the PCAN-USB family devices) to sysfs so that it can be read by Udev system and used for creating /dev nodes names. See the new 45-pcan.rules file which now gives examples on how to use it. This "Device ID" may also be used in the "canx" name of the "netdev" (socketCAN) interfaces, by the mean of the "assign=devid" module parameter
  • Please note: the "Device ID" value is ONLY used if its value is not the default value (-1). It can be changed with: "pcan-settings /dev/pcanusbX -d new_value"
  • Please note: column "ndev" of cat /proc/pcan has been enlarged to display canXYZ strings
  • Fixed udev rules for correct naming of /dev/pcanxx symlinks to USB CAN devices: USB CAN devices /dev/pcanxx names start from xx=32, what ever CONFIG_USB_DYNAMIC_MINORS Kernel configuration is
  • Fixed pcan-settings tool to be able to handle 32-bits Device IDs
  • Added support for Kernel 3.17
  • Added support of the new PCAN-ExpressCard 34
  • Minor changes in the user manual

Download Driver 7.13 tar.gz Download Manual (PDF)

Driver Download Version 7.12 (23.07.2014)


  • Moved physically installed processing out of the USB interrupt context
  • Fixed "Kernel NULL pointer dereference" occuring with netdev under high busload
  • chardev applications tasks are now unblocked when waiting for an event on a device that has been unplugged (errno = ENODEV)
  • Reworked a few things to detect the spurious interrupt problem with RT patches kernels in PCI code
  • Added two new module parameters ("irqmaxloop" and "irqmaxrmsg") for a better control how much time should pcan pass in each SJA1000 IRQ handler and how many CAN messages it can read from each rx queue (default values are 1 and 8 resp.)
  • Reworked SJA1000 ISR to save time in case of an error condition
  • Fixed in-tree (cross-)compilation issue by using EXTRA_CFLAGS in driver's Makefile instead of _CFLAGS
  • Fixed an old berlios.de link in the user manual

Download Driver 7.12 tar.gz Download Manual (PDF)

Driver Download Version 7.11 (05.05.2014)


  • Fix reading of Kernel version in driver's Makefile, especially when the version number doesn't match x.y.z strict formats. Now, versions like x.y, x.0y, x.y-name, x.y.0z, x.y.z-name are correctly handled
  • Fix errno handling in pcan-settings.c
  • Update documentation with info about linux-can PEAK-System mainline drivers and fix typos and (old) berlios.de references

Download Driver 7.11 tar.gz Download Manual (PDF)

Driver Download Version 7.10 (23.01.2014)


  • Added support for PCAN-PCI Express OEM board
  • Handle USB error like BUSOFF to force application to restart
  • Handle usb core error in read callback (interrupt context) by properly closing the device instead of ignoring the error
  • Remove "PEAK-Systems" ending "s" to MODULE_DESCRIPTION string
  • Tested with 3.10 kernel

Download Driver 7.10 tar.gz Download Manual (PDF)

Driver Download Version 7.9 (15.08.2013)


  • fixes CAN messages with a faulty DLC value greater than 8, and allows them to be processed correctly
  • fixes devices list management (use of mutex lock)
  • fixes display bug of usb can channel number (read /proc/pcan)
  • improves the way diagnostics are returned
  • includes changes concerning the function "create_proc_read_entry" that is deprecated from Kernel v3.9
  • has been tested with Kernel 3.10

Download Driver 7.9 tar.gz Download Manual (PDF)

Version 7.8 (31.01.2013)


  • Support of future Kernel 3.9 linux-can
  • Include support of Kernel 3.7+ in driver/Makefile (version.h moved)
  • All Makefiles now support the DESTDIR variable
  • Driver "make install" doesn't remove vanilla linux-can driver "peak_pci" from memory anymore on Kernels < 3.4 (bug in "peak_pci" leads to Kernel crash); a request to reboot is shown instead
  • Build date and time added in /proc/pcan display
  • Added forgotten HW_ISA_SJA type when creating and removing nodes (udev didn't see device creation/removing)
  • Always force usb_clear_halt() on CAN BUSOFF for USB CAN interfaces (certain small frames could not be transmitted on the bus)

Download Driver 7.8 tar.gz Download Manual (PDF)

Version 7.7 (27.07.2012)


  • Fixed compilation issues with Linux Kernel versions up to 3.5 (Thanks to Oliver Hartkopp)
  • PCAN-USB/USB Pro: Fixed an "undefined symbol" compilation issue (pr_err()) with (very) old Linux Kernels (2.6.22)

Download Driver 7.7 tar.gz Download Manual (PDF)

Version 7.6 (24.05.2012)


  • Fixed compilation issues with Linux Kernel versions up to 3.5 (Thanks to Oliver Hartkopp)
  • PCAN-USB/USB Pro: Fixed an "undefined symbol" compilation issue (pr_err()) with (very) old Linux Kernels (2.6.22)

Download Driver 7.6 tar.gz Download Manual (PDF)

Version 7.5 (21.03.2012)


  • Added support for Kernel v3.x
  • Added support for miniPCIe
  • Fixed wrong usage of /dev/NULL, replaced by /dev/null in driver/Makefile
  • Blacklisted the peak_xxx mainline drivers
  • Adapted usb_reset_endpoint() call to individual kernel versions
  • Fixed potential system crash by changing led timer mechanism to delayed work (PCAN-ExpressCard)
  • Improved endian handling
  • Improved can error handling
  • Handle possible fragmentation of rx messages (PCAN-USB/PCAN-USB Pro)
  • Added support for PCAN-miniPCIe (devid=8) and PCAN-PCI nextgen (devid=3)
  • Fixed potential crash if PCAN-ExpressCard (PCIeC) support is not defined and troubles occur when detecting the SJA1000 controller
  • Fixed potential issue when probing for SJA1000 in PELICAN mode
  • Fixed potential infinite loop waiting for an urb command to be submitted (PCAN-USB/PCAN-USB Pro)
  • Use more accurate time in ms
  • Fixed PCAN-USB FW 2.8 blocking issue
  • Removed cases of potential double BUSOFF transmission (PCAN-USB/PCAN-USB Pro), removed some unuseful delays
  • Added "uninstall" target to Makefiles to properly remove driver from the system

Download Driver 7.5 tar.gz Download Manual (PDF)

Version 7.4 (13.09.2011)


  • Removed any references to selecttest in test/Makefile (fixed 7.3 make error)
  • Fixed PCAN-USB Pro frame lost, when odd number of frames sent in between insmod/rmmod cycle (no problem occurs when the driver was not removed)
  • Added cancellation of calibration message on device/driver removing
  • Changed "CAN OFF" messages handling to channel closing rather than on device removing

Download Driver 7.4 tar.gz Download Manual (PDF)

Version 7.3


  • Better support of some older kernels (2.6.18 for example).
  • Fix - non - support of pc-card even if PCCARD_SUPPORT is defined on command line but kernel is not configured for
  • Fix PCAN-USB adapters minor regression issue (device number display now back in /proc/pcan irq column)
  • Add support for next Linux kernel 3.0
  • Enforce kernel config checking against I2C_ALGO option at compilation time

Download Driver 7.3 tar.gz Download Manual (PDF)

Version 7.2


  • Fixed typo in src/pcan_dongle.c (v7.1) to be able to use the PCAN-Dongle
  • Fixed SJA1000 mutual exclusion in write() functions in certain Low-Speed CPU conditions
  • Support of Linux kernel up to
  • Added a new KERNEL_LOCATION detection based on /lib/modules//build for homebrew kernels

Download Driver 7.2 tar.gz Download Manual (PDF)

Version 7.1


  • Support of the PCAN-USB and PCAN-USB Pro adapters
  • The message timestamps of the PCAN-USB and PCAN-USB Pro CAN interfaces are used to setup the time of incoming CAN frames up to user applications
  • The driver version is now displayed when /proc/pcan is read
  • Support of Kernel 2.6.37
  • Fixed a problem concerning the PCMCIA adapter support
  • Clearing the message filter list is now available
  • Support of dynamic usb minors allocation (kernel config option)

Download Driver 7.1 tar.gz Download Manual (PDF)

Driver Patch 7.1.1


  • Correct typo in pcan_dongle.c (Minor instead of Major) which prevented PCAN-Dongle devices to be opened from application

Download Driver 7.1.1 Patch

Version 6.24


  • PCAN-ExpressCards are now supported. On some systems hot plug support will not work correctly (kernel depending). You have to plug the PCAN-ExpressCard card before the boot-up of your computer and you can unplug the card only if power is down or the PCAN driver was unloaded
  • A bug was removed which prevents to use a fixed major number
  • Support for kernel 2.6.35
  • Fixed a problem with PCAN-PC Cards and kernel 2.6.35
  • Added the missing "()" around KERNEL_LOCATION in driver/makefile

Download Driver 6.24 tar.gz Download Manual (PDF)

Driver Patch

  • Patch to use the peak-linux driver-6.24 with kernel up to 2.6.37
  • Usage: Copy the patch into the peak-linux-driver-6.24 directory
    $ cd peak-linux-driver-6.24
    $ patch –p0 < peak-linux-driver-6.24.3.patch

Download Patch

Version 6.20

  • Re-inserted a startup waiting time of 10 ms for PCAN-USB, to prevent a blocking of the PCAN-USB device during initialization
  • Added a compiler switch to prevent Makefile preprocessor macros to write unwanted temporary files

Download Driver 6.20 tar.gz Download Manual (PDF)

Version 6.19

  • Compiles up to kernel 2.6.34 with support for PCAN-PC Card
  • Searches for the default kernel headers for installed (k)ubuntu, OpenSuSE, and plain vanilla kernels
  • Performance improvement for PCAN-USB with netdev usage
  • Removed a bug in the Makefile which forces a reboot to use udev changes
  • Documentation update, list additional used libraries and how to blacklist the alternative peak-pci driver
  • Added a tool to set a individual device number for PCAN-USB devices
  • Removed the initial delay when starting PCAN-USB

Download Driver 6.19 tar.gz Download Manual (PDF)

Version 6.15

  • Fixes a problem with the PCAN-USB driver (Baudrate fix)
  • New manual

Download Driver 6.15 tar.gz Download Info Version 6.15 (PDF)

Version 6.13

  • By preventing accidental back-to-back writes to the command register of the SJA1000 chip in conjunction with multicore processors write stalls were successfully removed
  • "spin_lock..." macros had become harmonized
  • A compilations bug with the XENOMAI flavor was fixed

Download Driver 6.13 tar.gz Download Info for Version 6.13 (PDF)

Version 6.11

  • Optimized for multicore environments
  • Fixed endian problem for netdev sending SFF frames via USB
  • Removed a bug where a write could return -ENODATA even if the write was successful.
  • Renamed pcan_fifo_near_ful() to pcan_fifo_not_ful().
  • Moved the sense of pcan_fifo_empty().
    Now it returns true (!=0) if the FIFO is empty.
  • Minor bug fixes

Download Driver 6.11 tar.gz Download Info for Version 6.11 (PDF)

Version 6.9b


  • Support up to Kernel 2.6.29
  • Added udev support
  • Minor bug fixes
  • Documentation update

Download Driver 6.9b tar.gz Download Info for Version 6.9 (PDF)

Version 6.7


  • Support up to Kernel 2.6.26
  • Automaticly compiling for Socket CAN Support if the Kernel option "CONFIG_CAN" is set (Kernel 2.6.25 or higher)
  • Big Endian Support for PCAN-USB
  • PCAN-Dongle now works again without Parport-Subsystem
  • Remove some compiling warnings while use newer Kernel Versions
  • Remove some compiling warnings while use XENOMAI support
  • Some smaller fix for RTAI-Skin support

Download Driver 6.7 tar.gz Download Driver 6.7 rpm Download Info for Version 6.x (PDF)

Version 6.5


  • Support up to Kernel 2.6.23
  • Add new features in Error Handling
  • Change type of timestamp to support new Kernel functions
  • Splitting of Realtime and non Realtime Code

Download Driver 6.5 tar.gz Download Driver 6.5 rpm Download Info for Version 6.x (PDF)

Version 6.4


  • Support for 4 channel CAN PCI Interface (OEM boards) added
  • Improved resource locking for PCAN-Dongle
  • Improved resource locking for read and write queues (non-RT)

Download Driver 6.4 tar.gz Download Driver 6.4 rpm Download Info for Version 6.x (PDF)

Version 6.2


  • Fixed a bug which raised overrun messages without overruns
  • Compiles now with kernel 2.6.21
  • Added a USB startup delay to compensate long PCAN-USB startup
  • PCAN-PCCARD: removed all mutexes inside soft-Irq context
  • Reworked parts of atomic_** usage
  • PCAN-ISA: mistakable info message changed
  • Improved stability of XENOMAI integration

Download Driver 6.2 tar.gz Download Driver 6.2 rpm Download Info for Version 6.x (PDF)

Version 6.0


  • Since V6.x the PCAN-Linux driver support the Socket-CAN Interface - look at BerliOS Socket CAN for more information.
  • Add Filters for character device driver.
  • Improved and more compatible to MS-Windows PCAN-Light API error handling.
  • Timestamps with resolution down to microseconds.
  • Totally revised manual

Download Driver 6.0 tar.gz Download Driver 6.0 rpm Download Info for Version 6.x (PDF)

Version 5.3


  • From now on, the driver support Kernel Kernel
  • Some smaller BugFixes

Download Driver 5.3 tar.gz Download Info for Version 5.x (PDF)

Version 5.12

  • From now on, the driver support Kernel 2.6.19
  • BugFixes:
    • Solved problems in PC CARD driver (2 channel mode, LED state etc.)
    • Some compiler problems with different Linux versions solved (2.4 and PCAN PC CARD)

Download Driver 5.12 tar.gz Download Info for Version 5.x (PDF)

Version 5.0


  • From now on, the complete driver will be distributed under the GPL. The 'obfuscated' code for the USB Interface is removed.
  • The Xenomai RealTime Core was inegrated to the driver (at the moment the PCAN-USB and the PCAN-PCC did not support this feature).
  • A new initialisation parameter was added: "bitrate". from now on it is possible to set the default bitrate of the hardware
  • Some smaller BugFixes

Download Driver 5.0 rpm Download Manual 5.0 tar.gz

Version 4.3


  • Add PCAN-PC Card (PCMCIA)
  • Fixed ISA/PC104 shared interrupt problem
  • Added LINUX_CAN_Write_Timeout()
  • Preparation for kernel 2.6.17
  • Adding support for realtime sharing interrupts tested on Dual Channel PCI card
  • Moved usage of module_param_array() to kernels greater than 2.6.13
  • Removed module_param_array() usage problems for kernel 2.6.8-24-smp

Download Driver 4.3 rpm Download Manual 4.3 tar.gz

Version 3.9 to 3.10


  • Correction for RPM make procedure
  • Fixed Bug for USB while have very high bus load
  • Fixed Bug in "Extended Status" function support Makefile for 2.6.0 <= Kernel Version < 2.6.5

Download Driver 3.9 rpm Download Manual 3.9 tar.gz

Version 3.6 (27.07.2004)


  • Fixed "Bad: Scheduling while atomic!" error
  • Add English Documentation to package

Download Driver 3.6 rpm Download Manual 3.6 tar.gz

Version 3.5 (18.05.2004)

  • Update: Linux 2.6 Kernel support

Download Driver 3.5 rpm Download Manual 3.5 tar.gz

Version 3.28


  • Driver work now with YellowDog-Linux (PowerPC)
  • Remove some warnings while compiling with Kernel-Version 2.4.21 (SuSE-9.0)
  • Latencie time were reduced
  • Fixed bug in error handling
  • Changed from CVS to Subversion

Download Driver 3.28 rpm Download Manual 3.28 tar.gz

Version 3.25


  • Replaced GFP_KERNEL with GFP_ATOMIC inside some blocking situations
  • Better support for X86_64 Bit Systems
  • Works now with Kernel 2.6.15

Download Driver 3.25 rpm Download Manual 3.25 tar.gz

Version 3.21 (20.07.2005)


  • Added option to selective compile for PCAN-PCI, PCAN-ISA, PCAN-Dongle or PCAN-USB
  • Prepared for kernels greater and equal than 2.6.12
  • Addes pci_enable_driver() for kernels greater and equal 2.6.10.
  • Removed concurrency between read_proc_mem() and USB read/write.

Download Driver 3.21 rpm Download Manual 3.21 tar.gz

Version 3.17 (14.02.2005)


  • Increased write buffer for hardware revision >= 7 (PCAN-USB)
  • Bug removed when CAN_ERR_QXMTFULL was raised even when no queue was filled (PCAN-USB)

Download Driver 3.17 rpm Download Manual 3.17 tar.gz

Version 3.13 (10.12.2004)


  • Fix Bug while reading PCAN-USB Serial number (OEM)

Download Driver 3.13 rpm Download Manual 3.13 tar.gz

Version 3.12 (06.12.2004)


  • Now conform to kernel 2.6.9 (missing timeout using USB)
  • Workaround for pcan_hw_getSNR() using PCAN-USB

Download Driver 3.12 rpm Download Manual 3.13 tar.gz

Version 3.10 (29.10.2004)


  • Kernel-Version 2.6.9 - Parameter 'timeout' missed in 'struct urb'

Download Driver 3.10 tar.gz

Version 2.8 (28.05.2003)


  • Add rpm Package

Download Driver 2.8 rpm Download Manual 2.8 tar.gz

Version 2.6 (18.03.2003)


  • Add rpm Package

Download Driver 2.6 rpm Download Manual 2.6 tar.gz

Version 2.5 (26.02.2003)


  • Add PCAN-USB Driver - PCAN-Light

Download Driver 2.5 rpm

Version 2.15 (11.03.2004)


  • Fixed bug when using RTR Messages

Download Driver 2.15 rpm Download Manual 2.15 tar.gz

Version 2.14 (20.11.2003)


  • Fixed wrong handling of USB device enumeration in the shared library

Download Driver 2.14 rpm Download Manual 2.14 tar.gz

Version 2.13 (29.10.2003)


  • Fixed rpm Package problem with old kernels (<2.4.18)

Download Driver 2.13 rpm Download Manual 2.13 tar.gz

Version 2.12 (12.08.2003)


  • devfs, kernel-2.5 support, LGPL

Download Driver 2.12 rpm Download Manual 2.12 tar.gz

Version 1.4 to 1.37

  • Version 1.4 (01.10.2002)
  • Update: Now work with SUSE 8.x LINUX - PCAN-Light

Download Driver 1.4 rpm Download Manual 1.4 tar.gz

Version 1.3.7 (01.03.2002)


  • PCAN-Light

Download Driver 1.3.7 rpm