/** 
\page pdsc_devices_pg /package/devices element

The level \elem{devices} contains all devices for which support is provided by the \ref cp_SWComponents "Software Pack". 

Devices can be organized in hierarchy groups to limit redundancy. The hierarchy levels are:
- \ref element_family "family": the attributes of a device family which includes also the processor.
- \ref element_subFamily "subFamily": attributes of an optional sub-family; this adds or modifies features of a family.

Device characteristics can be defined in:
- \ref element_device "device": attributes of a specific silicon device
- \ref element_variant "variant": attributes of a device variant (for example, with different package or temperature range) or an 
       OEM device or board that integrates the device.
       
A device is described by the following properties:
 - \ref element_description "description": textual device description
 - \ref element_feature "feature": categorized list of device peripherals and features
 - \ref element_book "book": documentation about the device and its processor(s)
 - \ref element_processor "processor": processor and processor features embedded in the device
 - \ref element_compile "compile": device specific general settings for the build tools
 - \ref element_debugconfig "debugconfig": default settings for a debug connection
 - \ref element_debugvars "debugvars": global debug access variables for use in sequences.
 - \ref element_sequences "sequences": debug access sequences.
 - \ref element_debugport "debugport": debug port description of the device for the debugger to configure a debug connection.
 - \ref element_accessportV1 "accessportV1": access port (APv1) description of the device for the debugger to configure a debug connection.
 - \ref element_accessportV2 "accessportV2": access port (APv2) description of the device for the debugger to configure a debug connection.
 - \ref element_debug "debug": device specific information for the debugger to configure a debug connection including System View Description files.
 - \ref element_trace "trace": device specific information for the debugger to configure trace.
 - \ref element_memory "memory": memory layout of the device for internal and external RAM and ROM regions
 - \ref element_algorithm "algorithm": device specific Flash programming algorithms

A device will inherit the specifications from both the family and sub-family levels. Some properties are required to be unique. 
For example, the name of the svd file attribute of the \elem{debug} property. 
Therefore, the svd file specified on the family level can be redefined by the attribute on the sub-family or device level.
Information like the description and feature entries are concatenated, starting with the information from the family and sub-family level
and finalizing with the information on the device level.

\b Example
\code
<package>
  ...
  <devices>
    <!-- family level -->
    <family Dfamily="STM32F2" Dvendor="STMicroelectronics:13">
      <processor Dcore="Cortex-M3" DcoreVersion="r2p1"
                 Dfpu="NO_FPU" Dmpu="MPU" Dendian="Little-endian" Dclock="120000000"/>

      <compile   header="Device/Include/stm32f2xx.h" define="STM32F2XX"/>
      <debug     svd="SVD/STM32F20x.svd"/>
      <algorithm name="Flash/STM32F2xx_OPT.flm" start="0x1FFFC000" size="0x00000010" style="Keil"/>
      <book      name="doc/STM32F2.PDF" title="STM32F2 Reference Manual"/>

      <description>
        Arm 32-bit Cortex-M3 CPU based Microcontroller
        - 120 MHz maximum frequency producing 150 DMIPS/1.25 DMIPS/MHz
        - Memory Protection Unit
        - Flexible static memory controller (supports Compact Flash, SRAM, PSRAM, NOR, NAND memories)
        - LCD parallel interface, 8080/6800 modes
        - Clock, reset and supply management
      </description>

      <feature type="Timer" n="10" m="32" name="General Purpose Timer with 60 MHz"/>
      <feature type="Timer" n="2" m="16" name="Advanced Control Timer with 120 MHz"/>
      <feature type="Timer" n="2" m="16" name="Basic Timer with 60 MHz"/>
      <feature type="TimerOther" n="1" name="Independent Watchdog Timer"/>
      <feature type="TimerOther" n="1" name="Window Watchdog Timer"/>
      <feature type="DAC" n="2" m="12"/>
      <feature type="SPI" n="3" name="SPI Interface (two of them can be used as I2S)"/>
      <feature type="I2C" n="3"/>
      <feature type="USART" n="4" name="USART Interface up to 7.5 Mbit/s"/>
      <feature type="UART" n="2" name="UART Interface up to 3.75 Mbit/s"/>
      <feature type="USBOTG" n="1"  name="USB OTG (Full-Speed) with PHY and ULPI"/>
      <feature type="USBOTG" n="1"  name="USB OTG (High-Speed) with PHY and ULPI"/>
      <feature type="CAN" n="2"  name="CAN Interface (2.0b Active)"/>
      <feature type="SDIO" n="1" m="8" name="Supporting SD/MicroSD/MMC"/>
      <feature type="VCC" n="1.8" m="3.6"/>

      <!-- sub family level -->
      <subFamily DsubFamily="128 Flash">
        <memory name="SRAM"  access="rwx" start="0x20000000" size="0x10000" default="1"/>
        <memory name="Flash" access="rx"  start="0x08000000" size="0x20000" startup="1" default="1"/>

        <!-- device level -->
        <device Dname="STM32F205RB">
          <feature type="IOs" n="51" name="Input and Output Ports"/>
          <variant Dvariant="STM32F205RBT6">
            <feature type="QFP" count="64" name="LQFP 64 10x10x1.4" />
            <feature type="Temp" n="-40" m="85" name="Industrial Temperature Range"/>
          </variant>
          <variant Dvariant="STM32F205RBT7">
            <feature type="QFP" count="64" name="LQFP 64 10x10x1.4" />
            <feature type="Temp" n="-40" m="105" name="Extended Temperature Range"/>
          </variant>
        </device>

        <device Dname="STM32F205VB">
          <feature type="IOs" n="82" name="Input and Output Ports"/>
          <variant Dvariant="STM32F205VBT6">
            <feature type="QFP" count="100" name="LQFP 100 14x14x1.4" />
            <feature type="Temp" n="-40" m="85" name="Industrial Temperature Range"/>
          </variant>
        </device>
      </subFamily>

    </family>
  </devices>
</package>
\endcode

<p>&nbsp;</p>
<hr>

\section element_devices /package/devices

Group level containing device \subpage pdsc_family_pg "family" descriptions. A package can contain only one element \elem{devices}.
The group is not mandatory.

\b Example
\code
<package>
  ...
  <devices>
    ...
  </devices>
  ...
</package>

\endcode

\n

<table class="cmtable" summary="Element: devices">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_package "package"</td>
    <td colspan="3">\ref element_package "/package"</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td>Device family group. Define all properties that are in common to devices of a family.</td>
    <td>complexType</td>
    <td>1..*</td>
  </tr>
</table>

\delim
*/

/** 
\page pdsc_family_pg /package/devices/family element

\section element_family /package/devices/family

Define properties that are in common to all devices of a family. These properties are inherited by 
subgroups or elements. This is a mechanism of granulation to reduce redundancy.  
Multiple \<family> groups can be defined.
 
\b Example
\code
<devices>
  ...
  <family Dfamily="STM32F2" Dvendor="STMicroelectronics:13">
    <processor   .../>
    <debugconfig .../>
    <debugvars   .../>
    <sequences   .../>
    <compile     .../>
    <memory      .../>
    <algorithm   .../>
    <book        .../>
    <description> Write texte here </description>
    <environment> ... </environment>
    <feature     .../>
    <debugport   .../>
    <debug       .../>
    <trace       .../>
   
    <subFamily DsubFamily="...">
      ...
      <device Dname="...">
        ...
      </device>
      ...
    </subFamily>
    ...
  </family>
  ...
</devices>
\endcode 

<p>&nbsp;</p>

<table class="cmtable" summary="Element: family">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_devices "devices"</td>
    <td colspan="3">\ref element_devices</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Dfamily</td>
    <td>Name of the device family.</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dvendor</td>
    <td>Device vendor name.  Use predefined values as listed in the table \ref DeviceVendorEnum "Device Vendor".</td>
    <td>\ref DeviceVendorEnum "DeviceVendorEnum"</td>
    <td>required</td>
  </tr>
  <tr>
    <th>Child Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_processor "processor"</td>
    <td>List all processors that are in common to devices of the family.</td>
    <td>ProcessorType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugconfig "debugconfig"</td>
    <td>Specify default settings for the debug connection relevant to all devices of the family.</td>
    <td>DebugConfigType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_compile "compile"</td>
    <td>Specify compile or translate options that are relevant to all devices of the family.</td>
    <td>CompileType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugvars "debugvars"</td>
    <td>Define global debug access variables for settings relevant to all devices of the family unless replaced by debugvars on subFamily, device or variant level</td>
    <td>DebugVarsType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_sequences "sequences"</td>
    <td>Describe debug access sequences relevant to all devices of the family.</td>
    <td>SequencesType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td>Describe a debug port relevant to all devices of the family.</td>
    <td>DebugPortType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV1 "accessportV1"</td>
    <td>Describe an access port (APv1) relevant to all devices of the family.</td>
    <td>AccessPortV1Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV2 "accessportV2"</td>
    <td>Describe an access port (APv2) relevant to all devices of the family.</td>
    <td>AccessPortV2Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debug "debug"</td>
    <td>Specify debug options that are relevant to all devices of the family.</td>
    <td>DebugType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td>Specify trace options that are relevant to all devices of the family.</td>
    <td>TraceType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_memory "memory"</td>
    <td>Specify memory areas that are available for all devices of the family.</td>
    <td>MemoryType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_algorithm "algorithm"</td>
    <td>Specify Flash programming algorithms that are suitable for all devices.</td>
    <td>AlgorithmType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_flashinfo "flashinfo"</td>
    <td>Specify additional information required to download application code into Flash that is available for all devices of the family.</td>
    <td>FlashInfoType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_book "book"</td>
    <td>Specify documents that are relevant for all devices of a family.</td>
    <td>BookType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_description "description"</td>
    <td>Describe the device family.</td>
    <td>DescriptionType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_environment "environment"</td>
    <td>Specify tool specific settings.</td>
    <td>EnvironmentType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_feature "feature"</td>
    <td>Specify features that are available in all members of the device family.</td>
    <td>FeatureType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td>A optional sub-family that is used to group devices.</td>
    <td>group</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td>Individual devices that belong to the device family.</td>
    <td>DeviceType</td>
    <td>0..*</td>
  </tr>
</table>

<p>&nbsp;</p>
<hr>

\section element_subFamily /package/devices/family/subFamily

Define properties that are in common to all devices of a subFamily. This is another mechanism of granulation to reduce redundancy. 
These properties are inherited by subgroups or elements. Multiple \<subFamily> groups can be defined.
 
\b Example
\code
<family Dfamily="STM32F2" Dvendor="STMicroelectronics:13">
  ...   
  <subFamily DsubFamily="...">
    <processor   .../>
    <debugconfig .../>
    <debugvars   .../>
    <sequences   .../>
    <compile     .../>
    <memory      .../>
    <algorithm   .../>
    <book        .../>
    <description> Write texte here </description>
    <feature     .../>
    <debugport   .../>
    <debug       .../>
    <trace       .../>
    <device Dname="...">
      ...
    </device>
  </subFamily>

  <subFamily DsubFamily="STM32F2xx">
    ...
  </subFamily>

</family>
\endcode 

<p>&nbsp;</p>

<table class="cmtable" summary="Element: subFamily">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>DsubFamily</td>
    <td>Name of the device sub family.</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <th>Child Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_processor "processor"</td>
    <td>Specify processors that are available in all devices of the sub-family.</td>
    <td>ProcessorType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_compile "compile"</td>
    <td>Specify compile or translate options that are relevant to all devices of the sub-family.</td>
    <td>CompileType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugconfig "debugconfig"</td>
    <td>Specify default settings for the debug connection relevant to all devices of the sub-family.</td>
    <td>DebugConfigType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_debugvars "debugvars"</td>
    <td>Define global debug access variables for user-defined settings relevant to all devices of the sub-family.</td>
    <td>DebugVarsType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_sequences "sequences"</td>
    <td>Describe debug access sequences relevant to all devices of the sub-family.</td>
    <td>SequencesType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td>Describe a debug port relevant to all devices of the sub-family.</td>
    <td>DebugPortType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV1 "accessportV1"</td>
    <td>Describe an access port (APv1) relevant to all devices of the sub-family.</td>
    <td>AccessPortV1Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV2 "accessportV2"</td>
    <td>Describe an access port (APv2) relevant to all devices of the sub-family.</td>
    <td>AccessPortV2Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debug "debug"</td>
    <td>Specify debug options that are relevant to all devices of the sub-family.</td>
    <td>DebugType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td>Specify trace options that are relevant to all devices of the sub-family.</td>
    <td>TraceType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_memory "memory"</td>
    <td>Specify memory areas that are available in all device of the sub-family.</td>
    <td>MemoryType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_algorithm "algorithm"</td>
    <td>Specify Flash programming algorithms that can be used by all device of the sub-family.</td>
    <td>AlgorithmType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_flashinfo "flashinfo"</td>
    <td>Specify additional information required to download application code into Flash that is available for all devices of the sub-family.</td>
    <td>FlashInfoType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_book "book"</td>
    <td>Specify documents relevant for all device of the sub-family.</td>
    <td>BookType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_description "description"</td>
    <td>Description of the device family.</td>
    <td>DescriptionType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_feature "feature"</td>
    <td>Specify features available in devices of the sub-family.</td>
    <td>FeatureType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td>List individual devices that belong to the device sub-family.</td>
    <td>DeviceType</td>
    <td>0..*</td>
  </tr>
</table>

<p>&nbsp;</p>
<hr>

\section element_device /package/devices/family/../device

Define properties that are specific to a device. Properties defined on upper levels get inherited, unless they can be overwritten.
Multiple \<device> elements can be defined.

\b Example
\code
<subFamily DsubFamily="STM32F405">
  ...
  <device Dname="STM32F405OE">
    <memory    name="Flash" access="rx" start="0x08000000" size="0x80000" startup="1" default="1"/>
    <algorithm name="Flash/STM32F4xx_1024.flm" start="0x08000000" size="0x80000" default="1" style="Keil"/>
    <feature   type="IOs" n="72" name="Input and Output Ports"/>
  </device>

  <device Dname="STM32F405OG">
    <memory    name="Flash" access="rx" start="0x08000000" size="0x100000" startup="1" default="1"/>
    <algorithm name="Flash/STM32F4xx_1024.flm" start="0x08000000" size="0x100000" default="1" style="Keil"/>
    <feature   type="IOs" n="72" name="Input and Output Ports"/>
  </device>
  ...
</subFamily>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Element: device">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Dname</td>
    <td>Specifies the name of the device. Only alphabetical characters, decimal digits, '-' and '_' are allowed.</td>
    <td>RestrictedString</td>
    <td>required</td>
  </tr>
  <tr>
    <th>Child Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_processor "processor"</td>
    <td>Specify processors that are specific to this device.</td>
    <td>ProcessorType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugconfig "debugconfig"</td>
    <td>Specify default settings for the debug connection specific to this device.</td>
    <td>DebugConfigType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_compile "compile"</td>
    <td>Specify compile or translate options specific to this device.</td>
    <td>CompileType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_memory "memory"</td>
    <td>Specify memory areas that specific to this device.</td>
    <td>MemoryType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_algorithm "algorithm"</td>
    <td>Specify Flash programming algorithms that can be used by this device.</td>
    <td>AlgorithmType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_flashinfo "flashinfo"</td>
    <td>Specify additional information required to download application code into Flash that is specific to this device.</td>
    <td>FlashInfoType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_book "book"</td>
    <td>Specify documents specific to this device.</td>
    <td>BookType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_description "description"</td>
    <td>Description specific to this device.</td>
    <td>DescriptionType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_feature "feature"</td>
    <td>Specify the features of this device.</td>
    <td>FeatureType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_feature "environment"</td>
    <td>Specify tool options.</td>
    <td>EnvironmentType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td>Describe a debug port specific to this device.</td>
    <td>DebugPortType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV1 "accessportV1"</td>
    <td>Describe an access port (APv1) specific to this device.</td>
    <td>AccessPortV1Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV2 "accessportV2"</td>
    <td>Describe an access port (APv2) specific to this device.</td>
    <td>AccessPortV2Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debug "debug"</td>
    <td>Specify debug options specific to this device.</td>
    <td>DebugType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td>Specify trace options specific to this device.</td>
    <td>TraceType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugvars "debugvars"</td>
    <td>Define debug access variables for user-defined settings specific to this device.</td>
    <td>DebugVarsType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_sequences "sequences"</td>
    <td>Describe debug access sequences specific to this device.</td>
    <td>SequencesType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_variant "variant"</td>
    <td>Complex element specifying a variant of a device.</td>
    <td>xs:ComplexType</td>
    <td>0..*</td>
  </tr>
</table>

\delim

\section element_algorithm /package/devices/family/.../algorithm

Specify Flash programming algorithms with the address range and its size.  An algorithm with 
\<default> set to \token{true} gets configured automatically to the download options of the project.
Algorithms can be defined on various levels. Multiple \<algorithm> elements are possible. If the
memory range and style are identical, the one on the lower level takes precedence.

\b Example
\code
<family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
  ...
  <!-- use for all devices of the family  -->
  <algorithm name="Flash\STM32F2xx_512.flm" start=0x08000000 size=0x10000 default="1" style="Keil"/>
 
  <subFamily DsubFamily="STM32F405">
    <!-- use for all devices of a subFamily -->
    <algorithm name="Flash/STM32F2xx_1024.flm" start=0x08000000 size=0x20000 default="1" style="Keil"/>       

    <device Dname="STM32F405OE">
      <!-- finally, this is the default for the device -->
      <algorithm name="Flash/STM32F2xx_2048.flm" start=0x08000000 size=0x40000 default="1" style="Keil"/>
    </device>
    ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Type: AlgorithmType">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor identifier. This attribute <b>is mandatory for devices that embed multiple processors that require different algorithms</b>.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>name</td>
    <td>Flash Programming Algorithm file including the path, which is relative to the root folder of the \ref cp_SWComponents "Software Pack".</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>start</td>
    <td>Base address for the Flash programming algorithm.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>size</td>
    <td>Size covered by the Flash programming algorithm. End address = start + size - 1</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
   <tr>
    <td>RAMstart</td>
    <td>Base address for the RAM where the Flash programming algorithm will be executed from. If
    specified, the \ref element_memory "memory" element does not require a \c default attribute.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>RAMsize</td>
    <td>Maximum size of RAM available for the execution of the Flash programming algorithm. 
    End address = start + size - 1 is used for the Stack. If specified, the \ref element_memory 
    "memory" element does not require a \c default attribute.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>default</td>
    <td>If \token{true}, then this is the default Flash programming algorithm that gets configured
    in a project. If not specified or set to \token{false}, then the Flash programming algorithm can
    be configured on a lower level. However, the Flash programming algorithm of a project can be
    changed manually at any time during development.
    </td>
    <td>xs:boolean</td>
    <td>optional</td>
  </tr>
    <tr>
    <td>style</td>
    <td>[Version 1.4.0] Today, different toolchains support different styles of incompatible flash
    programming algorithms. The attribute specifies the style of the specified flash programming 
    algorithm. For backward compatibility the default value is \token{Keil}. The aim is to converge to
    the <em>CMSIS</em> style.
    </td>
    <td>\ref AlgorithmStyleEnum "AlgorithmStyleEnum"</td>
    <td>optional</td>
  </tr>

</table>


\delim

\section element_flashinfo /package/devices/family/.../flashinfo

Specify Flash information that the debugger can use to erase and program Flash memories without the use
of target RAM based Flash download algorithms.<br>
The child elements \<block> and \<gap> describe the memory and programming layout of a flash device:
- The first child element has the base address \token{start}.
- The base address of the second child element is \token{start} incremented by the size of the first child element.
- The base address of all following child elements calculates respectively.

Flash information can be defined on various levels. Multiple \<flashinfo> elements are possible. If the memory range is
identical, the one on the lower level takes precedence. Overlap of Flash information ranges is not allowed.

\b Example
\code
<device ... >
  ...
    <!-- Flash Device Info for this device -->
    <flashinfo name="Internal Flash 1" start="0" pagesize="64" emptyval="0xFFFFFFFF" filler="0xFFFFFFFF" ptime="3000" etime="3000" Pname="Cortex-M23">
      <block count="1"  size="0x100" arg="0"/>
      <block count="10" size="0x100" arg="0"/>
      <gap size="0x10000" />
      <block count="2"  size="0x100" arg="1" />
    </flashinfo>
  ...
</device>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Type: FlashInfoType">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>name</td>
    <td>Name of the specified flash device.</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>start</td>
    <td>Base address of the specified flash device as mapped into target memory system.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>pagesize</td>
    <td>Programming page size.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>blankval</td>
    <td>Expected memory value for unprogrammed address ranges (64-bit value). 
    The access size used to read back programmed memory defines the number of least significant bytes of this value that are compared.
    Defaults to \token{0xFFFFFFFFFFFFFFFF} if not specified.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>filler</td>
    <td>Value that a debugger uses to fill the remainder of a programming page (64-bit value).
    The access size used in \ref DebugFunctions "FlashBufferWrite" defines the number of least significant bytes of this value to write.
    Defaults to \token{0xFFFFFFFFFFFFFFFF} if not specified.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>ptime</td>
    <td>Timeout in milliseconds for programming a page. Defaults to \token{100} if not specified.</td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>etime</td>
    <td>Timeout in milliseconds for erasing a sector. Defaults to \token{300} if not specified.</td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor identifier. This attribute <b>is mandatory for devices that embed multiple processors that require different algorithms</b>.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <th>Child Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_flashblock "block"</td>
    <td>\ref element_flashblock</td>
    <td>FlashInfoBlockType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_flashgap "gap"</td>
    <td>\ref element_flashgap</td>
    <td>FlashInfoGapType</td>
    <td>0..*</td>
  </tr>

</table>

\delim


\section element_flashblock /package/devices/family/.../flashinfo/block

Specify properties of one or multiple subsequent blocks of flash device that have the attributes.
Its base address calculates from the parent \<flashinfo> \token{start} address incremented by the
size of all previous \<block> and \<gap> elements of this flash device.


<table class="cmtable" summary="Type: FlashInfoBlockType">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_flashinfo "flashinfo"</td>
    <td colspan="3">\ref element_flashinfo</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>count</td>
    <td>Number of subsequent blocks of this flash device with identical properties.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>size</td>
    <td>Block size in bytes. The overall memory size that is covered by this \<block> element is \token{count} times \token{size}.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>arg</td>
    <td>An optional argument to pass to flash operation sequence.<br>
    A debugger writes this value to the pre-defined debug access variable <b>__FlashArg</b> at start of a flash operation.
    It is a non-negative number specific to this device. Defaults to \token{0} if not specified.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>

</table>


\delim

\section element_flashgap /package/devices/family/.../flashinfo/gap

Specify a gap between \<block> elements of the parent.
Its base address calculates from the parent \<flashinfo> \token{start} address incremented by the
size of all previous \<block> and \<gap> elements of this flash device.

<table class="cmtable" summary="Type: FlashInfoGapType">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_flashinfo "flashinfo"</td>
    <td colspan="3">\ref element_flashinfo</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>size</td>
    <td>Gap size in bytes.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>

</table>


<p>&nbsp;</p>
<hr>

\section element_book /package/devices/family/.../book

Specifies documents related to a device. Books can be entered on various levels.
The book element contains the location, filename, and extension of the file. The title is used for display purposes.

\b Example
\code
<family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
  ...
  <book name="Documents/STM32F40x_DS.PDF" title="STM32F40x Data Sheet"/>                 <!-- valid for all devices of the family  -->

  <subFamily DsubFamily="STM32F405">
    <book name="Documents/STM32F4xx_RM.pdf" title="STM32F4 Series Reference Manual"/>    <!-- valid for all devices of a subFamily -->

    <device Dname="STM32F405OE">
      <book name="Documents/STM32F405OE_DS.PDF" title="STM32F405OE - Data Sheet"/>       <!-- valid for this device; Inherits all above -->
    </device>
    ...
</family>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Type: BookType">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor identifier. This attribute <b>is mandatory for devices that embed multiple processors and where the book refers to a single processor only</b>.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>name</td>
    <td>File name of the document including the extension. The document path is relative to the package base folder. 
        Directory/file names are case-sensitive.</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>title</td>
    <td>Book title. Can be used for being displayed in various environments.</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>public</td>
    <td>Set publishing permissions for the documentation. If \tagem{public} is \token{true}, then the vendor gives permission 
        to extract the documentation from the pack and publish it on a web-page. Links to web pages are assumed to be public.
        The default value is \token{false}.</td>
    <td>xs:boolean</td>
    <td>optional</td>
  </tr>
</table>

\delim

\section element_compile /package/devices/family/.../compile

Specify header files and preprocessor defines for programming. This element can occur on various levels.
Multiple elements are allowed. The last occurrence in the hierarchy determines the actual define.

\note
- In the example below, the device \b STM32F407IG will have a define \c STM32F407IG. Previous defines
  are overridden.
- It is good practice to add both attributes (\c header and \c define) in the attributes list of the 
  \c compile element together. This clarifies the relationship between header file and define.
- The name of the header file should be exported by the IDE to the \ref RTE_Components_h file using the \#define CMSIS_device_header.
  
\b Example
\code
<family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
  ...
  <compile   header="Device/Include/stm32f4xx.h"/>

  <subFamily DsubFamily="STM32F407">
    ...
    <compile  header="Device/Include/stm32f4xx.h" define="STM32F40XX"/>

    <device Dname="STM32F407IG">
      <compile  header="Device/Include/stm32f4xx.h" define="STM32F407IG"/>
    </device>
  </subFamily>
</family>
\endcode

<table class="cmtable" summary="Element: compile">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor identifier. This attribute <b>is mandatory for devices that embed multiple processors if the header and define is different for each processor</b>.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
   <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>header</td>
    <td>C-header file with path relative to the installation.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>define</td>
    <td>C-file name with device specific preprocessor defines. The path is relative to the installation.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
</table>

\delim

\section element_description /package/devices/family/.../description

Brief description of the element. Can occur on various levels. Should only contain the unique features of the device. Number
of bullet points should not exceed ten. To create a detailed feature list use the \ref element_feature instead.

\b Example
\code
<package>
  <devices>
    <family Dfamily="STM32F2" Dvendor="STMicroelectronics:13">
    
      <description>
        STM32F2 devices are designed for medical, industrial and consumer
        applications and provide rich connectivity peripherals.
        - At 120 MHz CPU clock: 150 DMIPS executing from Flash memory 
        - ART Accelerator for low-power Flash execution (175 µA/MHz @ 120 MHz)
        - Flexible Memory Controller supports Compact Flash, SRAM, PSRAM, NOR and NAND
      </description>
 
    </family>
  </devices>
</package>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Element: description">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor Identifier. This attribute <b>is mandatory for devices that embed multiple processors and
        where the description is specific to a single processor</b>.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
</table>


<p>&nbsp;</p>
<hr>


\section element_environment /package/devices/family/.../environment

Tool-specific elements for a device.

Can occur on various levels. 

Contains information that is specific for a <b>development tool</b> identified by the \em name attribute.
The structure of the \em element is not specified in the schema file which gives the <b>development tool</b> 
full control of the \em element usage.

\b Example
\code
<package>
  <devices>
    <family Dfamily="MySeries" Dvendor="Generic:5">
      ...    
      <environment name="MyConfigTool">
        <file>MyConfigFile.cfg</file>
        <control>MyControlString</control>
        ...
      </environment>
      ...
    </family>
  </devices>
</package>
\endcode

\code
<package>
  <devices>
    <family Dfamily="XMC1000 Series" Dvendor="Infineon:7">
      ...    
      <environment name="uv" Pname="M0">
        <CMisc>--C99</CMisc>
        ...
      </environment>
      ...
    </family>
  </devices>
</package>
\endcode

\n

<table class="cmtable" summary="Element: description">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>name</td>
    <td>Name of the development tool (for example, "uv" for uVision)</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Identifies the processor the setting belongs to.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <th>Child Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>any</td>
    <td>Any element that is available for the specified development tool.<br>
    For uVision, the following elements are available: \<CMisc>, \<AMisc\>, \<LMisc\>, \<preBuild1\>, \<preBuild2\>, \<preRun1\>, \<preRun2\>, \<postBuild1\>, \<postBuild2\>, \<postRun1\>, \<postRun\>.</td>
    <td>xs:anyAttribute</td>
    <td>0..*</td>
  </tr>
</table>

\delim

\section element_feature /package/devices/family/.../feature

This element specifies peripherals that devices can have. This can be used on \b web \b sites for the display of device
features.

Many device feature types are already predefined, such as timers, converters, Ethernet, USB, etc (for a complete list refer
to table \ref DeviceFeatureTypeEnum "Device Feature Types"). Features can be defined on various levels. Inner elements
supersede outer elements. 

\b Example
\code
<package>
  <devices>
    <family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
      ...
      <!--  Features that are in common to this device family. -->
      <feature type="TimerOther" n="1" name="Independent Watchdog Timer"/>
      <feature type="TimerOther" n="1" name="Window Watchdog Timer"/>          <!-- The same feature type can be specified multiple times -->
      <feature type="Other" n="1" name="Temperature Sensor"/>
      <feature type="CoreOther" n="1" name="96-bit Unique Identifier"/>
      <feature type="CoreOther" n="1" name="CRC Calculation Unit"/>
      <feature type="DMA" n="16" name="General Purpose DMA with Centralized FIFO and Burst Support"/>
      <feature type="PowerOther" n="1" name="POR, PDR, PVD, and BOR"/>
      <feature type="XTAL" n="4000000" m="26000000" name="Crystal Oscillator"/>
      <feature type="IntRC" n="16000000" name="Internal Factory-Trimmed RC"/>
      <feature type="IntRC" n="32000" name="Internal RC with Calibration"/>
      <feature type="RTC" n="32000" name="RTC with 32 kHz calibrated Oscillator and Battery Backup"/>
      <feature type="PowerMode" n="3" name="Run, Stop, Standby"/>
      <feature type="Temp" n="-40" m="85"/> 
      <feature type="Temp" n="-40" m="105"/> 
      <feature type="Timer" n="4" m="16" name="General Purpose Timer"/>
      ...
      <subFamily DsubFamily="STM32F407">
        <!--  Features that are in common to this subFamily. -->
        <feature type="IOs" n="36"/>                                                  <!-- Adds new feature to subFamily  -->
        <feature type="Timer" n="7" m="32" name="General Purpose Timer"/>             <!-- Adds to settings from <family> -->

        
        <device Dname="STM32F407IE">
          <!--  Feature specific to this device.  All above features are inherited.  -->
          <feature type="QFP" n="176" name="LQFP 176 24x24x1.4"/>
        </device>
      </subFamily>
    </family>
  </devices>
</package>
\endcode

\n

<table class="cmtable" summary="Element: feature">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor Identifier. This attribute <b>is mandatory for devices that embed multiple processors</b>.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>type</td>
    <td>A feature (peripheral), such as \token{CAN}, \token{DMA}, \token{I/O}, \token{LCD}, etc. Predefined values must be used
    as listed in the table \ref DeviceFeatureTypeEnum "Device Feature Types".</td>
    <td>DeviceFeatureTypeEnum</td>
    <td>required</td>
  </tr>
  <tr>
    <td>n</td>
    <td>Depends on the element \em \b type. Check table \ref DeviceFeatureTypeEnum "Device Feature Types".</td>
    <td>xs:decimal</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>m</td>
    <td>Depends on the elemen \em \b type. Check table \ref DeviceFeatureTypeEnum "Device Feature Types".</td>
    <td>xs:decimal</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>name</td>
    <td>Descriptive name of the feature. For example, "16-bit down counting timer". If omitted, the <b>Default Name</b> is used 
    as described in the table \ref DeviceFeatureTypeEnum "Device Feature Types".</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
</table>

\n

\anchor DeviceFeatureTypeEnum <b>Table: Device Feature Types</b> 

The table lists predefined device features (peripherals).
\note The attribute \a name of the element \ref element_feature is a descriptive text for a feature. If \a name is omitted, then the <b>Default Name</b> is used.

|type=|n=|m=|Default Name|Example|Example shown as|
|-----|--|--|------------|-------|----------------|
|NVIC|Number of NVIC Interrupts|N/A|NVIC|\<feature type="NVIC" n="120" name="NVIC"/\>|NVIC with 120 interrupt sources|
|DMA|Number of DMA Channels|N/A|DMA|\<feature type="DMA" n="16" name="High-Speed DMA"/\>|16-channel High-Speed DMA|
|Crypto|Bitwidth, given as decimal Number (see example)|N/A|Cryptographic Engine|\<feature type="Crypto" n="128.256" name="HW accelerated AES Encryption Engine"/\>|128/256-bit HW accelerated AES Encryption Engine|
|RNG|Number of RNGs|N/A|Random Number Generator|\<feature type="RNG" name="True Random Number Generator"/\>|True Random Number Generator|
|CoreOther|Number of Features|N/A|Other Core Feature|\<feature type="CoreOther" n=1 name="96-bit Unique Identifier"/\>|1 x 96-bit Unique Identifier|
|Memory|Number of Bytes|N/A|Memory|\<feature type="Memory" n="128" name="EEPROM"/\>|128 byte EEPROM|
|MemoryOther|Number of Memories|N/A|Other Memory Type|\<feature type="MemoryOther" n="1" name="1 kB MRAM"/\>|1 x 1 kB MRAM|
|ExtBus|Bitwidth of Bus Interface|N/A|External Bus Interface|\<feature type="ExtBus" n="16" name="External Bus Interface for SRAM Communication"/\>|16-bit External Bus Interface for SRAM Communication|
|XTAL|Minimum Frequency in Hz|Maximum Frequency in Hz|External Crystal Oscillator|\<feature type="XTAL"  n="4000000" m="25000000" name="External Crystal Oscillator"/\>|4 MHz .. 25 MHz External Crystal Oscillator|
|IntRC|Minimum Frequency in Hz|Maximum Frequency in Hz|Internal RC Oscillator|\<feature type="IntRC"  n="16000000" name="Internal RC Oscillator with +/- 1% accuracy"/\>|16 MHz Internal RC Oscillator with +/- 1% accuracy|
|PLL|Number of PLLs|N/A|PLL|\<feature type="PLL"  n="3" name="Internal PLL"/\>|3 Internal PLL|
|RTC|RTC Frequency|N/A|RTC|\<feature type="RTC"  n="32000" name="Internal RTC"/\>|32 kHz Internal RTC|
|ClockOther|Number of Peripherals|N/A|Other Clock Peripheral|\<feature type="ClockOther" name="My special clock feature"/\>|My special clock feature|
|PowerMode|Number of Power Modes|N/A|Power Modes|\<feature type="Mode"  n="3" name="Run, Sleep, Deep-Sleep"/\>|3 Power Modes: Run, Sleep, Deep-Sleep|
|VCC|Minimum Supply Voltage|Maximum Supply Voltage|Operating Voltage|\<feature type="VCC"  n="1.8" m="3.6"/\>|1.8 V .. 3.6 V|
|Consumption|Minimum Power Consumption|Typical Power Consumption|Power Consumption|\<feature type="Consumption"  n="0.00004" m="0.002" name="Ultra-Low Power Consumption"/\>|40 uW/MHz .. 2 mW/MHz Ultra-Low Power Consumption|
|PowerOther|Number of Features|N/A|Other Power Feature|\<feature type="PowerOther" n="1" name="POR"/\>|1 x POR|
|BGA|Number of Balls|N/A|BGA|\<feature type="BGA" n="256" name="Plastic Ball Grid Array"/\>|256-ball Plastic Ball Grid Array|
|CSP|Number of Leads|N/A|CSP|\<feature type="CSP" n="28" name="Wafer-Level Chip-Scale Package"/\>|28-ball Wafer-Level Chip-Scale Package|
|PLCC|Number of Leads|N/A|PLCC|\<feature type="PLCC" n="20" name="PLCC Package"/\>|20-lead PLCC Package|
|QFN|Number of Leads|N/A|QFN|\<feature type="QFN" n="33" name="QFN Package"/\>|33-pad QFN Package|
|QFP|Number of Leads|N/A|QFP|\<feature type="QFP" n="128" name="Low-Profile QFP Package"/\>|128-lead Low-Profile QFP Package|
|SOP|Number of Leads|N/A|SOP|\<feature type="SOP" n="16" name="SSOP Package"/\>|16-lead SSOP Package|
|DIP|Number of Leads|N/A|SOP|\<feature type="DIP" n="16" name="Dual In-Line Package"/\>|16-lead Dual In-Line Package|
|PackageOther|Number of Pins|N/A|Other Package Type|\<feature type="PackageOther"  n="44" name="My other Package"/\>|44-contacts My other Package|
|IOs|Number of I/Os|N/A|Inputs/Outputs|\<feature type="IOs"  n="112" name="General Purpose I/Os, 5V tolerant"/\>|112 General Purpose I/Os, 5V tolerant|
|ExtInt|Number of External Interrupts|N/A|External Interrupts|\<feature type="ExtInt"  n="12"/\>|12 External Interrupts|
|Temp|Minimum Operating Temperature|Maximum Operating Temperature|Operating Temperature Range|\<feature type="Temp"  n="-40" m="105" name="Extended Operating Temperature Range"/\>|-40 °C .. +105 °C Extended Operating Temperature Range|
|ADC|Number of Channels|Resolution in Bit|ADC|\<feature type="ADC"  n="5" m="12" name="High-Performance ADC"/\>|5-channel x 12-bit High-Performance ADC|
|DAC|Number of Channels|Resolution in Bit|DAC|\<feature type="DAC"  n="2" m="10"/\>|2 x 12-bit DAC|
|TempSens|Number of Sensors|N/A|Temperature Sensor|\<feature type="TempSens"  n="1"/\>|1 x Temperature Sensor|
|AnalogOther|Number of Features|N/A|Other Analog Peripheral|\<feature type="AnalogOther"  n="1" name="My Analog"/\>|1 x My Analog|
|Timer|Number of Channels|Resolution in Bit|Timer/Counter Module|\<feature type="Timer"  n="2" m="32" name="Timer Module with Quadrature Encoding"/\>|2 x 32-bit Timer Module with Quadrature Encoding|
|PWM|Number of Channels|Resolution in Bit|PWM|\<feature type="PWM"  n="2" m="16" name="Pulse Width Modulation"/\>|2 x 16-bit Pulse Width Modulation|
|WDT|Number of Watchdogs|N/A|Watchdog|\<feature type="WDT"  n="1"/\>|1 x Watchdog Timer|
|TimerOther|Number of Features|N/A|Other Timer Peripheral|\<feature type="TimerOther"  n="1" name="Quadrature En-/Decoder"/\>|1 x Quadrature En-/Decoder|
|MPSerial|Number of Serial Peripherals|N/A|Multi-Purpose Serial Peripheral|\<feature type="MPSerial"  n="4" name="Multi-Purpose Serial Interface Module: I2C, I2S, SPI, UART"/\>|4 x Multi-Purpose Serial Interface Module: I2C, I2S, SPI, UART|
|CAN|Number of CAN Interfaces|N/A|CAN|\<feature type="CAN"  n="2" name="CAN 2.0b Controller"/\>|2 x CAN 2.0b Controller|
|ETH|Number of Ethernet Interfaces|Data Rate in Bit/s|Ethernet|\<feature type="ETH"  n="1" m="10000000" name="Integrated Ethernet MAC with PHY"/\>|1 x 10 Mbit/s Integrated Ethernet MAC with PHY|
|I2C|Number of I2C Interfaces|N/A|I2C|\<feature type="I2C"  n="2"name="Low-Power I2C"/\>|2 x Low-Power I2C|
|I2S|Number of I2S Interfaces|N/A|I2S|\<feature type="I2S"  n="3"/\>|3 x I2S|
|LIN|Number of LIN Interfaces|N/A|LIN|\<feature type="LIN"  n="4"/\>|4 x LIN|
|SDIO|Number of SDIO Interfaces|Bitwidth of SDIO Interface|SDIO|\<feature type="SDIO"  n="1" m="4" name="SDIO Interface"/\>|1 x 4-bit SDIO Interface|
|SPI|Number of SPI Interfaces|Data Rate in Bit/s|SPI|\<feature type="SPI"  n="2" m="20000000" name="SPI Interface"/\>|2 x 20 Mbit/s SPI Interface|
|UART|Number of UART Interfaces|Data Rate in Bit/s|UART|\<feature type="UART"  n="4" m="3000000" name="High-Speed UART Interface"/\>|4 x 3 Mbit/s High-Speed UART Interface|
|USART|Number of USART Interfaces|Data Rate in Bit/s|USART|\<feature type="USART"  n="2" m="1000000" name="High-Speed USART Interface"/\>|2 x 1 Mbit/s High-Speed USART Interface|
|USBD|Number of USB Dvice Interfaces|N/A|USB Device|\<feature type="USBD"  n="2" name="Full-Speed USB Device"/\>|2 x Full-Speed USB Device|
|USBH|Number of USB Host Interfaces|N/A|USB Host|\<feature type="USBH"  n="2" name="High-Speed USB Host"/\>|2 x High-Speed USB Host|
|USBOTG|Number of USB OTG Interfaces|N/A|USB OTG|\<feature type="USBOTG"  n="1" name="High-Speed USB OTG with PHY"/\>|1 x High-Speed USB OTG with PHY|
|ComOther|Number of other Communication Peripherals|N/A|Other Communication Peripheral|\<feature type="ComOther"  n="1" name="ZigBee"/\>|1 x ZigBee|
|Camera|Number of Camera Interface|Resolution in Bit|Camera Interface|\<feature type="Camera"  n="1" m="8" name="Digital Camera Interface"/\>|1 x 8-bit Digital Camera Interface|
|GLCD|Number of Graphic LCD Controller|Maximum Resolution as a decimal number (see example)|Graphic LCD Controller|\<feature type="GLCD"  n="1" m="320.240" name="TFT LCD Controller"/\>|1 x 320 x 480 pixel TFT LCD Controller|
|LCD|Number of Segment LCD Controller|Com.Seg as a decimal number (see example)|Segment LCD Controller|\<feature type="LCD"  n="1" m="16.40" name="Segment LCD Controller"/\>|1 x 16 x 40  Segment LCD Controller|
|Touch|Number of Touch Channels|N/A|Capacitive Touch Inputs|\<feature type="Touch"  n="10" name="Capacitive Touch Inputs"/\>|10 x Capacitive Touch Inputs|
|Other|Number of Features|N/A|Other Feature|\<feature type="Other"  n="2" name="My other Interface"/\>|2 x My other Interface|
|GPU|IP Name|Number of Shaders|GPU|\<feature type="GPU" n="Mali G71" m="1024"/\>|Mali G71 GPU with 1024 Shaders|
|AI|N/A|N/A|AI|\<feature type="AI"/\>|AI accelerator|
|FPGA|Number of Logic Elements|N/A|FPGA Array|\<feature type="FPGA" n="100000"/\>|FPGA with 100000 Logic Elements|
|Application|Automotive, Industrial, Medical, MilAero|Standard Name|N/A|\<feature type="Application" n="Automotive" m="ISO 26262"/\>|Automotive ISO 26262 Applications|
|IrDA|Standard Version|Data Rate in Bit/s|Infrared|\<feature type="IrDA" n="" m="1000000"/\>|IrDA 1 Mbit/s|
|HDMI|Standard Version|N/A|HDMI|\<feature type="HDMI" n="1.3"/\>|HDMI 1.3|
|MIPI|Standard Version|Data Rate in Bit/s|MIPI|\<feature type="MIPI" n="CSI" m="5000000000"/\>|MIPI CSI 5 Gbit/s|
|PCIe|Standard Version|Maximum Data Rate in Bit/s|PCIe|\<feature type="PCIe" n="3.0" m="3000000000"/\>|PCIe 3.0 3 GT/s|
|Bluetooth|Standard Version|Maximum Data Rate in Bit/s|Bluetooth|\<feature type="Bluetooth" n="4.2" name="Bluetooth Low Energy"/\>|Bluetooth Low Energy 4.2|
|ZigBee|Application Profile|Data Rate in Bit/s|ZigBee|\<feature type="Zigbee" n="Home Automation 2.1"/\>|ZigBee Home Automation 1.2|
|802.15.4|Standard Version|N/A|802.15.4|\<feature type="802.15.4" n="802.15.4d"/\>|802.15.4d|
|WiFi|Standard Version|Maximum Data Rate in Bit/s|WiFi|\<feature type="WiFi" n="802.11ac"/\>|802.11ac WiFi|
|LoRa|Standard Version|Maximum Data Rate in Bit/s|LoRa|\<feature type="LoRa"/\>|LoRa|
|LTE Cat-M|Standard Version|Maximum Data Rate in Bit/s|LTE Cat-M|\<feature type="LTE-M" n="M1" m="1000000"/\>|LTE-M M1 1 Mbit/s|
|NB-IoT|Standard Version|Maximum Data Rate in Bit/s|NB IoT|\<feature type="NB-IoT" n="NB1" m="250000"/\>|NB-IoT NB1 250 kbit/s|
|NFC|Standard Version|Maximum Data Rate in Bit/s|NFC|\<feature type="NFC" n="ISO 18092"/\>|NFC ISO 18092|
|WirelessOther|Standard Version|Maximum Data Rate in Bit/s|Other Wireless Connectivity|\<feature type="WirelessOther" n="MyStandard" m="1000000"/\>|MyStandard 1 Mbit/s Wireless Connectivity|
	
\delim

\section element_memory /package/devices/family/.../memory

This element specifies memory regions that devices can have. Memory types are predefined and can be selected.
This element can be defined on various levels. Inner memory elements supersede outer elements.

\b Example
\code
</package>
  ...
  <devices>
    <family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
      <memory name="SRAM" access="rwx" start="0x20000000" size="0x20000" default="1"/>

      <subFamily DsubFamily="STM32F407">
        <debug  __dp="0" __ap="0" svd="SVD/STM32F40x.svd"/>
        <memory name="SRAM1" access="rwx" start="0x20020000" size="0x20000" default="1"/>
        <memory name="SRAM2" access="rwx" start="0x10000000" size="0x10000" default="1"/>
        
        <device Dname="STM32F407IE">
          <memory name="Flash" access="rx" start="0x08000000" size="0x80000" startup="1" default="1"/>
        </device>
        
      </subFamily>
    </family>
  </devices>
  ...
</package>
\endcode

\n

<table class="cmtable" summary="Element: memory">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor identifier. This attribute <b>is mandatory for devices that embed multiple processors</b>. 
        Only alphabetical characters, decimal digits, '-' and '_' are allowed. </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>id (deprecated in Version 1.4.0)</td>
    <td>(deprecated Version 1.4.0) Identifier of the memory region consisting of a type indicator and an index (for example, \token{IRAM1}).
    Predefind values can be selected as defined in \ref MemoryIDTypeEnum.</td>
    <td>MemoryIDTypeEnum</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>name (new in Version 1.4.0)</td>
    <td>unique name of the memory (new in Version 1.4.0) to be used in conjunction with <em>access</em>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>access (new in Version 1.4.0)</td>
    <td>access permission of the memory. See MemoryAccessTypeString for details (new in Version 1.4.0).
    <td>\ref MemoryAccessTypeString "MemoryAccessTypeString"</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>start</td>
    <td>Base address of the memory using a hexadecimal value.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>size</td>
    <td>Size of the memory in bytes using a hexadecimal value.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>default</td>
    <td>Indicates a general purpose memory region, that does not require any special considerations (access speed, remapping, protection, etc.).
    If \token{true}, then an IRAM memory region will be used by the linker for locating any data and an IROM memory region will for locating 
    any code. Every device needs at least one default IRAM region.
    If an \ref element_algorithm "algorithm" element is specified (without \c RAMstart and
    \c RAMsize attributes),    the first listed IRAM region with default="1" will also be used for executing the flash programming algorithm.</td>
    Default value is \token{false}.
    <td>xs:boolean</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>startup</td>
    <td>If \token{true}, the startup code of the application will be placed into this memory region. Default value is \token{false}.</td>
    <td>xs:boolean</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>alias(new in Version 1.4.0)</td>
    <td>reference to another memory description which shares the same physical memory. Some physical
    memory is made accessible via different addresses, for example, chached vs. non-cached accesses. This
    avoids the impression that the device has twice as much memory available.
    <td>xs:string</td>
    <td>optional</td>
  </tr>
</table>

\n

\anchor MemoryIDTypeEnum <b>Table: Memory ID Types</b>

The table lists identifiers for memory types.
<table class="cmtable" summary="Enumeration: MemoryIDTypeEnum">
  <tr>
    <th>id=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">RAM<i>x</i></td>
    <td>External RAM. <i>x</i> can have a value between 1..8 </td>
  </tr>
  <tr>
    <td class="XML-Token">ROM<i>x</i></td>
    <td>External ROM. <i>x</i> can have a value between 1..8 </td>
  </tr>
  <tr>
    <td class="XML-Token">IRAM<i>x</i></td>
    <td>Internal RAM. <i>x</i> can have a value between 1..8 </td>
  </tr>
  <tr>
    <td class="XML-Token">IROM<i>x</i></td>
    <td>Internal ROM. <i>x</i> can have a value between 1..8 </td>
  </tr>
</table>

\delim

\anchor MemoryAccessTypeString <b>Table: Memory Access Attribute String</b>

The table lists the letters and their meaning for use in the access attribute string. The values can be used in:
 - \ref element_memory

<table class="cmtable" summary="Memory Access Permission Attributes">
  <tr>
    <th>access=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">r</td>
    <td><em>R</em>eadable</td>
  </tr>
  <tr>
    <td class="XML-Token">w</td>
    <td><em>W</em>ritable</td>
  </tr>
  <tr>
    <td class="XML-Token">x</td>
    <td>e<em>X</em>ecutable</td>
  </tr>
    <tr>
    <td class="XML-Token">p</td>
    <td><em>P</em>eripheral area. Details described in SVD.</td>
  </tr>
  <tr>
    <td class="XML-Token">s</td>
    <td><em>S</em>ecure attribute</td>
  </tr>
  <tr>
    <td class="XML-Token">n</td>
    <td><em>N</em>on-secure attribute</td>
  </tr>
  <tr>
    <td class="XML-Token">c</td>
    <td>non-secure <em>C</em>allable attribute</td>
  </tr>
</table>

\delim

\section element_processor /package/devices/family/.../processor

Specifies attributes of the device processor. The element can occur on various levels. The attributes add-up over the different
levels (family -> subFamily -> device). Elements of multi-processor devices can be associated with a specific processor using
the attribute \elem{Pname}. If the information is relevant to all processors, no processor must be specified in \elem{Pname}.

\b Example \b 1
\code
<package>
  ...
  <devices>
    <family Dfamily="K20 Series" Dvendor="NXP:11">
      <processor Dcore="Cortex-M4" DcoreVersion="r0p1"/>
      <!-- ******************************  MK20DN128xxx5  ****************************** -->
      <device Dname="MK20DN128xxx5">
        <processor Dfpu="0" Dmpu="0" Dendian="Little-endian" Dclock="50000000"/>
      </device>
      ...
    </family>
  </devices>
  ...
</package>
\endcode

\b Example \b 2
\code
<device name="MCIMX7D">
  ...
  <processor Dcore="Cortex-A7" DcoreVersion="r0p5" Pname="Cortex-A7" Punits="2" />
  <processor Dcore="Cortex-M4" DcoreVersion="r0p1" Pname="Cortex-M4"/>
  ...
  <debug   Pname="Cortex-A7" Punit="0" svd="SVD/iMX7D_A7.svd" __dp="0" __ap="1" address="0x80070000"/> 
  <debug   Pname="Cortex-A7" Punit="1" svd="SVD/iMX7D_A7.svd" __dp="0" __ap="1" address="0x80072000"/>
  <debug   Pname="Cortex-M4"           svd="SVD/iMX7D_M4.svd" __dp="0" __ap="4"/>
  ...
</device>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Element: processor">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>Processor identifier. This attribute <b>is mandatory for devices that embed multiple processors</b>. 
	      Each processor needs a unique identifier and must be used consistently in the <b>Pname</b> attribute of the elements within the scope of the current device family section.
        Only alphabetical characters, decimal digits, '-' and '_' are allowed.
    </td>
    <td>RestrictedString</td>
    <td>required for all multi-core devices</td>
  </tr>
  <tr>
    <td>Punits</td>
    <td>Specifies the number of processor units in a symmetric multi-processor core (MPCore). Defaults to single-core CPU (\token{1}) when left empty.</td>
    <td>InstancesType</td>
    <td>required for all multi-core devices</td>
  </tr>
  <tr>
    <td>Dcore</td>
    <td>Specifies the processor core. Use predefined values as listed in the table \ref DcoreEnum "Device Cores".</td>
    <td>DcoreEnum</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dfpu</td>
    <td>Specifies whether a hardware Floating Point Unit is present in the processor.  Use predefined values as listed in the table \ref DfpuEnum "Device FPU".</td>
    <td>DfpuEnum</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dmpu</td>
    <td>Specifies whether a Memory Protection Unit is present in the processor. Use predefined values as listed in the table \ref DmpuEnum "Device MPU".</td>
    <td>DmpuEnum</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dtz</td>
    <td>Specifies whether an Armv8-M based device implements TrustZone. Use predefined values as listed in the table \ref DtzEnum "Device TZ".</td>
    <td>DtzEnum</td>
    <td>required for ARMv8-M based devices</td>
  </tr>
  <tr>
    <td>Ddsp</td>
    <td>Specifies whether a device supports the DSP instructions set. Use predefined values as listed in the table \ref DdspEnum "Device DSP".</td>
    <td>\ref DdspEnum DdspEnum</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dmve</td>
    <td>Specifies whether a device supports the M-Profile Vector instruction set extension. Use predefined values as listed in the table \ref DmveEnum "Device MVE".</td>
    <td>\ref DmveEnum DmveEnum</td>
    <td>required for ARMv8.1-M based devices</td>
  </tr>
  <tr>
    <td>Dendian</td>
    <td>Specifies the endianess of the processor. Use predefined values as listed in the table \ref DendianEnum "Endinaness".</td>
    <td>DendianEnum</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dclock</td>
    <td>Specifies the max clock frequency of the processor subsystem</td>
    <td>xs:unsignedInt</td>
    <td>required</td>
  </tr>
  <tr>
    <td>DcoreVersion</td>
    <td>Hardware revision of the processor core</td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
</table>

\note While the different attributes can be spreaded over the family levels, they add-up and at the leaf (device level), a
complete set of attributes should be present (at least Dcore, Dfpu, Dmpu, Ddsp, Dendian, Dclock, and DcoreVersion). Adding-up
means that you can overwrite previous attributes on the next level. For example, if you have a subFamily that has a general
Dclock of 50000000 (50 Mhz), you can still specify for one of the subFamily members a different Dclock (such as 66000000).

<p>&nbsp;</p>		

\anchor DeviceVendorEnum <b>Table: Device Vendors</b>

The table lists predefined values representing device vendors. The list is extended from time to time (on request by new vendors). 
Contact cmsis@arm.com to ask for an extension. These values can be used in the elements:
- \ref element_board_mountedDevice 
- \ref element_accept
- \ref element_require
- \ref element_deny
- \ref element_example_board
- \ref element_board_compatibleDevice
- \ref element_gen_select

<table class="cmtable" summary="Enumeration: DeviceVendorEnum">
  <tr>
    <th>Dvendor</th>
    <th>Description</th>
    <th>Web Link</th>
  </tr>
  <tr>
    <td class="XML-Token">ABOV Semiconductor:126</td>
    <td>ABOV Semiconductor</td>
    <td>http://www.abov.co.kr/en/</td>
  </tr>
  <tr>
    <td class="XML-Token">Active-Semi:140</td>
    <td>Active-Semi</td>
    <td>http://www.active-semi.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Ambiq Micro:120</td>
    <td>Ambiq Micro</td>
    <td>http://www.ambiqmicro.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Amiccom:147</td>
    <td>Amiccom</td>
    <td>http://www.amiccom.com.tw</td>
  </tr>
  <tr>
    <td class="XML-Token">Analog Devices:1</td>
    <td>Analog Devices</td>
    <td>http://www.analog.com</td>
  </tr>
  <tr>
    <td class="XML-Token">APEXMIC:153</td>
    <td>Apex Microeletronics Co., Ltd.</td>
    <td>http://www.apexmic.com</td>
  </tr>
  <tr>
    <td class="XML-Token">ARM:82</td>
    <td>ARM Ltd.</td>
    <td>http://www.arm.com</td>
  </tr>
  <tr>
    <td class="XML-Token">ArteryTek:143</td>
    <td>ArteryTek</td>
    <td>http://www.arterytek.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Atmel:3</td>
    <td>Atmel Corporation (now Microchip)</td>
    <td>http://www.microchip.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Autochips:150</td>
    <td>Autochips Inc.</td>
    <td>http://www.autochips.com/index_en.aspx</td>
  </tr>
  <tr>
    <td class="XML-Token">CSR:118</td>
    <td>CSR</td>
    <td>http://www.csr.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Cypress:19</td>
    <td>Cypress Semiconductor</td>
    <td>http://www.cypress.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Dialog Semiconductor:113</td>
    <td>Dialog Semiconductor</td>
    <td>http://www.dialog-semiconductor.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Elmos Semiconductor AG:138</td>
    <td>Elmos Semiconductor AG</td>
    <td>http://www.elmos.com</td>
  </tr>
  <tr>
    <td class="XML-Token">EtaCompute:157</td>
	<td>Eta Compute Inc.</td>
	<td>https://www.etacompute.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Generic:5</td>
    <td>Generic: Not a vendor specific device</td>
    <td></td>
  </tr>
  <tr>
    <td class="XML-Token">Generalplus:151</td>
    <td>Generalplus Technology Inc.</td>
    <td>http://www.generalplus.com</td>
  </tr>
  <tr>
    <td class="XML-Token">GigaDevice:123</td>
    <td>GigaDevice</td>
    <td>http://www.gigadevice.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Goodix:155</td>
    <td>Goodix</td>
    <td>https://www.goodix.com</td>
  </tr>
  <tr>
    <td class="XML-Token">HDSC:145</td>
    <td>HUADA Semiconductor</td>
    <td>http://www.hdsc.com.cn</td>
  </tr>
  <tr>
    <td class="XML-Token">Hilscher:88</td>
    <td>Hilscher Gesellschaft für Systemautomation mbH</td>
    <td>http://www.hilscher.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Holtek:106</td>
    <td>Holtek Microelectronics</td>
    <td>http://www.holtek.com.tw</td>
  </tr>
  <tr>
    <td class="XML-Token">Infineon:7</td>
    <td>Infineon Technologies</td>
    <td>http://www.infineon.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Lapis Semiconductor:10</td>
    <td>Lapis Semiconductor</td>
    <td>http://www.lapis-semi.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Linear Technolgy:136</td>
    <td>Linear Technolgy</td>
    <td>http://www.linear.com/</td>
  </tr>
  <tr>
    <td class="XML-Token">Maxim:23</td>
    <td>Maxim Integrated</td>
    <td>http://www.maximintegrated.com</td>
  </tr>
  <tr>
    <td class="XML-Token">MediaTek:129</td>
    <td>MediaTek</td>
    <td>http://www.mediatek.com</td>
  </tr>
  <tr>
    <td class="XML-Token">MegaChips:128</td>
    <td>MegaChips</td>
    <td>http://www.megachips.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Megawin:70</td>
    <td>Megawin</td>
    <td>http://www.megawin.com.tw</td>
  </tr>
  <tr>
    <td class="XML-Token">Microchip:3</td>
    <td>Microchip (previously Atmel)</td>
    <td>http://www.microchip.com</td>
  </tr>
  <tr>
    <td class="XML-Token">MicroSemi:112</td>
    <td>Microsemi</td>
    <td>http://www.microsemi.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Milandr:99</td>
    <td>Milandr</td>
    <td>http://www.milandr.ru</td>
  </tr>
  <tr>
    <td class="XML-Token">MindMotion:132</td>
    <td>MindMotion</td>
    <td>http://www.mindmotion.com.cn</td>
  </tr>
  <tr>
    <td class="XML-Token">Nordic Semiconductor:54</td>
    <td>Nordic Semiconductor</td>
    <td>http://www.nordicsemi.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Nuvoton:18</td>
    <td>Nuvoton Technolgy Corp.</td>
    <td>http://www.nuvoton.com</td>
  </tr>
  <tr>
    <td class="XML-Token">NXP:11</td>
    <td>NXP</td>
    <td>http://www.nxp.com</td>
  </tr>
  <tr>
    <td class="XML-Token">ONSemiconductor:141</td>
    <td>ON Semiconductor</td>
    <td>https://www.onsemi.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Panasonic:131</td>
    <td>Panasonic</td>
    <td>http://www.panasonic.com/industrial</td>
  </tr>
  <tr>
    <td class="XML-Token">Realtek Semiconductor:124</td>
    <td>Realtek Semiconductor</td>
    <td>http://www.realtek.com.tw</td>
  </tr>
  <tr>
    <td class="XML-Token">Redpine Signals:125</td>
    <td>Repine Signals</td>
    <td>http://www.redpinesignals.com</td>
  </tr>
  <tr>
    <td class="XML-Token">RelChip:146</td>
    <td>RelChip </td>
    <td>http://www.relchip.com/</td>
  </tr>
  <tr>
    <td class="XML-Token">Renesas:117</td>
    <td>Renesas</td>
    <td>http://www.renesas.com</td>
  </tr>
  <tr>
    <td class="XML-Token">ROHM:103</td>
    <td>ROHM</td>
    <td>http://www.rohm.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Samsung:47</td>
    <td>Samsung Semiconductor</td>
    <td>http://www.samsung.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Silergy Corp:139</td>
    <td>Silergy Corporation</td>
    <td>http://silergy.com/</td>
  </tr>
  <tr>
    <td class="XML-Token">Silicon Labs:21</td>
    <td>Silicon Labs</td>
    <td>http://www.silabs.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Sinowealth:149</td>
    <td>Sino Wealth Electronic Ltd.</td>
    <td>http://www.sinowealth.com</td>
  </tr>
  <tr>
    <td class="XML-Token">SmartChip:156</td>
    <td>SmartChip</td>
    <td></td>
  </tr>
  <tr>
    <td class="XML-Token">Spansion:100</td>
    <td>Spansion (previously Fujitsu)</td>
    <td>http://www.spansion.com</td>
  </tr>
  <tr>
    <td class="XML-Token">STMicroelectronics:13</td>
    <td>STMicroelectronics</td>
    <td>http://www.st.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Synwit:144</td>
    <td>Synwit Technology Co.,LTD.</td>
    <td>http://www.synwit.cn</td>
  </tr>
  <tr>
    <td class="XML-Token">Texas Instruments:16</td>
    <td>Texas Instruments</td>
    <td>http://www.ti.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Toshiba:92</td>
    <td>Toshiba Semiconductor</td>
    <td>http://toshiba.semicon-storage.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Triad Semiconductor:104</td>
    <td>Triad Semiconductor</td>
    <td>http://www.triadsemi.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Unisoc:152</td>
    <td>Unisoc Communications, Inc.</td>
    <td>http://www.unisoc.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Vorago:137</td>
    <td>Vorago Technologies</td>
    <td>http://www.voragotech.com</td>
  </tr>
  <tr>
    <td class="XML-Token">Weltrend:148</td>
    <td>Weltrend</td>
    <td>http://www.weltrend.com.tw</td>
  </tr>
  <tr>
    <td class="XML-Token">WIZnet:122</td>
    <td>WIZnet</td>
    <td>http://www.wiznet.co.kr</td>
  </tr>
  <tr>
    <td class="XML-Token">Xinnova:135</td>
    <td>Xinnova Technology</td>
    <td>(n/a)</td>
  </tr>
  <tr>
    <td class="XML-Token">XMC:158</td>
    <td>Wuhan Xinxin Semiconductor Manufacturing Co., Ltd.</td>
    <td>http://www.xmcwh.com/</td>
  </tr>
  <tr>
    <td class="XML-Token">Zilog:89</td>
    <td>Zilog</td>
    <td>http://zilog.com/</td>
  </tr>
</table>

<p>&nbsp;</p>

\anchor AlgorithmStyleEnum <b>Table: Algorithm Styles</b>

The table lists the predefined Flash algorithm style. These values can be used in:
 - \ref element_algorithm

<table class="cmtable" summary="Enumeration: AlgorithmStyleEnum">
  <tr>
    <th>style=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">Keil</td>
    <td>\ref flashAlgorithm as defined by Arm/Keil</td>
  </tr>
  <tr>
    <td class="XML-Token">IAR</td>
    <td>Flash Programming Algorithm as defined by IAR</td>
  </tr>
  <tr>
    <td class="XML-Token">CMSIS</td>
    <td>To be agreed under CMSIS</td>
  </tr>

</table>

<p>&nbsp;</p>


\anchor DcoreEnum <b>Table: Device Cores</b>

The table lists available device cores. The list is extended from time to time to reflect new processor cores.
These values can be used in the elements:
- \ref element_accept
- \ref element_require
- \ref element_deny
- \ref element_processor
	
<table class="cmtable" summary="Enumeration: DcoreEnum">
  <tr>
    <th>Dcore=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M0</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m0" target="_blank">Arm Cortex-M0</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M0+</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m0-plus" target="_blank">Arm Cortex-M0+</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M1</td>
    <td><a href="http://www.arm.com/products/processors/cortex-m/cortex-m1.php" target="_blank">Arm Cortex-M1</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M3</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m3" target="_blank">Arm Cortex-M3</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M4</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m4" target="_blank">Arm Cortex-M4</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M7</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m7" target="_blank">Arm Cortex-M7</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M23</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m23" target="_blank">Arm Cortex-M23</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M33</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m33" target="_blank">Arm Cortex-M33</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M35P</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m35p" target="_blank">Arm Cortex-M35P</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-M55</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-m/cortex-m55" target="_blank">Arm Cortex-M55</a> processor based device</td>
  </tr>  
  <tr>
    <td class="XML-Token">SC000</td>
    <td>SecurCore <a href="http://developer.arm.com/products/processors/cortex-m/sc000-processor" target="_blank">SC000</a> based on technology of Cortex-M0.</td>
  </tr>
  <tr>
    <td class="XML-Token">SC300</td>
    <td>SecurCore <a href="http://developer.arm.com/products/processors/cortex-m/sc300-processor" target="_blank">SC300</a> based on technology of Cortex-M3.</td>
  </tr>
  <tr>
    <td class="XML-Token">ARMV8MBL</td>
    <td>Processor <a href="http://developer.arm.com/products/architecture/m-profile" target="_blank">ArmV8MBL</a> compliant with the Armv8-M Baseline Architecture.</td>
  </tr>
  <tr>
    <td class="XML-Token">ARMV8MML</td>
    <td>Processor <a href="http://developer.arm.com/products/architecture/m-profile" target="_blank">ArmV8MML</a> compliant with the Armv8-M Mainline Architecture.</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-R4</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-r/cortex-r4" target="_blank">Arm Cortex-R4</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-R5</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-r/cortex-r5" target="_blank">Arm Cortex-R5</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-R7</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-r/cortex-r7" target="_blank">Arm Cortex-R7</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-R8</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-r/cortex-r8" target="_blank">Arm Cortex-R8</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A5</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a5" target="_blank">Arm Cortex-A5</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A7</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a7" target="_blank">Arm Cortex-A7</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A8</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a8" target="_blank">Arm Cortex-A8</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A9</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a9" target="_blank">Arm Cortex-A9</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A15</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a15" target="_blank">Arm Cortex-A15</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A17</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a17" target="_blank">Arm Cortex-A17</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A32</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a32" target="_blank">Arm Cortex-A32</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A35</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a35" target="_blank">Arm Cortex-A35</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A53</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a53" target="_blank">Arm Cortex-A53</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A57</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a57" target="_blank">Arm Cortex-A57</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A72</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a72" target="_blank">Arm Cortex-A72</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">Cortex-A73</td>
    <td><a href="http://developer.arm.com/products/processors/cortex-a/cortex-a73" target="_blank">Arm Cortex-A73</a> processor based device</td>
  </tr>
  <tr>
    <td class="XML-Token">*</td>
    <td>Device based on any processor</td>
  </tr>
</table>

<p>&nbsp;</p>


\anchor DfpuEnum <b>Table: Device FPU</b>

The table lists values that indicate whether a CPU has an Floating Point Unit (FPU).
The tokens can be used in the elements:
- \ref element_accept  
- \ref element_require 
- \ref element_deny  
- \ref element_processor

<table class="cmtable" summary="Enumeration: DfpuEnum">
  <tr>
    <th>Dfpu=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">NO_FPU</td>
    <td>Hardware Floating Point Unit not present</td>
  </tr>
  <tr>
    <td class="XML-Token">FPU</td>
    <td>Hardware Floating Point Unit present</td>
  </tr>
  <tr>
    <td class="XML-Token">SP_FPU</td>
    <td>Single Precision Hardware Floating Point Unit present</td>
  </tr>
  <tr>
    <td class="XML-Token">DP_FPU</td>
    <td>Double Precision Hardware Floating Point Unit present</td>
  </tr>
</table>

<p>&nbsp;</p>

\anchor DmpuEnum <b>Table: Device MPU</b>

The table shows predefined values that identify whether a CPU has an Memory Protection Unit (MPU).
The values can be used in the elements:
- \ref element_accept  
- \ref element_require 
- \ref element_deny  
- \ref element_processor

<table class="cmtable" summary="Enumeration: DmpuEnum">
  <tr>
    <th>Dmpu=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">MPU</td>
    <td>Memory Protection Unit is present</td>
  </tr>
  <tr>
    <td class="XML-Token">NO_MPU</td>
    <td>No Memory Protection Unit is present</td>
  </tr>
</table>

<p>&nbsp;</p>

\anchor DtzEnum <b>Table: Device Trust Zone </b>

The table shows predefined values that identify whether a CPU implements TrustZone(TZ).
The values can be used in the elements:
- \ref element_accept  
- \ref element_require 
- \ref element_deny  
- \ref element_processor

<table class="cmtable" summary="Enumeration: DtzEnum">
  <tr>
    <th>Dtz=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">TZ</td>
    <td>TrustZone is present</td>
  </tr>
  <tr>
    <td class="XML-Token">NO_TZ</td>
    <td>No TrustZone is present</td>
  </tr>
</table>

<p>&nbsp;</p>		

\anchor DsecureEnum <b>Table: Software Model Selection </b>

The table shows predefined values that identify whether an application will run in secure mode.
The values can be used in the elements:
- \ref element_accept  
- \ref element_require 
- \ref element_deny  

<table class="cmtable" summary="Enumeration: DsecureEnum">
  <tr>
    <th>Dsecure=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">Secure</td>
    <td>Application is built to run in secure mode.</td>
  </tr>
  <tr>
    <td class="XML-Token">Non-secure</td>
    <td>Application is built to run in non-secure mode.</td>
  </tr>
  <tr>
    <td class="XML-Token">TZ-disabled</td>
    <td>Application is built with TrustZone security disabled.</td>
  </tr>
</table>

<p>&nbsp;</p>		


\anchor DdspEnum <b>Table: Device implements DSP Instructions</b>

The table shows predefined values that identify whether a CPU implements DSP instructions (DSP).
The values can be used in the elements:
- \ref element_accept  
- \ref element_require 
- \ref element_deny  
- \ref element_processor

<table class="cmtable" summary="Enumeration: DdspEnum">
  <tr>
    <th>Ddsp=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">DSP</td>
    <td>DSP instructions supported</td>
  </tr>
  <tr>
    <td class="XML-Token">NO_DSP</td>
    <td>No DSP instructions supported</td>
  </tr>
</table>

<p>&nbsp;</p>		

\anchor DmveEnum <b>Table: Device implements M-Profile Vector Extension Instructions</b>

The table shows predefined values that identify whether a CPU implements MVE instructions (MVE).
The values can be used in the elements:
- \ref element_accept  
- \ref element_require 
- \ref element_deny  
- \ref element_processor

<table class="cmtable" summary="Enumeration: DmveEnum">
  <tr>
    <th>Dmve=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">NO_MVE</td>
    <td>No MVE instructions supported</td>
  </tr>
  <tr>
    <td class="XML-Token">MVE</td>
    <td>Integer MVE instructions supported</td>
  </tr>
  <tr>
    <td class="XML-Token">FP_MVE</td>
    <td>Floating point and Integer MVE instructions supported</td>
  </tr>
</table>

<p>&nbsp;</p>		

\anchor DendianEnum <b>Table: Endianness</b>

The table lists values representing	the endianness of a device.
The values can be used in the elements:
- \ref element_accept 
- \ref element_require
- \ref element_deny  
- \ref element_processor

<table class="cmtable" summary="Enumeration: DendianEnum">
  <tr>
    <th>Dendian=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">Little-endian</td>
    <td>The least significant byte of a multi-byte access is located at the specified address.</td>
  </tr>
  <tr>
    <td class="XML-Token">Big-endian</td>
    <td>The most significant byte of a multi-byte access is located at the specified address.</td>
  </tr>
  <tr>
    <td class="XML-Token">Configurable</td>
    <td>The byte ordering of multi-byte accesses is configurable.</td>
  </tr>
</table>

<p>&nbsp;</p>
<hr>

\section element_debugconfig /package/devices/family/.../debugconfig

Default debugger configuration for a target connection.

\b Example
\code

<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <debugconfig default="jtag" clock="10000000" swj="1" sdf="Debug/SDF/lpc4300.sdf"/>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: debugconfig">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>default</td>
    <td>
      Specifies the default debug protocol to use for target connections. Predefined tokens must be used as
      defined in \ref DebugProtocolEnum "Table: Debug Protocol Type". Default value is \token{swd}.
    </td>
    <td>DebugProtocolEnum</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>clock</td>
    <td>Specifies the default debug clock setting in Hz for a target connection. Default value is \token{10000000}.</td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>swj</td>
    <td>
      The device is accessed via a CoreSight SWJ-DP capable of switching between Serial Wire Debug (SWD) and JTAG protocols.
      Default value is \token{true}.
    </td>
    <td>xs:bool</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>dormant</td>
    <td>
      The device is accessed via a CoreSight DP that requires the dormant state to switch debug protocols.
      Default value is \token{false}.
    </td>
    <td>xs:bool</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>sdf</td>
    <td>
      This attribute specifies the filename and path of the system description file (SDF).
      The system description file contains information about CoreSight components, there versions and how they
      are interconnected and hooked to debug and access ports. If not specified an autodetection needs to
      be initiated by the debugger at connection time.
    </td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>		

\anchor DebugProtocolEnum <b>Table: Debug Protocol Type</b>

The table lists the values for debug protocol types. The values can be used in 
 - \ref element_debugconfig

<table class="cmtable" summary="Enumeration: DataPatchAccessTypeEnum">
  <tr>
    <th>type=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">jtag</td>
    <td>
      JTAG debug protocol.
    </td>
  </tr>
  <tr>
    <td class="XML-Token">swd</td>
    <td>
      Arm Serial Wire Debug (SWD) protocol.
    </td>
  </tr>
  <tr>
    <td class="XML-Token">cjtag</td>
    <td>
      CJTAG concurrent jtag debug protocol.
    </td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>

\section element_debugvars /package/devices/family/.../debugvars

Specify \ref DebugVars "global debug access variables". Use these in addition 
to the \ref PredefinedDebugVars "pre-defined variables" in order to
query settings from a debug access sequences.<br>
<br>
Define debug access variables with statements of the following form.
\code
__var uservar = value;  // Comment: Define "uservar" and initialize to "value"
\endcode

\note 
- Initialization values must be constant unsigned numbers. No expressions are allowed.
- User-defined debug access variables are <b>read-only</b> in a debug access sequence.
- Pre-defined debug access variables cannot be set in this element.

\b Example
\code

<family Dfamily="EFM32WG Series" Dvendor="Energy Micro:97">
  ...
  <debugvars configfile="Debug/EFM32WGxxx.dbgconf" version="1.0">
  
    __var __TPIU_pinlocation = 0;  // Select one of four possible TPIU pin locations
    
    __var __SWO_pinlocation  = 0;  // Select one of four possible SWO pin locations
    
  </debugvars>
  ...
  <sequences>
    <sequence name="TraceStart">
      ...
      <block if="__TPIU_pinlocation == 2">
        ...
        <!-- Configure device to use pins as defined for TPIU pin location 2 -->
        ...
      </block>
      ...
    </sequence>
  </sequences>
  ...
  <debug __dp="0" __ap="0"/>
  ...
</family>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Element: debugvars">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>configfile</td>
    \anchor debugvars_configfile
    <td>
      Configuration file with path relative to the package base folder (extension *.DBGCONF). This file contains 
      assignments of a default value to global debug access variables. This file gets copied to the project folder
      and is editable by the end-user. This file is read by the debugger after processing the global debug access variables.
      By editing the values of the debug access variables, the end-user effectively controls the behavior of sequences.
      The file can only assign new values but must not specify any new debug access variables.
      \ref configWizard "Configuration Wizard Annotations" shall be used within the file to provide a graphical user interface
      for editing configuration options.
    </td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>\ref VersionType "version"</td>
    <td>
      Version refers to the file version of the configfile attribute. If a configfile is specified the version attribute becomes
      mandatory. The version shall be incremented if any changes have been made to the global debug access variable names or default
      values. Based on the version information the tool environment will load a configfile with the version required by the debug
      description. The end-user may be required to update the settings after updating to a new version.
    </td>
    <td>\ref VersionType</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>Pname</td>
    <td>
      Reference to a processor identifier as specified for a <b>processor</b> element. If <b>Pname</b> is set
      for this <b>debugvars</b> element, the debug access variables and <b>configfile</b> of this element
      are only valid for a debug connection to the referenced processor. Otherwise, they are valid for all processors.
      <b>This attribute must be set if defining multiple \em debugvars sections for a device.</b>
      Only alphabetical characters, decimal digits, '-' and '_' are allowed.
    </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>

\b Example: Configuration File 
\code
// File: EFM32WGxxx.dbgconf 
// Version: 1.0
// <<< Use Configuration Wizard in Context Menu >>>
// <h>Trace Pin Setup
 // <o> TPIU Pin Location
//   <0=> Pin Location 0
//   <1=> Pin Location 1
//   <2=> Pin Location 2
//   <3=> Pin Location 3
// <i> Select TPIU pin location for your board configuration:
// <i> - Pin Location 0 (TRACECLK: PD7, TRACEDATA0: PD6, TRACEDATA1: PD3,  TRACEDATA2: PD4,  TRACEDATA3: PD5)
// <i> - Pin Location 1 (TRACECLK: PF8, TRACEDATA0: PF9, TRACEDATA1: PD13, TRACEDATA2: PB15, TRACEDATA3: PF3)
// <i> - Pin Location 2 (TRACECLK: PC6, TRACEDATA0: PC7, TRACEDATA1: PD3,  TRACEDATA2: PD4,  TRACEDATA3: PD5)
// <i> - Pin Location 3 (TRACECLK: PA6, TRACEDATA0: PA2, TRACEDATA1: PA3,  TRACEDATA2: PA4,  TRACEDATA3: PA5)
// <i> Default: Pin Location 0
__TPIU_pinlocation = 0;
  
// <o> SWO Pin Location
//   <0=> Pin Location 0
//   <1=> Pin Location 1
//   <2=> Pin Location 2
//   <3=> Pin Location 3
// <i> Select SWO pin location for your board configuration:
// <i> - Pin Location 0 (SWO: PF2)
// <i> - Pin Location 1 (SWO: PC15)
// <i> - Pin Location 2 (SWO: PD1)
// <i> - Pin Location 3 (SWO: PD2)
// <i> Default: Pin Location 0
__SWO_pinlocation = 0;
  
// </h>
// <<< end of configuration section >>>
\endcode

<p>&nbsp;</p>

<hr>

\section element_debugport /package/devices/family/.../debugport

Describes a CoreSight debug port of the device and its capabilities. The element can occur on various
levels. Use unique ID values for the attribute <b>__dp</b> to distinguish multiple <b>debugport</b>
elements in later references.

<b>debugport</b> elements are required for targets with multiple debug ports. These elements can be omitted
for devices with a single debug port. If no <b>debugport</b> element exists, then the only
allowed <b>__dp</b> ID in later references is \token{0}.

\b Example
\code

<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <debugconfig default="jtag" clock="10000000" swj="1"/>
  
  <debugport __dp="0">
    <jtag tapindex="0"/>
    <swd/>
  </debugport>
  
  <debugport __dp="1">
    <jtag tapindex="1"/> 
  </debugport>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: debugport">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>__dp</td>
    <td>
      Unique ID of this <b>debugport</b>. It must be used consistently in references within the scope of
      the parent section.
    </td>
    <td>xs:unsignedInt</td>
    <td>required</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_dp_jtag "jtag"</td>
    <td>Describe JTAG Test Access Port (TAP) properties of this debug port.</td>
    <td>JtagType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_dp_swd "swd"</td>
    <td>Describe CoreSight Serial Wire Debug Port (SW-DP) properties of this debug port.</td>
    <td>SwdType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_dp_cjtag "cjtag"</td>
    <td>Describe CJTAG Test Access Port (TAP) properties of this debug port.</td>
    <td>CjtagType</td>
    <td>0..1</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>


\section element_accessportV1 /package/devices/family/.../accessportV1

Describes a CoreSight access port (APv1) of the device and its selection parameters. The element can occur on various
levels. Use unique ID values for the attribute <b>__apid</b> to distinguish multiple <b>accessportV1</b> and <b>\ref element_accessportV2 "accessportV2"</b>
elements in later references.

<b>accessportV1</b> elements are required for targets that mix ADIv5 and ADIv6 debug ports and hence also have \ref element_accessportV2 "APv2" access ports.
Pairs of <b>__dp</b> and <b>__ap</b> values must not be used to reference an access port if a debug description describes access port elements.


\b Example
\code

<family Dvendor="ARM:82" Dfamily="...">
  ...
  <debugport __dp="0">  <!-- ADIv5 DAP -->
    <jtag tapindex="0"/>
    <swd/>
  </debugport>
  
  <debugport __dp="1">  <!-- ADIv6 DAP -->
    <jtag tapindex="1"/>
  </debugport>

  <!-- ADIv5 DAP -->
  <accessportV1 __apid="0" _dp="0" index="0"/>
  <accessportV1 __apid="1" _dp="0" index="1"/>
    
  <!-- ADIv6 DAP -->
  <accessportV2 __apid="2" _dp="1" address="0x00002000"/>
  <accessportV2 __apid="3" _dp="1" address="0x00004000"/>
   
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: accessportV1">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>__apid</td>
    <td>
      Unique ID of this element with respect to other \ref element_accessportV2 "access port elements".
      It must be used consistently in references within the scope of the parent section.
    </td>
    <td>xs:unsignedInt</td>
    <td>required</td>
  </tr>
  <tr>
    <td>__dp</td>
    <td>
      Unique ID of the <b>debugport</b> used to access this access port.
      Optional if exactly one <b>debugport</b> exists.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>index</td>
    <td>
      The index to select this access port for a target access.
    </td>
    <td>xs:unsignedInt</td>
    <td>required</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>


\section element_accessportV2 /package/devices/family/.../accessportV2

Describes a CoreSight access port (APv2) of the device as introduced with the Arm Debug Interfaces (ADI) v6 and its selection parameters.
The element can occur on various levels. Use unique ID values for the attribute <b>__apid</b> to distinguish multiple <b>\ref element_accessportV1 "accessportV1"</b> and <b>accessportV2</b> elements in later references.

An <b>accessportV2</b> must be later selected via <b>__apid</b>. It is not possible to use a pair of <b>__dp</b> and <b>__ap</b> values.


\b Example
\code

<family Dvendor="ARM:82" Dfamily="...">
  ...
  <debugport __dp="0">  <!-- ADIv5 DAP -->
    <jtag tapindex="0"/>
    <swd/>
  </debugport>
  
  <debugport __dp="1">  <!-- ADIv6 DAP -->
    <jtag tapindex="1"/>
  </debugport>

  <!-- ADIv5 DAP -->
  <accessportV1 __apid="0" _dp="0" index="0"/>
  <accessportV1 __apid="1" _dp="0" index="1"/>
    
  <!-- ADIv6 DAP -->
  <accessportV2 __apid="2" _dp="1" address="0x00002000"/>
  <accessportV2 __apid="3" _dp="1" address="0x00004000"/>
    
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: accessportV2">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>__apid</td>
    <td>
      Unique ID of this element with respect to other \ref element_accessportV1 "access port elements".
      It must be used consistently in references within the scope of the parent section.
    </td>
    <td>xs:unsignedInt</td>
    <td>required</td>
  </tr>
  <tr>
    <td>__dp</td>
    <td>
      Unique ID of the <b>debugport</b> used to access this access port.
      Optional if exactly one <b>debugport</b> exists.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>address</td>
    <td>
      The address to select this access port in its parent's address space for a target access.
    </td>
    <td>xs:unsignedInt</td>
    <td>required</td>
  </tr>
  <tr>
    <td>parent</td>
    <td>
      Reference to the <b>__apid</b> of the parent access port if the system contains nested APv2 access ports.<br>
      <b>parent</b> must not be specified if the access port is directly connected to the <b>debugport</b>.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>


\section element_dp_jtag /package/devices/family/.../debugport/jtag

Indicates availability of a JTAG interface for the <b>debugport</b> parent element. Its
attributes allow the manual override of a debugger's automatic JTAG Test Access Port (TAP)
detection.

\b Example
\code
<family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
  ...
  <debugconfig default="swd" clock="10000000" swj="1"/>
  
  <debugport __dp="0">
    <jtag tapindex="0" idcode="0x4BA00477" irlen="4"/>
    <swd  idcode="0x2BA01477"/>
  </debugport>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: jtag">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td colspan="3">\ref element_debugport</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>tapindex</td>
    <td>Specifies the TAP index relative to the JTAG scan chain of this device. A debugger needs to determine the absolute index
    if the device is part of an extended scan chain. Default value is \token{0}. </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>idcode</td>
    <td>Specifies the IDCODE of the JTAG TAP. This value overrides the IDCODE read from the target. </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
<!--- finalize when there are multidrop devices available (or when we have DS-5 support for that)
  <tr>
    <td>targetsel</td>
    <td>Specifies the value to write to a CoreSight debug port's TARGETSEL register to select this port for connection.
    The element is required for debug ports with multi-drop support. It is ignored otherwise. <b>(Unsupported)</b></td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
-->
  <tr>
    <td>irlen</td>
    <td>Specifies the instruction register length of the JTAG TAP. This value overrides the instruction register length detected by a debugger. </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>

\section element_dp_swd /package/devices/family/.../debugport/swd

Indicates availability of an Arm Serial Wire Debug (SWD) interface for the <b>debugport</b> parent element.
Its attributes allow the manual override of SWD port characteristics as read from the target and provide
information for the port selection in a system with multi-drop SWD support.

\b Example
\code
<family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
  ...
  <debugconfig default="swd" clock="10000000" swj="1"/>
  
  <debugport __dp="0">
    <jtag tapindex="0" idcode="0x4BA00477" irlen="4"/>
    <swd idcode="0x2BA01477"/>
  </debugport>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: swd">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td colspan="3">\ref element_debugport</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>idcode</td>
    <td>Specifies the IDCODE of the SWD port. It overrides the value read from the port's IDCODE register. </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
<!--- finalize when there are multidrop devices available (or when we have DS-5 support for that)
  <tr>
    <td>targetsel</td>
    <td>Specifies the value to write to a CoreSight debug port's TARGETSEL register to select this port for connection.
    The element is required for debug ports with multi-drop SWD support. It is ignored otherwise. <b>(Unsupported)</b></td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
--->
</table>

<p>&nbsp;</p>		
<hr>

\section element_dp_cjtag /package/devices/family/.../debugport/cjtag

Indicates availability of a CJTAG interface for the <b>debugport</b> parent element. Its
attributes allow the manual override of a debugger's automatic CJTAG Test Access Port (TAP)
detection.

\b Example
\code
<family Dfamily="STM32F4" Dvendor="STMicroelectronics:13">
  ...
  <debugconfig default="swd" clock="10000000" swj="1"/>
  
  <debugport __dp="0">
    <cjtag tapindex="0" idcode="0x4BA00477" irlen="4"/>
    <swd  idcode="0x2BA01477"/>
  </debugport>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: cjtag">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td colspan="3">\ref element_debugport</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>tapindex</td>
    <td>Specifies the TAP index relative to the JTAG scan chain of this device. A debugger needs to determine the absolute index
    if the device is part of an extended scan chain. Default value is \token{0}. </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>idcode</td>
    <td>Specifies the IDCODE of the JTAG TAP. This value overrides the IDCODE read from the target. </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>irlen</td>
    <td>Specifies the instruction register length of the JTAG TAP. This value overrides the instruction register length detected by a debugger. </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>

\section element_sequences /package/devices/family/.../sequences

Container for debug access sequences for this device.

\b Example
\code
<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <sequences>
    ...
    <sequence name="DebugCoreStart" Pname="Cortex-M0">
      ...
    </sequence>
    ...
    <sequence name="ResetSystem" Pname="Cortex-M4">
      ...
    </sequence>
    ...
    <sequence name="TraceStart" Pname="Cortex-M4">
      ...
    </sequence>
    ...
  </sequences>
  ...
</family>
\endcode
<p>&nbsp;</p>		

<table class="cmtable" summary="Element: sequences">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_sequence "sequence"</td>
    <td>
      Describe a debug access sequence.
    </td>
    <td>SequenceType</td>
    <td>1..*</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>

\section element_sequence /package/devices/family/.../sequences/sequence

Describes a Debug Access Sequence which contains <b>control</b> and
<b>block</b> elements. <b>block</b> elements contains statements
including calls to \ref DebugFunctions "Debug Access Functions". A Debug
Access Sequence overrides or extends the default functionality of a development tool.
Refer to \ref usage_of_sequences for details.<br>

\note
- <b>control</b> elements can contain other <b>control</b> and <b>block</b>
  elements. <b>The maximum nesting of \em control elements is 10.</b>

\b Example
\code
<family Dfamily="Generic Family" Dvendor="Generic:5">
  ...
  <sequences>
    ...
    <sequence name="UserSequence">
      
      <block info="Define variables and do debug accesses">
        __var tpWidth = (__traceout &amp; 0x003F0000) >> 16;
        ...
      </block>
      
      <control if="__traceout &amp; 0x2" info="Parallel Trace Port enabled">
      
        <block>
          // Do something generic for parallel trace port trace
          ...
        </block>
        
        <control if="tpWidth == 1" info="Configure device for 1-bit TPIU trace.">
        
          <block>
            // Do debug accesses
            ...
          </block>
          
        </control>
        
        <control if="tpWidth == 2" info="Configure device for 2-bit TPIU trace.">
        
          <block>
            // Do debug accesses
            ...
          </block>
          
        </control>
        
        <control if="tpWidth == 4" info="Configure device for 4-bit TPIU trace.">
        
          <block>
            // Do debug accesses
            ...
          </block>
          
        </control>

      </control>
      ...
    </sequence>
    ...
  </sequences>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: sequence">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_sequences "sequences"</td>
    <td colspan="3">\ref element_sequences</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>name</td>
    <td>Name of the Debug Access Sequence:<br>
    - Pre-defined names are executed by the development tool described under \ref usage_of_sequences.
    - Any Debug Access Sequence can be executed the \ref DebugFunctions "debug access function" <b>Sequence</b>.
    </td>
    <td>xs:string</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Pname</td>
    <td>
      Reference to a processor identifier as specified for a <b>processor</b> element. If <b>Pname</b> is set
      for this <b>sequence</b> element, a debugger executes the debug access sequence only for a debug connection
      to the referenced processor. Otherwise, it is executed for all processors.
      <b>This attribute must be set if defining multiple implementations of the same debug access sequence.</b>
      Only alphabetical characters, decimal digits, '-' and '_' are allowed. 
    </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>disable</td>
    <td>Disables execution of the \ref default_sequences "Predefined Debug Access Sequence".</td>
    <td>xs:boolean</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>info</td>
    <td>Descriptive text to display for example for error diagnostics.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_seq_control "control"</td>
    <td>
      Describe a debug access sequence flow control element.
    </td>
    <td>SequenceControlType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_seq_block "block"</td>
    <td>
      Describe a block of debug accesses.
    </td>
    <td>SequenceBlockType</td>
    <td>0..*</td>
  </tr>
</table>


\section element_seq_control /package/devices/family/.../sequences/sequence/control

Describes flow control like <b>if</b> and <b>while</b> blocks for debug access sequences.

\b Example
\code
<family Dfamily="Generic Family" Dvendor="Generic:5">
  ...
  <sequences>
    ...
    <sequence name="UserSequence">
      ...
      <block info="Define variables and do debug accesses">
        __var doIfBlock      = 1;
        __var whileCondition = 1;
        ...
      </block>
      ...
      <control if="doIfBlock">
      
        <block>
          // Do debug accesses
          ...
        </block>
        
      </control>
      ...
      <control while="whileCondition" timeout="5000">
      
        <block>
          // Execute while "whileCondition" different from '0' with a timeout of 5ms
          whileCondition = 0;
        </block>
        
      </control>
      ...
    </sequence>
    ...
  </sequences>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: control">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_sequence "sequence"</td>
    <td colspan="3">\ref element_sequence</td>
  </tr>
  <tr>
    <td>\ref element_seq_control "control"</td>
    <td colspan="3">\ref element_seq_control</td>
  </tr>
  <tr>
    <th>Attribute</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>if</td>
    <td>
      Expression describing the condition under which to execute this sequence block.
      The block is skipped if the condition resolved to \token{false}. Defaults to
      \token{true} if not set.
      Refer to \ref ExpressionType "Expression Rules" for the syntax.
    </td>
    <td>ExpressionType</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>while</td>
    <td>
      Expression describing a while-condition. The execution of the block contents is
      repeated while the condition resolves to \token{true}, or until an optional
      <b>timeout</b> is reached.
      Refer to \ref ExpressionType "Expression Rules" for the syntax.
    </td>
    <td>ExpressionType</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>timeout</td>
    <td>
      Timeout in microseconds for a <b>block</b> with a <b>while</b> condition. A debugger must
      extend the timeout to the closest possible time granularity. If the timeout is reached,
      the current iteration including a last evaluation of the <b>while</b> condition must
      finish. A value of \token{0} disables the timeout.<br>
      This attribute defaults to \token{0}.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>info</td>
    <td>Descriptive text to display for example for error diagnostics.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_seq_control "control"</td>
    <td>
      Describe a debug access sequence flow control element.
    </td>
    <td>SequenceControlType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_seq_block "block"</td>
    <td>
      Describe a block of debug accesses.
    </td>
    <td>SequenceBlockType</td>
    <td>0..*</td>
  </tr>
</table>

<p>&nbsp;</p>
<hr>

\section element_seq_block /package/devices/family/.../sequences/sequence/block

Describes a block of debug accesses. See \ref DebugSyntaxRules "Debug Access Syntax Rules"
for details on the allowed syntax of the block contents.

\b Example
\code
<family Dfamily="Generic Family" Dvendor="Generic:5">
  ...
  <sequences>
    ...
    <sequence name="UserSequence">
      ...
      <block info="Define condition variales for later use in block elements.">
        // Variable definition by __var keyword
        __var doIfBlock      = 1;
        __var whileCondition = 1;
      </block>
      ...
    </sequence>
    ...
  </sequences>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: block">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_sequence "sequence"</td>
    <td colspan="3">\ref element_sequence</td>
  </tr>
  <tr>
    <td>\ref element_seq_control "control"</td>
    <td colspan="3">\ref element_seq_control</td>
  </tr>
  <tr>
    <th>Attribute</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>atomic</td>
    <td>
      Instruct the debugger to execute the block contents atomically; a debugger needs to
      download and buffer all debug accesses to the debug probe and finish the
      execution without further communication to the host PC. If a debugger cannot
      support an atomic block it must abort the execution of the debug access sequence.<br>
      </td>
    <td>xs:boolean</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>info</td>
    <td>Descriptive text to display for example for error diagnostics.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
</table>

<b>Atomic Blocks:</b>
- Within an atomic block a variable must no longer be used as an r-value after a result from a target access has been assigned to it.
- Support for atomic blocks is highly debugger dependent. Keep them as short and simple as possible
to address a wide range of debuggers.
- <b>Query</b> and <b>Sequence</b> debug access functions must not be used in an atomic block.

<p>&nbsp;</p>

\anchor DebugSyntaxRules <b>Debug Access Syntax Rules</b>

Debug accesses are described in <b>block</b> elements of a debug access sequence (<b>sequence</b> element).
The following syntax is used for this purpose:
- The contents of a <b>block</b> element is a series of statements.
- Each statement must begin in a new line and is terminated by a \token{;} character.
- A typical statement consists of variable, followed by a \token{=} character and an expression, where the
\token{=} character is an assignment of the \ref ExpressionType "expression" result to the variable:
\code
variable = expression;
\endcode
- Alternatively, a statement can be a sole \ref ExpressionType "expression" without storing its result
to a variable.
\code
expression;
\endcode
- Comments begin with two slashes (\token{//}) and end with a linebreak:
\code
// Whole line is a comment
variable = expression;  // Comment appended to statement
\endcode
- Variables must be defined using the keyword \token{__var}. The definition must include an initalization
  of the variable:
\code
__var variable = 0;
\endcode
- Variables can be defined only once within a scope. Scopes begin with entering a debug access
  sequence or a <b>control</b> element. They are extended to child <b>control</b> elements.
  Variables of a parent scope can be modified. Leaving a scope destroys all variables defined in it.<br>
  <b>\em block elements do not begin a new scope.</b>
\code
<sequence name="MySequence">
  
  <block info="Block 1">
    __var condvar = 1;
    __var myvar1  = 5;
    __var myvar2  = 0;
  </block>
  
  <control if="condvar">
    <block>
      // __var myvar1 = 2;      // Redefinition, not allowed!
      __var myvar3 = 2;
      myvar2 = myvar1 + myvar3; // Assign value (5+2) = 7
    </block>
  </control>
  
  <block info="Block 2">
    myvar1 = myvar2 + 1;  // Variable myvar1 holds the value '8' after this statement
    // myvar2 = myvar3;   // myvar3 does not exist in this scope, not allowed!
  </block>
  
</sequence>
\endcode
- The debug access variables <b>__dp</b>, <b>__ap</b>, <b>__apid</b>, and <b>__errorcontrol</b> can be modified
  within a debug access sequence. An assigned value is held until leaving the sequence. Calling
  another sequence by the <b>Sequence</b> debug access function will push their values on a
  sequence execution stack. The values are restored when returning from such a call.
- Please refer to \ref DebugFunctions "Debug Access Functions" for how to use <b>__dp</b>, <b>__ap</b>,
  and <b>__apid</b> to select access ports for target accesses.
- The debug access variable <b>__Result</b> can be modified within a debug access sequence.
  Its value is held until the debug access sequence returns to the debugger. Hence its value is
  <b>not</b> pushed on a sequence execution stack when calling into another sequence by the <b>Sequence</b>
  debug access function.


\anchor ExpressionType <b>Expression Rules</b>

Expressions are used in various places to describe one of the following:
- A value as assigned in a \ref DebugSyntaxRules "debug access statement".
- A condition to use in the <b>if</b> attribute of a <b>control</b> element.
- A condition to use in the <b>while</b> attribute of a <b>control</b> element.
- A parameter to a debug access function as described below.

An expression may consist of the following:
- Constant numbers in decimal and hexadecimal representation (prefix \token{0x}).
- Arithmetic operators such as \token{+}, \token{-}, \token{*}, \token{/}, and \token{%}.
- Bit-arithmetic operators such as \token{&}, \token{|}, \token{~}, \token{^}, \token{>>}, and \token{<<}.
- Comparison-operators such as \token{==}, \token{!=}, \token{<}, \token{>}, \token{<=}, and \token{>=}.
- Logic operators such as \token{!}, \token{&&}, \token{||}, and \token{==}.
- Conditional expression operations like: \code (x < y) ? a : b \endcode
- Precedence of sub-expressions is indicated by brackets (\token{(}, \token{)}). C-like precedence applies 
  if brackets are omitted.
- References to \ref DebugVars "debug access variables" for evaluating debug settings.
- Calls to \ref DebugFunctions "debug access functions".

\note
- All values used in expressions resolve to 64-bit unsigned integer values.
- All logic-operations and comparisons resolve to the value \token{1} if true, to \token{0} otherwise.
- XML prohibits the use of the characters \token{&}, \token{<}, and \token{>}. Use the corresponding
  XML entity names instead: \token{&amp;amp;}, \token{&amp;lt;}, and \token{&amp;gt;}.

\section element_debug /package/devices/family/.../debug

Describes configuration settings, default values, and patches for data accesses for a debug connection. Multiple <b>debug</b>
elements can be defined which are either specific to a processor identified by attribute <b>Pname</b>, or which apply
to all connections.

\b Example \b 1
\code
<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <debug Pname="Cortex-M4" __dp="0" __ap="0" svd="SVD/LPC43xx.svd">
    ...
  </debug>
  ...
  <debug Pname="Cortex-M0" __dp="1" __ap="0" svd="SVD/LPC43xx.svd">
    ...
  </debug>
  ...
</family>
\endcode

\b Example \b 2
\code
<device name="MCIMX7D">
  ...
  <processor Dcore="Cortex-A7" DcoreVersion="r0p5" Pname="Cortex-A7" Punits="2" />
  <processor Dcore="Cortex-M4" DcoreVersion="r0p1" Pname="Cortex-M4"/>
  ...
  <debug   Pname="Cortex-A7" Punit="0" svd="SVD/iMX7D_A7.svd" __dp="0" __ap="1" address="0x80070000"/> 
  <debug   Pname="Cortex-A7" Punit="1" svd="SVD/iMX7D_A7.svd" __dp="0" __ap="1" address="0x80072000"/>
  <debug   Pname="Cortex-M4"           svd="SVD/iMX7D_M4.svd" __dp="0" __ap="4"/>
  ...
</device>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: debug">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>__dp</td>
    <td>
      Default debug port ID to use for target accesses in this debug connection. The allowed values are
      defined in <b>debugport</b> elements for this device. If no <b>debugport</b> element exists, the only
      allowed value is \token{0}.<br>
      The debug access variable <b>__dp</b> is initialized to this value when entering a pre-defined debug access
      sequence because of a debug event.<br>
      This attribute defaults to \token{0} if not set.<br>
      Must not be used if \ref element_accessportV1 "accessportV1" or \ref element_accessportV2 "accessportV2" elements are specified. Use <b>__apid</b> instead.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>__ap</td>
    <td>
      Default access port index to use for target accesses in this debug connection.<br>
      The debug access variable <b>__ap</b> is initialized to this value when entering a pre-defined debug access
      sequence because of a debug event.<br>
      This attribute defaults to \token{0} if not set.<br>
      Must not be used if \ref element_accessportV1 "accessportV1" or \ref element_accessportV2 "accessportV2" elements are specified. Use <b>__apid</b> instead.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>__apid</td>
    <td>
      Default access port ID to use for target accesses in this debug connection.<br>
      The debug access variable <b>__apid</b> is initialized to this value when entering a pre-defined debug access sequence because of a debug event. Requires \ref element_accessportV1 "accessportV1" and/or \ref element_accessportV2 "accessportV2" elements to be specified.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>address</td>
    <td>
      Base "address" of the CPU debug block referenced by "Pname" (and "Punit" in an MPCore system). Use in combination
      with attributes "__dp" and "__ap", or "__apid" respectively. Mandatory if multiple CPU debug blocks are accessible via a single AP. Optional
      if an AP hosts a single CPU debug block. Then a debugger can determine its base address by analyzing the ROM
      table behind the selected AP.
    </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>svd</td>
    <td>The system viewer description (*.SVD) file to load for this debug connection. The file path is relative
    to the package base folder.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>Pname</td>
    <td>
      Reference to a processor identifier as specified for a <b>processor</b> element. If <b>Pname</b> is set
      this <b>debug</b> element's settings and data patches only apply for target connections to the referenced
      processor. Otherwise, they apply for all processors.
      <b>This attribute must be set if defining multiple \em debug elements within the same section.</b>
      Only alphabetical characters, decimal digits, '-' and '_' are allowed.
    </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>Punit</td>
    <td>
      Use "Punit" in addition to "Pname" to select a specific processor unit of a symmetric MPCore that the \<debug\>
      configuration applies to. "Punit" is a '0'-based index and must be less than "Punits" of \<processor\>. If
      "Punit" is not specified, the \<debug\> configuration applies to all processor units of the MPCore.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>\anchor defaultResetSequence defaultResetSequence</td>
    <td>
      Specifies the debug sequence that shall be used by default for the reset operation. It can be set to one of the predefined reset sequences such as \ref resetSystem, \ref resetHardware and \ref resetProcessor or also to any user-defined debug sequence. If not specified then \ref resetSystem sequence will be set as default.
    </td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_dbg_datapatch "datapatch"</td>
    <td>Define a patch to apply for data reads in this debug connection.</td>
    <td>DataPatchType</td>
    <td>0..*</td>
  </tr>
</table>

\delim

\section element_dbg_datapatch /package/devices/family/.../debug/datapatch

Describes a patch a debugger shall apply when reading data from the device.

\b Example
\code
<family Dfamily="M0 Series" Dvendor="Generic:5">
  ...
  <debug>
    <!-- Patched ROM Table for a Cortex-M0+ -->
    <datapatch  type=”AP”__dp="0" __ap="0" address="0xF8" value="0xE00FF003" info="AP BASE Register, ROM Table at 0xE00FF000"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FF000" value="0xFFF0F003" info="ROM Table pointer to SCS at 0xE000E000"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FF004" value="0xFFF02003" info="ROM Table pointer to DWT at 0xE0001000"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FF008" value="0xFFF03003" info="ROM Table pointer to BPU at 0xE0002000"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FF00C" value="0x00000000" info="ROM Table End Marker"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFCC" value="0x00000001" info="ROM Table MEMTYPE"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFD0" value="0x00000004" info="ROM Table Peripheral ID4"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFD4" value="0x00000000" info="ROM Table Peripheral ID5"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFD8" value="0x00000000" info="ROM Table Peripheral ID6"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFDC" value="0x00000000" info="ROM Table Peripheral ID7"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFE0" value="0x000000C0" info="ROM Table Peripheral ID0"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFE4" value="0x000000B4" info="ROM Table Peripheral ID1"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFE8" value="0x0000000B" info="ROM Table Peripheral ID2"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFEC" value="0x00000000" info="ROM Table Peripheral ID3"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFF0" value="0x0000000D" info="ROM Table Component  ID0"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFF4" value="0x00000010" info="ROM Table Component  ID1"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFF8" value="0x00000005" info="ROM Table Component  ID2"/>
    <datapatch  __dp="0" __ap="0" address="0xE00FFFFC" value="0x000000B1" info="ROM Table Component  ID3"/>
  </debug>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: datapatch">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_debug "debug"</td>
    <td colspan="3">\ref element_debug</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>type</td>
    <td>
      The type of data access to patch. Predefined tokens must be used as defined in \ref DataPatchAccessTypeEnum "Table: Data Patch Access Type".
      This attribute defaults to \token{Mem} if not set.
    </td>
    <td>DataPatchAccessTypeEnum</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>address</td>
    <td>The address for which to apply the patch.<br>
    For an \token{AP} data patch for an APv2 as referenced by <b>__apid</b>, the address is the APv2 register offset added to the APv2's base address
    defined in the corresponding \ref element_accessportV2 "accessportV2" element. It must within the 4-KByte address range of the APv2 block.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>__dp</td>
    <td>
      The debug port ID to apply the patch for. The allowed values are defined by the <b>__dp</b> attribute of <b>debugport</b>
      elements for this device. If no debugport element exists, the only allowed value is 0. If this attribute is not set, the debug port
      ID for the data patch is set to the default <b>__dp</b> of this <b>debug</b> section.<br>
      If \ref element_accessportV1 "accessportV1" or \ref element_accessportV2 "accessportV2" elements are specified then this attribute is only
      allowed for \token{DP} and \token{ACCESS_AP} accesses. Use <b>__apid</b> for all others.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>__ap</td>
    <td>
      The CoreSight access port index to apply the patch for. If this attribute is not set, the access port index
      for the data patch is set to the default <b>__ap</b> of this <b>debug</b> section.<br>
      Must not be used if \ref element_accessportV1 "accessportV1" or \ref element_accessportV2 "accessportV2" elements are specified. Use <b>__apid</b> instead.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>__apid</td>
    <td>
      The unique ID of a CoreSight access port to apply the patch for. Requires \ref element_accessportV1 "accessportV1" and/or
      \ref element_accessportV2 "accessportV2" elements to be specified. If this attribute is not set, the access port ID
      for the data patch is set to the default <b>__apid</b> of this <b>debug</b> section.
    </td>
    <td>xs:unsignedInt</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>value</td>
    <td>The value with which the debugger patches the data access. <b>value</b> is specified in little-endian format.</td>
    <td>NonNegativeInteger</td>
    <td>required</td>
  </tr>
  <tr>
    <td>mask</td>
    <td>The bits of the data access to patch. The mask value is specified in little-endian format.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>info</td>
    <td>Descriptive text to display for example for error diagnostics.</td>
    <td>xs:string</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>		

\anchor DataPatchAccessTypeEnum <b>Table: Data Patch Access Type</b>

The table lists the allowed values for data patch access types.
<table class="cmtable" summary="Enumeration: DataPatchAccessTypeEnum">
  <tr>
    <th>type=</th>
    <th>Description</th>
  </tr>
  <tr>
    <td class="XML-Token">DP</td>
    <td>CoreSight Debug Port register access.<br>
    <b>Note:</b> This type refers to accesses via the <b>DPACC</b> instruction for <b>CoreSight JTAG-DPs</b>. Please refer to the
    corresponding documentation for differences in the register interface between JTAG and Serial Wire debug ports.
    </td>
  </tr>
  <tr>
    <td class="XML-Token">ACCESS_AP</td>
    <td>Top-level Access Port access for a CoreSight ADIv6 DAP.</td>
  </tr>
  <tr>
    <td class="XML-Token">AP</td>
    <td>CoreSight Access Port register access. </td>
  </tr>
  <tr>
    <td class="XML-Token">Mem</td>
    <td>Memory access. </td>
  </tr>
</table>

<p>&nbsp;</p>
<hr>

\section element_trace /package/devices/family/.../trace

Describes device capabilities and possible configuration settings for capturing trace.
Multiple <b>trace</b> elements can be defined which are either specific to a processor identified by attribute
<b>Pname</b>, or which apply to all connections.

\b Example
\code
<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <trace Pname="Cortex-M4">
    <serialwire/>
    <traceport   width="0x0000000B"/> <!-- support for port widths 1, 2, and 4 -->
    <tracebuffer start="0x2000C000" size="0x4000"/>
  </trace>
  ...
  <trace Pname="Cortex-M0">
    <!-- Empty trace section for Cortex-M0, no trace capabilities -->
  </trace>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: trace">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_family "family"</td>
    <td colspan="3">\ref element_family</td>
  </tr>
  <tr>
    <td>\ref element_subFamily "subFamily"</td>
    <td colspan="3">\ref element_subFamily</td>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Pname</td>
    <td>
      Reference to a processor identifier as specified for a <b>processor</b> element. If <b>Pname</b> is set this
      <b>trace</b> section only applies for target connections to the referenced processor. Otherwise, it applies
      for all processors. <b>This attribute must be set if defining multiple \em trace elements within the same section.</b>
      Only alphabetical characters, decimal digits, '-' and '_' are allowed. 
    </td>
    <td>RestrictedString</td>
    <td>optional</td>
  </tr>
  <tr>
    <th>Child&nbsp;Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_trace_serialwire "serialwire"</td>
    <td>Describe the serial wire trace output capabilities of the processor.
    </td>
    <td>SerialWireType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_trace_traceport "traceport"</td>
    <td>Describe the parallel trace port output capabilities of the processor.
    </td>
    <td>TracePortType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_trace_tracebuffer "tracebuffer"</td>
    <td>Describe the on-device trace buffer capabilities of the processor.
    </td>
    <td>TraceBufferType</td>
    <td>0..*</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>

\section element_trace_serialwire /package/devices/family/.../trace/serialwire

Indicates serial wire trace output capabilities of the specified processor.

\b Example
\code
<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <trace Pname="Cortex-M4">
    ...
    <serialwire/>
    ...
  </trace>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: serialwire">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td colspan="3">\ref element_trace</td>
  </tr>
</table>

<p>&nbsp;</p>		
<hr>

\section element_trace_traceport /package/devices/family/.../trace/traceport

Indicates parallel trace port output capabilities of the specified processor.
This element describes possible configuration settings for capturing trace.

\b Example
\code
<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <trace Pname="Cortex-M4">
    ...
    <traceport width="0x0000000B"/> <!-- support for port widths 1, 2, and 4 -->
    ...
  </trace>
  ...
</family>
\endcode

<p>&nbsp;</p>

<table class="cmtable" summary="Element: traceport">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td colspan="3">\ref element_trace</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>width</td>
    <td>
      Parallel trace port widths supported for the processor connection (see table below).
    </td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
</table>


The attribute \b width specifies the available trace port width that is supported by the device.
Each bit of this value represents an available trace port size. If bit \token{n} is set a trace port width of \token{n+1} is supported.
The value <b>width=0x00008088</b> (as shown in the table) indicates that three port sizes (16-bit, 8-bit, and 4-bit) are supported by the device.

<table class="cmtable" summary="Element: traceportwidth">
  <tr>
    <th>Bit</th>
    <th>31</th>
    <th>30</th>
    <th>29</th>
    <th>28</th>
    <th>27</th>
    <th>26</th>
    <th>25</th>
    <th>24</th>
    <th>23</th>
    <th>22</th>
    <th>21</th>
    <th>20</th>
    <th>19</th>
    <th>18</th>
    <th>17</th>
    <th>16</th>
    <th>15</th>
    <th>14</th>
    <th>13</th>
    <th>12</th>
    <th>11</th>
    <th>10</th>
    <th> 9</th>
    <th> 8</th>
    <th> 7</th>
    <th> 6</th>
    <th> 5</th>
    <th> 4</th>
    <th> 3</th>
    <th> 2</th>
    <th> 1</th>
    <th> 0</th>
  </tr>
  <tr>
    <td>width</td>
    <td>32</td>
    <td>31</td>
    <td>30</td>
    <td>29</td>
    <td>28</td>
    <td>27</td>
    <td>26</td>
    <td>25</td>
    <td>24</td>
    <td>23</td>
    <td>22</td>
    <td>21</td>
    <td>20</td>
    <td>19</td>
    <td>18</td>
    <td>17</td>
    <td>16</td>
    <td>15</td>
    <td>14</td>
    <td>13</td>
    <td>12</td>
    <td>11</td>
    <td>10</td>
    <td> 9</td>
    <td> 8</td>
    <td> 7</td>
    <td> 6</td>
    <td> 5</td>
    <td> 4</td>
    <td> 3</td>
    <td> 2</td>
    <td> 1</td>
  </tr>
  <tr>
    <td>Value</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>1</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>1</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>1</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
</table>


<p>&nbsp;</p>		
<hr>

\section element_trace_tracebuffer /package/devices/family/.../trace/tracebuffer

Indicates on-device trace buffer capabilities of the specified processor.
This element describes possible configuration settings for capturing trace
and reading it from the buffer.

\b Example
\code
<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
  ...
  <trace Pname="CoreCM4">
    ...
    <tracebuffer start="0x2000C000" size="0x4000"/>
    ...
  </trace>
  ...
</family>
\endcode

<p>&nbsp;</p>		

<table class="cmtable" summary="Element: tracebuffer">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td colspan="3">\ref element_trace</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>start</td>
    <td>Start address of the on-chip memory used as trace buffer for a supported configuration.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
  <tr>
    <td>size</td>
    <td>Size of the on-chip memory used as trace buffer in bytes for a supported configuration.</td>
    <td>NonNegativeInteger</td>
    <td>optional</td>
  </tr>
</table>

<p>&nbsp;</p>
<hr>



\section element_variant /package/devices/family/.../device/variant

Defines a device variant. The element is optional. Can exist multiple times.

\b Example
\code
<device Dname="STM32F205RB">
  ...
  <variant Dvariant="STM32F205RBT6">
    <book name="doc\STM32F2_RM.PDF" title="STM32F2 Reference Manual"/>
    <description>Use this device as an alternative.</description>
    <feature type="QFP" count="64" name="LQFP 64 10x10x1.4" />
    <feature type="Temp" n="-40" m="85" name="Industrial Temperature Range"/>
  </variant>
  <variant Dvariant="STM32F205RBT7">
    <feature type="QFP" count="64" name="LQFP 64 10x10x1.4" />
    <feature type="Temp" n="-40" m="105" name="Extended Temperature Range"/>
  </variant>
  ...
</device>
\endcode

\n

<table class="cmtable" summary="Element: variant">
  <tr>
    <th>Parents</th>
    <th colspan="3">Element Chain</th>
  </tr>
  <tr>
    <td>\ref element_device "device"</td>
    <td colspan="3">\ref element_device</td>
  </tr>
  <tr>
    <th>Attributes</th>
    <th>Description</th>
    <th>Type</th>
    <th>Use</th>
  </tr>
  <tr>
    <td>Dvariant</td>
    <td><b>May get replaced by 'Dname' in the future</b>. Name of the device on the variant level. This effectively 
        overwrites the device name specified on the device level. 
        Once a device section contains a variant section, only the variant elements describe a 'selectable' device
        which can be selected in the tools. The Dname of the device level effectively becomes a group name like the
        Dfamily and DsubFamily attributes. Only alphabetical characters, decimal digits, '-' and '_' are allowed</td>
    <td>RestrictedStringDname</td>
    <td>required</td>
  </tr>
  <tr>
    <td>Dname</td>
    <td><b>future</b>. Name of the device on the variant level. Only alphabetical characters, decimal digits, '-' and '_' are allowed</td>
    <td>RestrictedStringDname</td>
    <td>required</td>
  </tr>
  <tr>
    <th>Child Elements</th>
    <th>Description</th>
    <th>Type</th>
    <th>Occurrence</th>
  </tr>
  <tr>
    <td>\ref element_processor "processor"</td>
    <td>Specify processors that are specific to this device.</td>
    <td>ProcessorType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugconfig "debugconfig"</td>
    <td>Specify default settings for the debug connection specific to this device.</td>
    <td>DebugConfigType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_compile "compile"</td>
    <td>Specify compile or translate options specific to this device.</td>
    <td>CompileType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_memory "memory"</td>
    <td>Specify memory areas that specific to this device.</td>
    <td>MemoryType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_algorithm "algorithm"</td>
    <td>Specify Flash programming algorithms that can be used by this device.</td>
    <td>AlgorithmType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_book "book"</td>
    <td>Specify documents specific to this device.</td>
    <td>BookType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_description "description"</td>
    <td>Description specific to this device.</td>
    <td>DescriptionType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_feature "feature"</td>
    <td>Specify the features of this device.</td>
    <td>FeatureType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_feature "environment"</td>
    <td>Specify tool options.</td>
    <td>EnvironmentType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugport "debugport"</td>
    <td>Describe a debug port specific to this device.</td>
    <td>DebugPortType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV1 "accessportV1"</td>
    <td>Describe an access port (APv1) specific to this device.</td>
    <td>AccessPortV1Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_accessportV2 "accessportV2"</td>
    <td>Describe an access port (APv2) specific to this device.</td>
    <td>AccessPortV2Type</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debug "debug"</td>
    <td>Specify debug options specific to this device.</td>
    <td>DebugType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_trace "trace"</td>
    <td>Specify trace options specific to this device.</td>
    <td>TraceType</td>
    <td>0..*</td>
  </tr>
  <tr>
    <td>\ref element_debugvars "debugvars"</td>
    <td>Define debug access variables for user-defined settings specific to this device.</td>
    <td>DebugVarsType</td>
    <td>0..1</td>
  </tr>
  <tr>
    <td>\ref element_sequences "sequences"</td>
    <td>Describe debug access sequences specific to this device.</td>
    <td>SequencesType</td>
    <td>0..1</td>
  </tr>
</table>

\delim
*/
