Embedded IDEs - Open-CMSIS
Last updated
Last updated
At Edge Impulse, we support the Common Microcontroller Software Interface Standard (CMSIS) and provide tools to integrate Edge Impulse models into CMSIS-compliant projects. The following IDEs and toolchains are currently supported by CMSIS and can be used to integrate Edge Impulse models into your projects:
The Common Microcontroller Software Interface Standard (CMSIS) is an open-source software standard developed with Arm's collaboration, aimed at streamlining the process of software development across Cortex-M and lower Cortex-A processors. By providing a consistent and efficient interface CMSIS promotes code reuse, portability, and interoperability, enabling developers to focus on application-level logic rather than dealing with low-level hardware details. This standard enables a unified approach to peripheral interfacing, real-time operating systems (RTOS), and middleware, promoting software component interoperability from diverse sources.
First we will need the Edge Impulse SDK pack and an Edge Impulse project CMSIS-packs. You can download these from the deployment section of the Edge Impulse Studio.
In the deployment section of Edge Impulse Studio select the Open CMSIS pack option. Depending on your model optimization preferences you can enable the EON compiler and choose between Quantized and Unoptimized data format. Clicking Build will initiate the build process and, when finished, downloads a zip file containing the generated CMSIS Software Component packs. Two files are included in the zip file:
EdgeImpulse.EI-SDK.x.y.z.pack
EdgeImpulse.project_name.x.y.z.pack
The first file is the Edge Impulse SDK pack, which contains the Edge Impulse library and the required dependencies. The second file is the project pack, which contains the project specific configuration and the trained model.
The Edge Impulse SDK pack contains the Edge Impulse library and the required dependencies. The pack will be listed under the EdgeImpulse::EI-SDK
category, and is now available from the Arm Keil Pack Installer.
The Edge Impulse SDK pack requires the following CMSIS packs:
CMSIS-NN 4.0.0 Focuses on optimizing ML operators for Cortex-M, targeting Edge AI applications.
CMSIS-DSP 1.15.0 A collection of DSP functions optimized for Cortex-M processors, suitable for DSP applications.
Now that we have the required CMSIS packs, we can proceed to integrate the Edge Impulse SDK pack into our project. By following one of the guides below, you can integrate the Edge Impulse SDK pack into your project and start running inference on your target device.
To import the Edge Impulse SDK pack into Arm Keil µVision, for example, follow these steps:
These are some of the other IDEs and toolchains that are supported by CMSIS and can be used to integrate Edge Impulse models into your projects:
Other vendors and toolchains that support CMSIS include (but are not limited to):
3PEAK, ABOV Semiconductor, Active-Semi, AlifSemiconductor, AmbiqMicro, Amiccom, Analog Devices, APEXMIC, Arm, ASN, AutoChips, AWS, Brainchip, Cesanta, Clarinox, Cmsemicon, Cypress, Dialog Semiconductor, ELAN, Embedded Artists, EmbeddedOffice, EmCraft, EmSA, FMD, FMSH, Geehy, GigaDevice, GorgonMeducer, HDSC, Himax, Hitex, Holtek, Infineon, Keil, L-Tek, LVGL, lwIP, Maxim, MDK-Packs, Megawin, Memfault, Microchip, Microsemi, MindMotion, NordicSemiconductor, Nuvoton, NXP, Oryx-Embedded, Puya, QuantumLeaps, RealThread, RealTimeLogic, redlogix, Renesas, SEGGER, SILAN, Silicon Labs, Sinowealth, SodiusWillert, SONiX, Tencent, tensorflow, Texas Instruments, Toshiba, wolfSSL, YTMicro, Zilog.
Developed in response to the growing need for a vendor-independent hardware abstraction layer, CMSIS has evolved from its inception following the launch of Arm Cortex-M3 devices. It has simplified software reuse, minimized the learning curve for developers, and contributed to faster deployment of new devices. Originally focused on Cortex-M based microcontrollers, CMSIS now extends its support to Cortex-A class devices, catering to applications that demand high-performance microcontrollers. Over the years, CMSIS has introduced various components to support development needs ranging from signal processing to real-time system management, and its recent additions, such as CMSIS-NN, aim to address the needs of edge computing and machine learning on low-power devices.
The Open-CMSIS-Pack project aims to streamline the integration and management of software components for embedded and IoT projects, enhancing code reuse across these domains. Hosted by Linaro in collaboration with Arm, NXP, and ST, this incubation project focuses on standardizing software component packaging and providing foundational tools for their validation, distribution, integration, management, and maintenance.
CMSIS-Packs are a central element of this initiative, offering a packaging technology that supports nearly 9,000 microcontrollers. These packs deliver software components, device parameters, and evaluation board support through a collection of source code, header files, libraries, documentation, templates, startup code, programming algorithms, and example projects. They address several challenges by providing metadata for software components, ensuring consistent upgrades, defining interfaces and relationships between components, and simplifying the integration process with dependency information for toolchains, devices, and processors.
The Open-CMSIS-Pack project, launched in April 2021, has not yet finalized its roadmap but plans to create command-line tools for project builds, workflows for software pack verification, enhance pack description formats, simplify the creation of software packs from sources like CMake projects, and develop a software layer for pre-configured software components. It also aims to organize the taxonomies of standard APIs to support reusable software stacks. This initiative represents a significant step toward removing the complexity and enhancing software compatibility and reusability in the diverse and fragmented IoT and embedded systems landscape.
CMSIS encompasses a range of components and tools designed to cater to different aspects of microcontroller system development:
CMSIS-Core: Provides essential headers and startup files for Cortex-M system software development.
CMSIS-Driver: Offers standardized APIs for common peripherals, enhancing compatibility across bare-metal and RTOS-based systems.
CMSIS-RTOS v2: Features a standard API for real-time operating systems, enabling easy transitions between different RTOS versions.
CMSIS-DSP: A collection of DSP functions optimized for Cortex-M processors, suitable for DSP applications.
CMSIS-NN: Focuses on optimizing ML operators for Cortex-M, targeting Edge AI applications.
CMSIS-View: Enhances visibility into embedded applications for analyzing events and faults.
CMSIS-Compiler: Supports I/O operations retargeting and offers an OS-independent interface for multithreading.
CMSIS-Toolbox: Provides project management and continuous integration tools across multiple compilers.
CMSIS-Stream: Optimizes data block streaming in DSP/ML applications.
Specifications:
CMSIS-Pack: Standardizes the packaging mechanism for software components, device parameters, and board support.
CMSIS-SVD: Enables device vendors to describe peripherals in XML, facilitating the automatic generation of compliant C header files.
In summary, CMSIS has evolved into a comprehensive framework supporting a wide range of Arm Cortex-M and Cortex-A based microcontrollers, offering tools and components that streamline development, enable software reuse, and accelerate the delivery of new products to market.
Giving developers easy access to a standardized development ecosystem that not only simplifies the integration of software from various vendors but also paves the way for innovative applications in DSP, RTOS management, and, notably, edge computing, Edge AI, and machine learning on low-power devices. As the landscape of microcontroller applications continues to expand, CMSIS remains a key enabler of technological advancements, ensuring that developers are equipped with the tools and knowledge to meet the challenges of modern embedded systems development.
For more information about the Open-CMSIS-Pack project, explore the links below: