Peripheral Interface for Middleware and Application Code
No Matches

CMSIS-Driver specifies generic driver interfaces for peripherals commonly used in embedded systems with Armยฎ Cortexยฎ processors.

User applications and middleware components can control such peripherals using the CMSIS-Driver API and so achieve better code reuse and simpler integration in various ecosystems. The API is designed to be generic and independent of a specific RTOS making it reusable across a wide range of supported microcontroller devices.

The following block diagram shows an exemplary set up for various drivers.

Example use of CMSIS-Drivers with Middleware

The standard CMSIS-Driver interfaces connect microcontroller peripherals with middleware that implements communication stacks, file system and graphic user interfaces.


Using CMSIS-Driver provides great benefits to the embedded developers and software vendors:

  • The CMSIS-Driver API covers many common peripherals present in modern embedded systems for sensor interaction, data storage, communication and graphics.
  • The unified API follows the similar design principles across all peripherals. This reduces learning efforts and increases developers' productivity. See Theory of Operation for details.
  • Driver templates files provide code sceletons that help to get started with implementations for specific peripherals. See CMSIS-Driver Files.
  • Support for multiple driver instances with Access Struct.
  • Driver-Validation Suite provides a set of tests to verify compatibility to CMSIS-Driver API definitions.

Covered Interfaces

CMSIS-Driver APIs are defined for the following driver interfaces:

  • CAN: Interface to CAN bus peripheral.
  • Ethernet: Interface to Ethernet MAC and PHY peripheral.
  • I2C: Multi-master Serial Single-Ended Bus interface driver.
  • MCI: Memory Card Interface for SD/MMC memory.
  • NAND: NAND Flash Memory interface driver.
  • Flash: Flash Memory interface driver.
  • SAI: Serial audio interface driver (I2s, PCM, AC'97, TDM, MSB/LSB Justified).
  • SPI: Serial Peripheral Interface Bus driver.
  • Storage: Storage device interface driver.
  • USART: Universal Synchronous and Asynchronous Receiver/Transmitter interface driver.
  • USB: Interface driver for USB Host and USB Device communication.
  • GPIO: General-purpose Input/Output driver.
  • VIO: API for virtual I/Os (VIO).
  • WiFi: Interface driver for wireless communication.

A list of current CMSIS-Driver implementations is available here.

Access to CMSIS-Driver

CMSIS-Driver intefaces are actively maintained in the CMSIS 6 GitHub repository and released as part of the CMSIS Software Pack.

The CMSIS Software Pack publishes the API Interface under the Component Class CMSIS Driver with header files and a documentation. These header files are the reference for the implementation of the standardized peripheral driver interfaces.

These implementations are published typically in the Device Family Pack of a related microcontroller family under the Component Class CMSIS Driver. A Device Family Pack may contain additional interfaces in the Component Class Device to extend the standard Peripheral Drivers covered by this CMSIS-Driver specification with additional device specific interfaces for example for Memory BUS, GPIO, or DMA.

The following directories and files relevant to CMSIS-Driver are present in the ARM::CMSIS Pack:

Directory Content
๐Ÿ“‚ CMSIS CMSIS Base software components folder
โ”ฃ ๐Ÿ“‚ Documentation/html/Driver A local copy of this CMSIS-Driver documentation
โ”ฃ ๐Ÿ“‚ Driver Directory with CMSIS-Driver component, see CMSIS-Driver Files
   โ”ฃ ๐Ÿ“‚ DriverTemplates Driver Template files (Driver_interface.c)
   โ”ฃ ๐Ÿ“‚ Include API header files (Driver_interface.h, Driver_Common.h)
   โ”— ๐Ÿ“‚ VIO Implementation of virtual Input/Output interface (VIO)