CMSIS: Cortex Microcontroller Software
Interface Standard in Embedded Systems
The Cortex Microcontroller Software Interface Standard (CMSIS) is a vendor-
independent hardware abstraction layer for Arm® Cortex®-M based processors. It provides a
standardized software framework that simplifies software reuse, reduces the learning curve
for developers, and accelerates the development of embedded applications 1 .
1. Overview and Purpose
CMSIS was developed by Arm in collaboration with various silicon and software vendors to
address the fragmentation in the microcontroller market. Before CMSIS, each silicon vendor
provided their own proprietary hardware abstraction layers, making it difficult to port code
between different microcontrollers, even if they used the same Arm core.
CMSIS defines generic tool interfaces and enables consistent device support by providing
simple software interfaces to the processor and peripherals 2 . It is designed to be
lightweight, avoiding unnecessary overhead while ensuring that the specific features of
different silicon vendors can still be utilized.
Feature Description
Vendor Independence Works across different silicon vendors (e.g.,
ST, NXP, TI) using Arm Cortex-M cores.
Compiler Support Compatible with major compilers like Arm
Compiler (AC5/AC6), GCC, and IAR.
Standardization Provides a consistent API for RTOS,
middleware, and peripheral access.
Supports a wide range of devices from entry-
Scalability level Cortex-M0 to high-performance Cortex-
M85.
2. CMSIS Architecture Diagram
The following diagram illustrates how CMSIS sits between the user application and the
physical hardware, providing various layers of abstraction.
3. Key Components of CMSIS
CMSIS is not a single library but a collection of components, each serving a specific purpose
in the embedded software stack 1 3 :
3.1 CMSIS-Core
This is the most fundamental component. It provides the interface to the Cortex-M
processor core itself. It includes:
• Standardized register definitions for the core peripherals (NVIC, SysTick, MPU).
• Intrinsic functions for specialized CPU instructions (e.g., __Enable_IRQ() , __WFI() ).
• Startup and initialization code templates.
3.2 CMSIS-RTOS (RTOS2)
A standardized API for Real-Time Operating Systems. It allows developers to write
middleware and applications that are independent of the underlying RTOS. If you change
the RTOS (e.g., from FreeRTOS to RTX), the application code remains largely unchanged 2 .
3.3 CMSIS-DSP and CMSIS-NN
• CMSIS-DSP: A collection of over 60 mathematical functions (filters, transforms, matrix
math) optimized for Cortex-M processors.
• CMSIS-NN: A collection of efficient neural network kernels designed to minimize the
memory footprint and maximize performance on Arm cores 4 .
3.4 CMSIS-Driver
Defines generic peripheral driver interfaces for middleware components (like TCP/IP stacks
or File Systems). It provides a standard way to interface with common peripherals like
Ethernet, USB, UART, and SPI.
4. Benefits for Developers
1. Reduced Learning Curve: Developers only need to learn one set of APIs to work with
various Cortex-M microcontrollers.
2. Code Portability: Software components and middleware can be easily moved between
different devices and vendors.
3. Optimized Performance: Components like CMSIS-DSP and CMSIS-NN are highly
optimized by Arm engineers to get the best performance out of the hardware.
4. Faster Time-to-Market: The availability of standardized templates and validated
libraries significantly speeds up the initial phases of project development.
5. References
[1] Arm - Common Microcontroller Software Interface Standard (CMSIS)
[2] Arm Software - CMSIS 6 Introduction
[3] Arm Developer - Getting Started with CMSIS-Core
[4] GitHub - CMSIS-NN Software Library