Software Products

CAN Bus Software

and CAN-FD protocol support

Our Controller Area Network (CAN) Device Driver (and CAN-FD) provides a simple application program interface (API) for sending and receiving CAN messages. The CAN device driver abstracts away the technical details and complexity associated with interfacing to the CAN peripheral. This increases the simplicity of your application software, improves your reliability, and shortens your product’s time to market.

Simma Software has been designing CAN and CAN-FD device drivers for 15 years and has deployed numerous drivers into automotive embedded systems. Simma Software’s CAN drivers have been validated to withstand 100% bus utilization on multiple CAN networks simultaneously and have been shown to be 800% faster than other drivers.

CAN Bus Device Driver Details:

  • ISO 11898 compliant
  • MISRA C compliant
  • ANSI C source code
  • Use with or without an RTOS
  • Use with 8, 16, 32, or 64-bit CPU
  • Multiple network support
  • Complete user’s reference manual



CAN, which stands for Controller Area Network, is a high-speed, half-duplex, differential, serial communications protocol invented by Bosch. CAN was designed to be a multi-master network for connecting ECUs in a vehicle. It is now widely used in all light, medium, and heavy duty vehicles. Due to its popularity, it has spread to aircraft, marine, all terrain vehicles, and industrial automation.

CAN Datalink

A CAN bus has a network speed ranging from 33 Kbps to 1 Mbps. CAN uses a non-destructive method for bus arbitration and collision detection. Because bus collisions are non-destructive, it is possible to achieve 100% bus load.

Non-destructive arbitration is achieved by defining a 0 to be electrically active, known as a dominant bit, and a 1 to be electrically passive, known as a recessive bit. A dominant bit, is when CAN_H has a potential 200mV higher than CAN_L. A recessive bit is when the difference is less than 200mV.

CAN Arbitration

When a node transmits, it verifies it’s transmitted value is present on the bus. If the value it is transmitting is not the value currently on the bus, it stops transmitting. Because a 0 is dominant, if a 0 and 1 are transmitted by two different controllers at the same time, the bus will always be 0. When the 1 sending node detects the 0, instead of its sent value of 1, it immediately stops it’s transmission with the 0 sending node continuing.

CAN Applications

CAN is rarely used without a higher level protocol specifying how information is exchanged. Light duty vehicles use ISO 15765-4, while medium and heavy duty use SAE J1939. The marine industry uses NMEA 2000, which is based on J1939, and Agricultural equipment uses ISO 11783, which is also based on J1939. Industrial automation applications, like robotic arms, use DeviceNet or CANopen software (CiA 301).

CAN Frame

A frame consists primarily of the CAN identifier, data length code, and data field.

The ID represents the priority of the message.

The data length code is a 4-bit value from 0 to 8 indicating how many bytes are present in the data field.

The data field is the actual data for that CAN frame.



Our CAN device drivers, ssCAN, are hard real-time drivers with low interrupt latency and are written in the ANSI C programming language. They are completely interrupt driven and feature configurable FIFO sizes. Our CAN device drivers implement all target specific details for a given microcontroller.

Together ssCAN and one of our high level protocols form a complete ported system allowing customers to be up and running almost immediately. 

Our ssCAN device driver has been ported to over 40 different microcontrollers.

See our full list of available ports.

Texas Instruments
  • Texas Instruments RM4x
  • Texas Instruments LM3Sx
  • Texas Instruments TMS470x
  • Texas Instruments TMS470Mx
  • Texas Instruments TMS570x
  • Texas Instruments Tiva TM4C
  • Texas Instruments F28M35xx
  • Texas Instruments TMS320F280x
  • Texas Instruments TMS320F281x
  • Texas Instruments TMS320F282x
  • Texas Instruments TMS320F283x
  • Texas Instruments AM3x – Sitara
  • Texas Instruments DM8x – DaVinci
  • Texas Instruments MSPM0
  • Texas Instruments MSPM0G
  • Microchip PIC18
  • Microchip PIC24
  • Microchip PIC32
  • Microchip dsPIC30
  • Microchip dsPIC33F
  • Microchip dsPIC33E
  • Microchip dsPIC33CK
  • Microchip MCP2515
  • STMicro ST7
  • STMicro ST10
  • STMicro STR7
  • STMicro STM8
  • STMicro STM32L4x
  • STMicro STM32G0x
  • STMicro STM32G4x
  • STMicro STM32F0x
  • STMicro STM32F1x
  • STMicro STM32F2x
  • STMicro STM32F3x
  • STMicro STM32F4x
  • STMicro STM32F7x
  • NXP LPC11xx
  • NXP LPC17xx
  • NXP LPC21xx
  • NXP LPC23xx
  • NXP SJA1000
  • NXP HCS08
  • NXP HCS12
  • NXP HCS12X
  • NXP MC68xxx
  • NXP MCF5xxx
  • NXP MPC5xxx
  • NXP Kinetis Kxx
  • Linux
  • Windows XP/7/Embedded
  • Atmel SAM7
  • Atmel AT90
  • Infineon C16x
  • Infineon TriCore
  • Intel 82527
  • Silicon Labs C8051
  • Xilinx LogiCORE AXI (axi_can)

Talk to us about CANopen needs

Please contact us if you are interested in a port or device driver for a hardware platform that is not listed.

Experience Summary






Device Drivers




& DSPs


Real Time Operating Systems

Our Customers

Customer Logos

Our Partners

TI Partner Logo Infineon Partner Logo Microchip Partner Logo ST Partner Logo NXP Partner Logo
    Your Cart
    Your cart is emptyReturn to Store