When the first Arm Cortex-M3 devices came to market in 2004, it quickly became clear that a vendor-independent hardware abstraction layer was required to simplify software re-use and to reduce the learning curve for new software developers. The introduction of the Cortex Microcontroller Software Interface Standard (CMSIS) enabled consistent device support and simple software interfaces to the processor and the peripherals, which in turn reduced the time to market for new devices.
Since its original introduction, CMSIS has seen a tremendous uptake. Nowadays, more than 5,500 devices from more than 30 silicon suppliers around the world are publicly supported.
Originally, CMSIS-Core was introduced for Arm Cortex-M based microcontrollers. Today, more and more Arm Cortex-A class devices are available that can be used as high-performance microcontrollers, running bare-metal software or a real-time operating system. To support this use case, CMSIS-Core was extended with support for Cortex-A5/7/9 cores and peripherals. Cortex-A class devices from major chip vendors, such as NXP, Microchip, and Renesas are nowadays supported. This enabled the reuse of software components that have been created for Cortex-M based devices previously.
Having started with CMSIS-Core, a couple of components were introduced over the years. The optimized CMSIS-DSP library is popular in the industry, because of the excellent support of Cortex technology, regardless of an available floating-point unit. Development tools like Mathworks’ MATLAB or the Filter Designer from ASN export CMSIS-DSP code that can be used in your microcontroller project directly.
The CMSIS-RTOS API is today available for the most popular real-time operating systems in embedded engineering. Starting with the native implementation in Arm Keil RTX5, there are wrappers available for FreeRTOS and Zephyr, an RTOS provided by the Linux Foundation. Using the CMSIS-RTOS API in an end user application also paves the way to functional safety, as Keil RTX5 is available in the Functional Safety Run-Time System for use in automotive, medical, industrial and railway applications.
Many development projects require to share software components in a controlled manner between engineering teams (either internally or to customers). CMSIS-Pack is a mechanism that provides versioning and a well-defined XML file containing the essential information of the software package. Third-party software partners offer their components as packs, such as Micrium, RealTimeLogic, and WolfSSL. CMSIS-Pack is also used for device and board support by the large silicon vendors, such as Nordic, Nuvoton, NXP, Microchip, Silicon Labs, and Texas Instruments.
Ready-to-run middleware (for example USB or networking stack) require drivers for the underlying devices to be present. To ease the life of the developer, CMSIS-Drivers provide a standardized interface to access the underlying hardware, without the necessity to adapt the middleware to the driver package of a new chip. Many CMSIS-supported devices already offer these CMSIS-Drivers and thus help to get to market faster.
Cloud computing is using large servers on the Internet to enable Big Data applications. As this becomes more popular, data bandwidth used for the communication between the end node and the server must be reduced not to overload the network. Edge computing brings back many of the data processing into the end node that is connected to the internet only with a low-bandwidth data connection. Machine learning and neural network applications can run on low-power Cortex-M devices that are often even battery powered. To enable such applications, CMSIS-NN provides an API that is used to run a collection of efficient neural network kernels on Cortex-M processor cores. The kernels are developed to maximize the performance and minimize the memory footprint of neural networks in such an application. CMSIS-NN seamlessly integrates into workflows that start from a popular neural network framework, such as TensorFlow or Caffe, and that are using the Arm NN SDK to deploy the workload on various targets.
Finally, 2019 will see the introduction of CMSIS-Zone, a new tool that helps developers to partition the system resources quickly. Modern Armv8-M based microcontrollers support complex multi-core layouts, either with or without TrustZone for Armv8-M, which are challenging in the initial setup. Furthermore, partitioning between secure and non-secure areas require careful design configurations. CMSIS-Zone will help with this configuration, again to reduce the overall time-to-market.
More about CMSIS