<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<IP
  xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance"
  ns0:schemaLocation="http://mcd.rou.st.com/modules.php?name=mcu ../../../../../../../doc/V4/Development/Specifications/db/IP_Modes.xsd"
  xmlns="http://mcd.rou.st.com/modules.php?name=mcu"
  DBVersion="V3.0"
  IPType="peripheral"
  Name="SDMMC"
  Version="sdmmc2_v1_0_Cube">

  <About>SDMMC: Secure Digital Input/Output interface</About>

  <!-- STM32H7 -->

  <!-- Generic RefParameters for SDMMC -->
  <RefParameter Comment="SDMMC instance" DefaultValue="SDMMC$Index" Name="Instance" Type="list" Visible="false"/>

  <RefParameter Name="ClockEdge" Comment="Clock transition on which the bit capture is made" DefaultValue="SDMMC_CLOCK_EDGE_RISING" Type="list" Group="SDMMC parameters">
      <PossibleValue Value="SDMMC_CLOCK_EDGE_RISING" Comment="Rising transition"/>
      <PossibleValue Value="SDMMC_CLOCK_EDGE_FALLING" Comment="Falling transition"/>
  </RefParameter>

  <RefParameter Name="ClockPowerSave" Comment="SDMMC Clock output enable when the bus is idle" DefaultValue="SDMMC_CLOCK_POWER_SAVE_DISABLE" Type="list" Group="SDMMC parameters">
      <PossibleValue Value="SDMMC_CLOCK_POWER_SAVE_DISABLE" Comment="Disable the power save for the clock"/>
      <PossibleValue Value="SDMMC_CLOCK_POWER_SAVE_ENABLE" Comment="Enable the power save for the clock"/>
  </RefParameter>

  <RefParameter Name="BusWide" Comment="Wide bus mode" Type="list" Visible="false">
      <Condition Diagnostic="Bus Width 8 Bits" Expression="$IpInstance_Bus8Bits"/>
      <PossibleValue Value="SDMMC_BUS_WIDE_8B" Comment="Bus wide 8-bit data"/>
  </RefParameter>
  <RefParameter Name="BusWide" Comment="Wide bus mode" Type="list" Visible="false">
      <Condition Diagnostic="Bus Width 4 Bits" Expression="$IpInstance_Bus4Bits"/>
      <PossibleValue Value="SDMMC_BUS_WIDE_4B" Comment="Bus wide 4-bit data"/>
  </RefParameter>
  <RefParameter Name="BusWide" Comment="Wide bus mode" Type="list" Visible="false">
      <Condition Diagnostic="Bus Width 1 Bit" Expression="$IpInstance_Bus1Bit"/>
      <PossibleValue Value="SDMMC_BUS_WIDE_1B" Comment="Bus wide 1-bit data"/>
  </RefParameter>
  <RefParameter Name="BusWide" Comment="Wide bus mode" Type="list" Visible="false">
      <PossibleValue Value="SDMMC_BUS_WIDE_1B" Comment="Bus wide 1-bit data"/>
  </RefParameter>

  <RefParameter Name="HardwareFlowControl" Comment="SDMMC hardware flow control" DefaultValue="SDMMC_HARDWARE_FLOW_CONTROL_DISABLE" Type="list"  Group="SDMMC parameters">
      <PossibleValue Value="SDMMC_HARDWARE_FLOW_CONTROL_DISABLE" Comment="The hardware control flow is disabled"/>
      <PossibleValue Value="SDMMC_HARDWARE_FLOW_CONTROL_ENABLE" Comment="The hardware control flow is enabled"/>
  </RefParameter>

  <!-- SDMMC_CLKCR CLKDIV[9:0]: Clock divide factor -->
  <RefParameter Name="ClockDiv" Comment="SDMMC clock divide factor" DefaultValue="0" Max="1023" Min="0" Type="integer" Group="SDMMC parameters">
    <Description>These bits can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0).&lt;br&gt;This parameter defines the divide factor between the input clock (sdmmc_ker_ck) and the output clock (SDMMC_CK): SDMMC_CK frequency = sdmmc_ker_ck / [2 * CLKDIV].&lt;br&gt;000: SDMMC_CK frequency = sdmmc_ker_ck / 1 (Does not support DDR)&lt;br&gt;001: SDMMC_CK frequency = sdmmc_ker_ck / 2&lt;br&gt;002: SDMMC_CK frequency = sdmmc_ker_ck / 4&lt;br&gt;0xx: etc&lt;br&gt;080: SDMMC_CK frequency = sdmmc_ker_ck / 256&lt;br&gt;xxx: etc&lt;br&gt;3FF: SDMMC_CK frequency = sdmmc_ker_ck / 2046&lt;br&gt;</Description>
  </RefParameter>

  <RefParameter Name="TransceiverPresent" Comment="Is external transceiver present ?" DefaultValue="SDMMC_TRANSCEIVER_PRESENT" Type="list" Group="SDMMC parameters">
    <Condition Diagnostic="" Expression="SDMMC1 &amp; (STM32H743I_EVAL | STM32H743I_EVAL2 | STM32H747I_EVAL)"/>
    <Description>Specificies whether external transceiver is present or not.&lt;br&gt; yes : SDMMC_TRANSCEIVER_PRESENT (default)&lt;br&gt; no : SDMMC_TRANSCEIVER_NOT_PRESENT</Description>
    <PossibleValue Value="SDMMC_TRANSCEIVER_PRESENT" Comment="yes"/>
    <PossibleValue Value="SDMMC_TRANSCEIVER_NOT_PRESENT" Comment="no"/>
  </RefParameter>
  <RefParameter Name="TransceiverPresent" Comment="Is external transceiver present ?" DefaultValue="SDMMC_TRANSCEIVER_PRESENT" Type="list" Group="SDMMC parameters">
    <Condition Diagnostic="" Expression="SDMMC2 &amp; STM32H7B3I_EVAL"/>
    <Description>Specificies whether external transceiver is present or not.&lt;br&gt; yes : SDMMC_TRANSCEIVER_PRESENT (default)&lt;br&gt; no : SDMMC_TRANSCEIVER_NOT_PRESENT</Description>
    <PossibleValue Value="SDMMC_TRANSCEIVER_PRESENT" Comment="yes"/>
    <PossibleValue Value="SDMMC_TRANSCEIVER_NOT_PRESENT" Comment="no"/>
  </RefParameter>
  <RefParameter Name="TransceiverPresent" Comment="Is external transceiver present ?" DefaultValue="SDMMC_TRANSCEIVER_NOT_PRESENT" Type="list" Group="SDMMC parameters">
    <Description>Specificies whether external transceiver is present or not.&lt;br&gt; yes : SDMMC_TRANSCEIVER_PRESENT&lt;br&gt; no : SDMMC_TRANSCEIVER_NOT_PRESENT (default)</Description>
    <PossibleValue Value="SDMMC_TRANSCEIVER_NOT_PRESENT" Comment="no"/>
    <PossibleValue Value="SDMMC_TRANSCEIVER_PRESENT" Comment="yes"/>
  </RefParameter>

  <!-- RefMode for SD-1-bit -->
  <RefMode Name="SD_1_bit" Comment="SD 1 bit" HalMode="SD">
      <ConfigForMode>SD_Init</ConfigForMode>
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="SD_1_bit_auto_dir_voltage_converter" Comment="SD 1 bit with auto dir voltage converter" HalMode="SD">
      <ConfigForMode>SD_Init</ConfigForMode>
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="SD_1_bit_dir_voltage_converter" Comment="SD 1 bit with dir voltage converter" HalMode="SD">
      <ConfigForMode>SD_Init</ConfigForMode>
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <!-- RefMode for SD-4-bits-Wide-bus -->
  <RefMode Name="SD_4_bits_Wide_bus" Comment="SD 4 bits Wide bus" HalMode="SD">
      <ConfigForMode>SD_Init</ConfigForMode>
      <!-- BZ37917/51299/74240 ConfigForMode>SD_WideBus_Config</ConfigForMode-->
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="SD_4_bits_Wide_bus_auto_dir_voltage_converter" Comment="SD 4 bits Wide bus with auto dir voltage converter" HalMode="SD">
      <ConfigForMode>SD_Init</ConfigForMode>
      <!-- BZ37917/51299/74240 ConfigForMode>SD_WideBus_Config</ConfigForMode-->
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="SD_4_bits_Wide_bus_dir_voltage_converter" Comment="SD 4 bits Wide bus with dir voltage converter" HalMode="SD">
      <ConfigForMode>SD_Init</ConfigForMode>
      <!-- BZ37917/51299/74240 ConfigForMode>SD_WideBus_Config</ConfigForMode-->
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="mmc_1_bit" Comment="MMC 1 bit" HalMode="MMC">
      <ConfigForMode>MMC_Init</ConfigForMode>
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="mmc_4_bits_Wide_bus" Comment="MMC 4 bits" HalMode="MMC">
      <ConfigForMode>MMC_Init</ConfigForMode>
      <!-- BZ37917/51299/74240 ConfigForMode>SD_WideBus_Config</ConfigForMode-->
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <RefMode Name="mmc_8_bits_Wide_bus" Comment="MMC 8 bits" HalMode="MMC">
      <ConfigForMode>MMC_Init</ConfigForMode>
      <!-- BZ37917/51299/74240 ConfigForMode>SD_WideBus_Config</ConfigForMode-->
      <Parameter Name="ClockEdge"/>
      <Parameter Name="ClockPowerSave"/>
      <Parameter Name="BusWide"/>
      <Parameter Name="HardwareFlowControl"/>
      <Parameter Name="ClockDiv"/>
      <Parameter Name="TransceiverPresent"/>
  </RefMode>

  <ModeLogicOperator Name="OR">
    <Mode Name="Mode">
      <ModeLogicOperator Name="XOR">
        <Mode Name="SD_1_bit" UserName="SD 1 bit">
          <Semaphore>$IpInstance_SD_Card</Semaphore>
          <Semaphore>$IpInstance_Bus1Bit</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="SD_1_bit_auto_dir_voltage_converter" UserName="SD 1 bit with auto dir voltage converter">
          <Semaphore>$IpInstance_SD_Card</Semaphore>
          <Semaphore>$IpInstance_Bus1Bit</Semaphore>
          <Semaphore>$IpInstance_voltage_converter</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CKIN"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="SD_1_bit_dir_voltage_converter" UserName="SD 1 bit with dir voltage converter">
          <Semaphore>$IpInstance_SD_Card</Semaphore>
          <Semaphore>$IpInstance_Bus1Bit</Semaphore>
          <Semaphore>$IpInstance_voltage_converter</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CKIN"/>
            <Signal Name="CMD"/>
            <Signal Name="CDIR"/>
            <Signal Name="D0"/>
            <Signal Name="D0DIR"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="SD_4_bits_Wide_bus" UserName="SD 4 bits Wide bus">
          <Semaphore>$IpInstance_SD_Card</Semaphore>
          <Semaphore>$IpInstance_Bus4Bits</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
            <Signal Name="D1"/>
            <Signal Name="D2"/>
            <Signal Name="D3"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="SD_4_bits_Wide_bus_auto_dir_voltage_converter" UserName="SD 4 bits Wide bus with auto dir voltage converter">
          <Semaphore>$IpInstance_SD_Card</Semaphore>
          <Semaphore>$IpInstance_Bus4Bits</Semaphore>
          <Semaphore>$IpInstance_voltage_converter</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CKIN"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
            <Signal Name="D1"/>
            <Signal Name="D2"/>
            <Signal Name="D3"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="SD_4_bits_Wide_bus_dir_voltage_converter" UserName="SD 4 bits Wide bus with dir voltage converter">
          <Semaphore>$IpInstance_SD_Card</Semaphore>
          <Semaphore>$IpInstance_Bus4Bits</Semaphore>
          <Semaphore>$IpInstance_voltage_converter</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CKIN"/>
            <Signal Name="CMD"/>
            <Signal Name="CDIR"/>
            <Signal Name="D0"/>
            <Signal Name="D0DIR"/>
            <Signal Name="D1"/>
            <Signal Name="D2"/>
            <Signal Name="D3"/>
            <Signal Name="D123DIR"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="mmc_1_bit" UserName="MMC 1 bit">
          <Semaphore>$IpInstance_Bus1Bit</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="mmc_4_bits_Wide_bus"  UserName="MMC 4 bits Wide bus">
          <Semaphore>$IpInstance_Bus4Bits</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
            <Signal Name="D1"/>
            <Signal Name="D2"/>
            <Signal Name="D3"/>
          </SignalLogicalOp>
        </Mode>
        <Mode Name="mmc_8_bits_Wide_bus"   UserName="MMC 8 bits Wide bus">
          <Semaphore>$IpInstance_Bus8Bits</Semaphore>
          <SignalLogicalOp Name="AND">
            <Signal Name="CK"/>
            <Signal Name="CMD"/>
            <Signal Name="D0"/>
            <Signal Name="D1"/>
            <Signal Name="D2"/>
            <Signal Name="D3"/>
            <Signal Name="D4"/>
            <Signal Name="D5"/>
            <Signal Name="D6"/>
            <Signal Name="D7"/>
          </SignalLogicalOp>
        </Mode>
      </ModeLogicOperator>
      <Semaphore>$IpInstance</Semaphore>
    </Mode>
  </ModeLogicOperator>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="CK"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="CMD"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D0"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D1"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D2"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D3"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D4"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D5"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D6"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D7"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="CKIN"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="CDIR"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D0DIR"/>
  <RefSignal IOMode="AlternateFunctionPushPullHighSpeedDefault" Name="D123DIR"/>
  <!-- SDMMCUsed_ForRCC could be removed but keep it as it is used by some families  -->
  <Semaphore>SDMMCUsed_ForRCC</Semaphore>
  <Semaphore>$IpInstanceUsed_ForRCC</Semaphore>
</IP>
