CANopenNode
CANopen protocol stack
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, Analog Devices Inc. (ADI), Mbed-os RTOS + STM32, NXP, etc.

Note for device driver contributors

Most up-to-date implementations of CANopenNode are: CANopenLinux 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. Write a good README.md file, where you describe your project, specify demo board, tools used, etc.
  5. Optionally prepare a demoDevice in CANopenDemo repository and run the tests.
  6. Share your work: 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.
  7. Offer your work for inclusion under the CANopenNode project and become its developer. It will increase code quality and functionality.

Linux

  • CANopenNode integration with Linux socketCAN with master command interface. SocketCAN is part of the Linux kernel.
  • https://github.com/CANopenNode/CANopenLinux.
  • CANopenNode version: (v4.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 2021-05-21

PIC32, dsPIC30, dsPIC33

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

<a href="https://www.analog.com">Analog Devices Inc</a>: MAX32662, MAX32690

  • CANopenNode integration with Analog Devices MAX32662 and MAX32690 microcontrollers.
  • https://github.com/Analog-Devices-MSDK/CANopenADI
  • CANopenNode version: (v4.0)
  • Status: seems to be stable
  • Features: LED indicators, error counters
  • Development tools: Maxim Micros SDK
  • Demo hardware: MAX32662-EVKIT and MAX32690-EVKIT
  • Information updated 2023-02-17

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