News

09/10/2018 by Kvaser

Supporting CAN FD and the non-ISO version

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