Skip to main content
CMSIS v6 component architecture diagram, Core, DSP, NN, RTOS2, Pack, on an Indian Cortex-M development bench with Keil Studio open

CMSIS v6: The Complete Guide for Indian Cortex-M Embedded Teams

GSAS Engineering · · 12 min read

If you have written firmware for a Cortex-M microcontroller in the last fifteen years, whether it was an STM32 running a motor controller in a Pune factory, an NXP LPC in a Chennai power-electronics lab, a Nordic nRF for a Bengaluru wearable, or an Infineon PSoC in a Hyderabad industrial gateway, you have used CMSIS, whether you noticed it or not. Every stm32f4xx.h, every SysTick_Handler, every __NVIC_EnableIRQ, every arm_fir_f32 call traces back to a single Arm-maintained open standard: the Cortex Microcontroller Software Interface Standard. CMSIS v6 is the current major release, and it is the reason an Indian firmware team can move application code from one vendor’s silicon to another without rewriting the foundation. This guide is the definitive India-focused reference for CMSIS v6, what it is, what each component does, how the pack ecosystem works, and how teams adopting the commercial Arm Keil MDK toolchain consume CMSIS through Keil Studio and VS Code in production development.

What Is CMSIS?

CMSIS, the Cortex Microcontroller Software Interface Standard, is a vendor-neutral hardware abstraction layer, software framework, and packaging format for every Cortex-M processor on the market. Arm created CMSIS in 2008 with a simple goal: make it possible for firmware engineers to switch MCU vendors without rewriting the parts of their code that talk directly to the core processor, its peripherals, and the operating system. Before CMSIS, every silicon vendor shipped a slightly different header file for NVIC access, a different name for the SysTick handler, a different macro for enabling interrupts, and a different structure for CMSIS-less DSP math. After CMSIS, these things became standardised, NVIC_EnableIRQ() is NVIC_EnableIRQ() on every Cortex-M, and an FFT written against arm_cfft_f32() runs identically on silicon from STMicroelectronics, NXP, Nordic, Renesas, Silicon Labs, Infineon, Microchip, and dozens of other vendors.

CMSIS is maintained as open source on GitHub under the ARM-software/CMSIS_6 repository with an Apache-2.0 licence. That matters for Indian teams in regulated industries, medical, defence, avionics, automotive, because the licence is permissive, the source is auditable, and the standard is not controlled by any single silicon vendor. CMSIS is the closest thing the Cortex-M ecosystem has to a public infrastructure layer, and it has kept the ecosystem portable across fifteen years of processor launches, from Cortex-M0 through Cortex-M85 with Helium.

The value to an Indian embedded team is practical: a sensor-fusion library written against CMSIS-DSP (also written as “cmsis dsp”) runs on the Cortex-M4F in your current prototype and on the Cortex-M55 in your next one. A task scheduler written against CMSIS-RTOS2 (“cmsis rtos2”) runs on Keil RTX5, on FreeRTOS, and on Zephyr without code changes. A peripheral driver written against CMSIS-Driver works on any silicon whose vendor has shipped a conformant implementation. Portability is the product. For an Indian Cortex-M team, the “cmsis india” search that brought you here, the entire value proposition is that one standard, one toolchain, and one vendor-neutral header set carries a product from prototype to production.

CMSIS v6: What Changed in the Latest Version

CMSIS v6 is the current major release of the standard, and it represents the most significant refactor of CMSIS since version 5 launched in 2017. The headline change is structural: CMSIS v6 splits the monolithic CMSIS 5 repository into a set of modular, independently versioned sub-repositories, CMSIS_6 for the headline meta-repo, plus separate repositories for CMSIS-DSP, CMSIS-NN, CMSIS-RTX, CMSIS-View, CMSIS-Stream, CMSIS-Driver, CMSIS-Toolbox, and the pack ecosystem tooling. Each sub-project has its own release cadence, its own issue tracker, and its own CI, which means CMSIS-DSP can ship a Helium optimisation without waiting for a full CMSIS release train.

The second major change is the build system. CMSIS v6 is CMake-native. Projects are described using a lightweight YAML schema (csolution / cproject / clayer), which the CMSIS-Toolbox cbuild front-end compiles to CMake targets. Any CMake-capable toolchain, Arm Compiler 6, GCC, LLVM/Clang, can consume the result. This is the change that makes CMSIS projects buildable from the command line, from CI, from VS Code with Keil Studio, and from Arm Virtual Hardware in the cloud without IDE lock-in.

The third change is editor integration. CMSIS v6 is the first release designed around VS Code as a first-class development surface. The Arm Keil Studio Pack for VS Code, which works together with CMSIS-Toolbox, provides pack management, device selection, debug, RTOS awareness, and Event Recorder viewing inside VS Code. The classical Keil µVision IDE continues to ship as part of MDK for teams who prefer it, but CMSIS v6 removes the requirement.

For teams currently on CMSIS 5, the migration story is pragmatic. CMSIS v6 maintains API compatibility for the headers an application directly includes, core_cm4.h, cmsis_gcc.h, arm_math.h, cmsis_os2.h. What changes is the project file layout, the build recipe, and the pack manifest. Most migration effort is in the build system, not the source code. Indian teams who are moving between major MDK versions should plan for a project re-scaffold, not a rewrite.

CMSIS v6 change areaCMSIS 5 behaviourCMSIS v6 behaviour
Repository structureSingle monolithic repoModular sub-repos per component
Build systemµVision projects + AC6 IDECMake-native, cbuild + csolution YAML
EditorµVision primaryVS Code + Keil Studio first-class
Pack managerPack Installer in µVisioncpackget CLI + Pack Installer in Keil Studio
Release cadenceMonolithic releasesIndependent per-component versioning
CI integrationManual scriptscsolution YAML builds directly in CI

CMSIS-Core for Cortex-M

CMSIS-Core (the cmsis core component) is the Cortex-M hardware abstraction layer, the part of CMSIS every other part depends on. It defines one standard way to talk to the processor core, the interrupt controller, the system timer, the MPU, and the low-level machine intrinsics. When a silicon vendor ships a device header like stm32f4xx.h, nrf52840.h, or LPC17xx.h, that header includes a CMSIS-Core header like core_cm4.h or core_cm33.h, and inherits the entire CMSIS-Core API for free.

Concretely, CMSIS-Core gives you:

  • System initialisation. A standard SystemInit() entry point called from the reset handler, a standard SystemCoreClock global, and a standard startup file layout (vector table, default handlers, reset handler, __main entry).
  • Interrupt control. NVIC_EnableIRQ, NVIC_DisableIRQ, NVIC_SetPriority, NVIC_GetPendingIRQ, __enable_irq, __disable_irq, __WFI, __WFE. These calls are bit-identical across every Cortex-M.
  • SysTick. SysTick_Config() to bring up the system timer for RTOS tick generation or a periodic 1 kHz heartbeat.
  • System Control Block. SCB->VTOR, SCB->AIRCR, SCB->CCR for vector relocation, reset, and cache control.
  • Machine intrinsics. __CLZ, __REV, __LDREXW, __STREXW, __DMB, __DSB, __ISB, and the full set of saturating arithmetic intrinsics that a compiler would otherwise translate to inline assembly.
  • Cache and MPU helpers. SCB_EnableICache, SCB_EnableDCache, ARM_MPU_Enable, ARM_MPU_SetRegion, essential for Cortex-M7 and Cortex-M33 deployments.

Every Indian firmware engineer who has written a Cortex-M application has used CMSIS-Core, usually without realising it. Understanding that layer directly, what is happening under HAL_NVIC_EnableIRQ(), which is usually a pass-through to NVIC_EnableIRQ(), is the difference between a firmware engineer who can debug an interrupt priority inversion and one who cannot. For a deeper look at the Cortex-M4 specifically, see our Cortex-M4 architecture deep dive.

CMSIS-DSP for Signal Processing

CMSIS-DSP (cmsis dsp) is Arm’s hand-optimised signal processing library for Cortex-M. It is the library Indian motor-control, audio, industrial-sensing, sensor-fusion, and medical-signal teams use instead of rolling their own fixed-point math. CMSIS-DSP ships tested implementations of the operations embedded DSP engineers actually need:

  • Transforms. FFT (complex and real, radix-2 / radix-4 / mixed-radix), DCT, Hilbert transform.
  • Filters. FIR, IIR biquad cascade, decimation, interpolation, adaptive filters (LMS, NLMS).
  • Matrix math. Initialisation, add, subtract, multiply, transpose, scale, inverse.
  • Controller functions. PID, sine-cosine table lookup, Park/Clarke/inverse-Park transforms, the building blocks of field-oriented motor control.
  • Statistics. Mean, variance, standard deviation, RMS, min/max, entropy, correlation.
  • Complex math. Complex magnitude, complex dot product, complex-by-complex multiply.
  • Support functions. Copy, fill, q7/q15/q31/f16/f32 format conversions.

The library ships in multiple numeric formats, q7, q15, q31, f16, f32, f64, so a Cortex-M4F motor-control team uses the f32 path, while a low-power audio team on a Cortex-M0+ uses q15 and stays within the limits of a core without a hardware FPU. On Cortex-M7, CMSIS-DSP uses the double-precision FPU. On Cortex-M55 and M85 it uses Helium (the Arm M-Profile Vector Extension), which delivers several times the throughput of the baseline v7-M path on the same workload, Indian teams evaluating Cortex-M55 migrations should consult Arm’s published FFT and convolution benchmarks directly.

For an Indian industrial-IoT team, CMSIS-DSP replaces an entire class of roll-your-own libraries. Instead of porting a C99 reference FFT from a textbook, you call arm_cfft_f32() and move on. Instead of debugging saturation in a hand-written IIR, you initialise an arm_biquad_casd_df1_inst_f32 and call arm_biquad_cascade_df1_f32(). The time saved in the first sprint pays for the commercial toolchain licence that ships the qualified binary.

CMSIS-NN for Neural Network Kernels on Cortex-M

CMSIS-NN (cmsis nn) is Arm’s library of quantised int8 and int16 neural network kernels, tuned for Cortex-M. It is the kernel layer underneath TensorFlow Lite Micro, Apache TVM’s microTVM, and the Ethos-U Vela compiler. When an Indian edge-AI team runs a quantised MobileNet or a keyword-spotting model on a Cortex-M55 without an Ethos-U present, the convolution, depthwise-convolution, fully-connected, pooling, activation, and softmax operations all run through CMSIS-NN.

CMSIS-NN’s design point is simple: every kernel uses the best available instruction set for the target core. On Cortex-M0+ and M3, kernels use plain integer math. On Cortex-M4 and M7, they use the DSP extension (SMLAD, SMUAD, QADD, SIMD over 32-bit registers). On Cortex-M55 and M85, they use Helium’s 128-bit vector instructions for dense linear-algebra hot loops. Arm has published results showing Helium delivering roughly a 5× speedup on CMSIS-NN convolution hot loops relative to the baseline v7-M DSP path, the exact ratio depends on kernel shape and quantisation scheme, and teams running pre-production benchmarks on Cortex-M55 silicon should measure their own workload rather than trust a single headline number.

CMSIS-NN matters to Indian teams because it is the reason TensorFlow Lite Micro is fast on Cortex-M. TFLM on its own is a reference interpreter; when linked against CMSIS-NN, its operator dispatcher routes supported operators to the CMSIS-NN implementation and performance jumps. The same is true for microTVM-generated code. For a Bengaluru or Hyderabad edge-AI startup picking a target MCU, “does CMSIS-NN support my quantisation scheme on this core?” often decides the architecture.

CMSIS-RTOS2: The RTOS Abstraction Layer

CMSIS-RTOS2 (cmsis rtos2) is the version 2 revision of the CMSIS RTOS API, a thin, standardised C API for threads, mutexes, semaphores, message queues, memory pools, timers, and event flags. If you write against cmsis_os2.h, your application runs on any RTOS with a conformant CMSIS-RTOS2 adapter.

The reference implementation is Keil RTX5, Arm’s own deterministic real-time kernel, which ships as part of Keil MDK and is also available as a CMSIS pack. RTX5 is small (single-digit kilobytes), fully tested, priority-based preemptive, and has full RTOS-aware debug integration in µVision and Keil Studio. For safety-relevant products, Arm publishes a qualified variant of RTX5 alongside qualified Arm Compiler 6.

RTX5 is not the only option. FreeRTOS ships a CMSIS-RTOS2 adapter and so does Zephyr. A common Indian pattern is to prototype on RTX5 using the MDK pack installer, write the application against cmsis_os2.h, and then move the same application to FreeRTOS on a production board without touching application code. That portability is CMSIS-RTOS2’s entire reason to exist. The practical day-to-day surface is small, osThreadNew, osDelay, osMutexAcquire/Release, osSemaphoreAcquire/Release, osMessageQueuePut/Get, osEventFlagsWait, osTimerStart, and every call is portable. For the commercial middleware on top (file system, USB, TCP/IP, TLS) see our deep dive on the MDK Middleware CMSIS industrial IoT stack.

CMSIS-Driver and Peripheral Portability

CMSIS-Driver is the vendor-neutral peripheral driver API, a single standard C interface for UART, SPI, I2C, USB host and device, Ethernet MAC/PHY, MCI (SD card), SAI (audio), CAN, Flash, NAND, and Wi-Fi. Each driver is a structure of function pointers (ARM_DRIVER_USART, ARM_DRIVER_SPI, ARM_DRIVER_I2C) with standard operations (Initialize, PowerControl, Send, Receive, Transfer, Control).

Not every silicon vendor implements every CMSIS-Driver. Coverage is strongest on NXP, STMicroelectronics, Nordic, Renesas, and Infineon parts for the middleware-critical peripherals, SPI, I2C, UART, USART, USB, Ethernet. When a vendor does ship a conformant CMSIS-Driver, middleware written against ARM_DRIVER_USART (a Modbus RTU stack, a cellular modem driver) moves from one vendor’s MCU to another by swapping the driver instance, without touching middleware source. For Indian teams building long-lived industrial products, where the BOM may change silicon vendors across production runs because of supply-chain realities, CMSIS-Driver is the insurance policy.

CMSIS-Pack: The 10,000 Device Ecosystem

CMSIS-Pack (cmsis pack) is the packaging format that ties the entire CMSIS ecosystem together. A CMSIS Pack (.pack file) is a zip archive with a .pdsc XML manifest, bundling everything an IDE needs to support a device family or middleware component:

  • Device startup files, linker scripts, and system initialisation.
  • SVD files describing every peripheral register on every supported part.
  • Flash algorithms for programming the device from the debugger.
  • Middleware source code and prebuilt libraries.
  • Example projects, documentation, and dependencies on other packs.

The pack ecosystem is why Keil MDK, Keil Studio, and most third-party Cortex-M IDEs can claim support for effectively every Cortex-M device on the market. Per Arm’s CMSIS Overview (Feb 2026), the pack ecosystem covers 11,000+ unique devices from 45 silicon partners, delivered through 1,100+ packs from 81+ pack vendors and 500+ development boards. That is the commercial Cortex-M ecosystem in one sentence.

Pack categoryExample packsWhat they deliver
Device family packsKeil.STM32F4xx_DFP, NXP.LPC1700_DFP, NordicSemiconductor.nRF_DeviceFamilyPackStartup files, linker scripts, SVD, flash algorithms
CMSIS core packsArm.CMSIS, Arm.CMSIS-DSP, Arm.CMSIS-NNHeaders, libraries, toolchain bindings
Middleware packsKeil.MDK-Middleware, Keil.ARM_CompilerUSB, TCP/IP, file system, compiler libs
RTOS packsArm.CMSIS-RTX, Keil.CMSIS-FreeRTOSRTOS implementation + CMSIS-RTOS2 wrapper
Board support packsST.B-L475E-IOT01A_BSP, NXP.EVKB-IMXRT1050_BSPBoard-level config, BSP drivers
Security packsArm.PSA-Crypto, mbedTLSCryptographic libraries, PSA APIs

Packs are published on keil.arm.com/packs/ and mirrored on github.com/Open-CMSIS-Pack for the open-source components. In CMSIS v6, the cpackget CLI and the Keil Studio pack manager both consume the same pack index, the same pack is installed once and reused across µVision, Keil Studio, and command-line CMSIS-Toolbox projects.

CMSIS-SVD, Zone, and View

Three smaller CMSIS components matter to Indian teams doing serious Cortex-M development.

CMSIS-SVD (System View Description) is an XML format describing every peripheral on a device, every register, every bit-field, every reset value, every access policy. SVD is what makes the “peripheral view” work in a Cortex-M debugger. When you open Keil µVision, Keil Studio, Arm Development Studio, or SEGGER Ozone against an STM32 part and see GPIOA->MODER with every 2-bit field named, that view is generated from the SVD file in the device family pack. SVD is also consumed by third-party tooling, svd2rust, for example, generates a Rust crate for any Cortex-M part from its SVD file. Every device family pack ships SVD files for every supported device, which is why debugger support is effectively universal across the Cortex-M ecosystem.

CMSIS-Zone is the memory partitioning and TrustZone configuration tool. For Indian teams building a Cortex-M23, M33, M55, or M85 product with TrustZone-M, typical for secure-boot, attestation, or PSA-compliant designs, CMSIS-Zone lets an architect describe the secure/non-secure memory split, MPU regions, peripheral assignments, and SAU configuration in a structured way, then generates the linker scripts and C source that enforce the split at runtime. Zone is the difference between a team that hand-edits two parallel linker scripts and one with a single source of truth for memory layout.

CMSIS-View (Event Recorder) is a lightweight event logging API. An application calls EventRecord2() with an event ID and up to two data words, and the library writes the event to a RAM ring buffer. A debugger, µVision’s Event Recorder, Keil Studio’s Event Viewer, reads the ring buffer in real time and shows timestamped events as they happen, without a UART, without consuming pins, and without the latency of printf over semihosting. CMSIS-View pairs naturally with SEGGER SystemView for deeper RTOS-level visibility, but on its own it is enough to trace application-level events in the field.

How Indian Cortex-M Teams Consume CMSIS

An Indian embedded team adopting CMSIS v6 in 2025-26 does not install CMSIS directly. They install a commercial toolchain, most commonly Arm Keil MDK Professional, and CMSIS comes with it. The workflow:

  1. Install MDK and the Keil Studio Pack for VS Code. MDK brings Arm Compiler 6, µVision, RTX5, MDK-Middleware, and the pack installer. The Keil Studio extension brings the same capabilities into VS Code. For teams standardising on VS Code, see our Keil Studio VS Code modern workflow guide.
  2. Select a device. The pack installer pulls the device family pack (e.g. Keil.STM32H7xx_DFP) and every CMSIS dependency (Arm.CMSIS, Arm.CMSIS-DSP, Arm.CMSIS-RTX).
  3. Scaffold a project. Either a µVision project or a CMSIS-Toolbox csolution YAML. Both produce the same artefacts.
  4. Add components. CMSIS-Core is automatic. CMSIS-DSP, CMSIS-NN, and CMSIS-RTX are pulled in as pack components. MDK-Middleware (USB, TCP/IP, file system, TLS) the same way.
  5. Write the application. Against cmsis_os2.h, arm_math.h, arm_nnfunctions.h, and CMSIS-Driver headers for peripheral work.
  6. Debug. Through a ULINK or J-Link probe, with RTOS-aware debug showing RTX5 threads, peripheral view driven by SVD, and Event Recorder showing application events in real time.
  7. Ship. Arm Compiler 6 produces the production binary; qualified toolchains are available for regulated industries.

That is the day-to-day reality of CMSIS for the Indian Cortex-M workflow, invisible in application source, but the entire foundation the project sits on.

Further Reading

External canonical references

Related GSAS engineering guides


GSAS Micro Systems is Arm’s authorized partner in India for Arm Development Tools, delivering Keil MDK Professional licences, CMSIS training, and production Cortex-M tooling support to firmware teams across Bengaluru, Hyderabad, Chennai, Pune, Mumbai, and Delhi NCR. Whether your team is building a motor controller, a medical monitor, a telematics gateway, an edge-AI inference pipeline, or a secure industrial IoT endpoint, CMSIS v6 is the foundation, and GSAS is the local partner who can help you adopt it, scale it, and ship on it.

Interested in Arm tools?

Talk to our application engineers for personalized tool recommendations.

Stay in the Loop

Get monthly compliance updates, product insights, and engineering best practices delivered to your inbox.