| CMSIS-Driver Peripheral Interface for Middleware and Application Code |

Loading...
Searching...
No Matches
Overview

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.

# Benefits

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)