Supporting CAN FD and the non-ISO version

09/10/2018 by Kvaser
Controller Area Network (CAN) Image, Connected Car

CAN FD interfaces and data loggers come in two variants: products that implement Bosch’s original protocol, which are referred to as ‘non-ISO CAN FD’, and those that comply with ISO standard 11898-2:2015, referred to as ‘CAN FD’. The difference between the protocols is that non-ISO CAN FD has no stuff-bit counter bits in the CAN-frame. To increase the robustness of the CRC, CAN FD adds a stuff-bit counter value after the data and before the CRC-segment. This reduces the probability of errors not detected by the CRC-calculation. Some silicon was already available to buy before the final ISO 11898-1 standard was settled, which is now classed as ‘non-ISO CAN FD’. The same issue was experienced by various CAN tool suppliers. 

Whomever your CAN tool supplier, one question to ask is whether they provide support for both CAN FD and non-ISO CAN FD, if that is important to you. Check whether the supplier’s API supports both variants of CAN FD and be aware that you may need to adjust the hardware or the software to handle the protocol you use in your CAN-system.

Kvaser supports CAN FD and non-ISO CAN FD (as tested against the Bosch reference model) in our hardware and software products. In CANlib, Kvaser’s free-of-charge SDK, both CAN FD and Non-ISO CAN FD can be configured in just a few simple steps. No separate API or driver is required: simply download Kvaser CANlib SDK and you’ll find this feature as part of the standard download. CANlib works across all Kvaser hardware platforms and includes virtual hardware. Free and with a file size of just 60MB, the SDK compares favourably with competitor drivers and APIs – yet another reason to choose Kvaser! 

Switching between CAN FD and Non-ISO CAN FD

Switching between CAN FD and Non-ISO CAN FD is simple within Kvaser’s CANlib API. During the API function call canOpenChannel(), in which a CAN channel is opened and a handle returned that is used in subsequent calls to CANlib, you will need to identify the flags as follows:

#define  canOPEN_CAN_FD   0x0400 

#define  canOPEN_CAN_FD_NONISO   0x0800

All you need to do next is to set the correct bitrate, which is identical for CAN FD and non-ISO CAN FD. You can use our Bit Timing Calculator here.

A word of note regarding non-ISO CAN FD: Kvaser’s non-ISO CAN FD implementation has been tested against the Bosch reference model. This should be true for all other non-ISO CAN FD controllers. However, it is possible that two different non-ISO CAN FD controllers don’t communicate with each other in all conditions, as non-ISO CAN FD controllers have not been validated against a standard such as ISO 16845-1:2016. 

Find out more about CAN FD