1# Delivery in CMSIS-Packs {#cmsis_files_dfps} 2 3In simple individual cases the \ref cmsis_core_files can be delivered to developers as part of example projects and SDKs. But the most scalable approach with improved usability is to provide them packaged in [Open-CMSIS-Pack format](https://www.open-cmsis-pack.org), and this page explains how to do this. 4 5The \ref cmsis_standard_files are provided as part of [CMSIS Software pack](../General/cmsis_pack.html) under **CMSIS** class of components and compose there the **CORE** group. 6 7The \ref cmsis_device_files are delivered in [CMSIS Device Family Packs (DFPs)](https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/cp_PackTutorial.html#createPack_DFP) that provide necessary mechanisms for device support in embedded software. The DFPs are typically maintained by device vendors. 8 9Since \ref device_h_pg does not need to be modified in the project, it can be made accessible with its include path. 10 11For uniform experience, the files \ref startup_c_pg and \ref system_c_pg should be provided in the DFP as part of **Device** class in the **Startup** group and defined as configuration files, meaning they are copied from the pack into a project folder and can be modifed there if necessary. 12 13Below is an example of how CMSIS-Core device files can be defined in a .pdsc file of DFP pack, based on the implementation for a generic Cortex-M55 device. 14 15```xml 16 <components> 17 <!-- CMSIS-Startup components --> 18 19 <!-- Cortex-M55 --> 20 <component Cclass="Device" Cgroup="Startup" Cvariant="C Startup" Cversion="2.2.0" condition="ARMCM55 CMSIS" isDefaultVariant="true"> 21 <description>System and Startup for Generic Cortex-M55 device</description> 22 <files> 23 <!-- include folder / device header file --> 24 <file category="include" name="Device/ARMCM55/Include/"/> 25 <!-- startup / system file --> 26 <file category="sourceC" name="Device/ARMCM55/Source/startup_ARMCM55.c" version="1.1.0" attr="config"/> 27 <file category="sourceC" name="Device/ARMCM55/Source/system_ARMCM55.c" version="1.1.0" attr="config"/> 28 <!-- SAU configuration --> 29 <file category="header" name="Device/ARMCM55/Config/partition_ARMCM55.h" version="1.0.0" attr="config" condition="TZ Secure"/> 30 </files> 31 </component> 32 33 </components> 34``` 35 36Since the \ref cmsis_device_files require access to implementations from \ref cmsis_standard_files, the Device Family Packs need to specify the dependency on **CMSIS:CORE** component. In the code above this is done with the `condition="ARMCM55 CMSIS"` that is defined in the same .psdc file as: 37 38```xml 39 <conditions> 40 41 <condition id="ARMCM55 CMSIS"> 42 <description>Generic Arm Cortex-M55 device startup and depends on CMSIS Core</description> 43 <require Dvendor="ARM:82" Dname="ARMCM55*"/> 44 <require Cclass="CMSIS" Cgroup="CORE"/> 45 </condition> 46 47 </conditions> 48``` 49 50## Device Examples {#device_examples} 51 52The [Cortex_DFP pack](https://github.com/ARM-software/Cortex_DFP) provides generic device definitions for standard Arm Cortex-M cores and contains corresponding \ref cmsis_device_files. 53 54These files can be used as a reference for device support in a DFP pack, but can also be used in projects that require standard Arm processors functionality. See \ref using_arm. 55 56Looking at other Device Family Packs can be also helpful to understand the CMSIS-Core support with DFPs. The list of public CMSIS packs (including DFPs) can be found at [keil.arm.com/packs](https://www.keil.arm.com/packs/). 57