CANopenNode
Device Support

CANopenNode can run on many different devices. There are possible many different implementations on many different hardware, with many different development tools, by many different developers. It is not possible for single project maintainer to keep all the hardware interfaces updated. For that reason all hardware specific files are not part of the CANopenNode project.

It is necessary to implement interface to specific hardware. Interface to Linux socketCAN is part of this projects. Interfaces to other controllers are separate projects. There are interfaces to: Zephyr RTOS, PIC, Mbed-os RTOS + STM32, NXP, etc.

Note for device driver contributors

Most up-to-date implementations of CANopenNode are: socketCAN for Linux, which is part of CANopenNode and CANopenPIC for PIC32 microcontroller (bare-metal). Those can be used for reference. There is also an example directory, which doesn't include specific device interface. It should compile on any system and can be used as a template. Device interface is documented in common CO_driver.h file.

There are many advantages of sharing the base code such as this. For the driver developers, who wish to share and cooperate, I recommend the following approach:

  1. Make own git repo for the Device specific demo project on the Github or somewhere.
  2. Add https://github.com/CANopenNode/CANopenNode into your project (or at side of your project). For example, include it in your project as a git submodule: git submodule add https://github.com/CANopenNode/CANopenNode
  3. Add specific driver and other files.
  4. Add description of new device into this file (deviceSupport.md) and make a pull request to CANopenNode. Alternatively create an issue for new device on https://github.com/CANopenNode/CANopenNode/issues.
  5. Make a demo folder, which contains project files, etc., necessary to run the demo.
  6. Write a good README.md file, where you describe your project, specify demo board, tools used, etc.

Linux

  • CANopenNode integration with Linux socketCAN with master command interface. SocketCAN is part of the Linux kernel.
  • https://github.com/CANopenNode/CANopenNode (this project).
  • CANopenNode version: (will be v2.0)
  • Status: stable
  • Features: OD storage, error counters, master (SDO client, LSS master, NMT master)
  • Systems: Linux PC, Raspberry PI, etc.
  • Development tools: Linux
  • Information updated 2020-02-14

PIC32, dsPIC30, dsPIC33

  • CANopenNode integration with 16 and 32 bit PIC microcontrollers from Microchip.
  • https://github.com/CANopenNode/CANopenPIC
  • CANopenNode version: (near v2.0)
  • Status: stable
  • Features: OD storage, SDO client demo for PIC32, error counters
  • Development tools: MPLAB X
  • Demo hardware: Explorer 16 from Microchip
  • Information updated 2020-02-14

Zephyr RTOS

Mbed-os RTOS + STM32 (F091RC, L496ZG)

Kinetis K20 (NXP Arm)

S32DS (NXP S32 Design studio for Arm or Powerpc)

Other

Other old versions