diff --git a/esphome/components/logger/__init__.py b/esphome/components/logger/__init__.py
index 6f01e3f04b..747ace310b 100644
--- a/esphome/components/logger/__init__.py
+++ b/esphome/components/logger/__init__.py
@@ -311,7 +311,7 @@ async def to_code(config):
             zephyr_add_overlay("""&uart1 { status = "okay";};""")
         if config[CONF_HARDWARE_UART] == USB_CDC:
             zephyr_add_prj_conf("UART_LINE_CTRL", True)
-            zephyr_add_cdc_acm(config)
+            zephyr_add_cdc_acm(config, 0)
 
     # Register at end for safe mode
     await cg.register_component(log, config)
diff --git a/esphome/components/zephyr/__init__.py b/esphome/components/zephyr/__init__.py
index f9698da61a..26b212c827 100644
--- a/esphome/components/zephyr/__init__.py
+++ b/esphome/components/zephyr/__init__.py
@@ -135,7 +135,7 @@ def _format_prj_conf_val(value: PrjConfValueType) -> str:
     raise ValueError
 
 
-def zephyr_add_cdc_acm(config):
+def zephyr_add_cdc_acm(config, id):
     zephyr_add_prj_conf("USB_DEVICE_STACK", True)
     zephyr_add_prj_conf("USB_CDC_ACM", True)
     # prevent device to go to susspend, without this communication stop working in python
@@ -144,12 +144,12 @@ def zephyr_add_cdc_acm(config):
     # prevent logging when buffer is full
     zephyr_add_prj_conf("USB_CDC_ACM_LOG_LEVEL_WRN", True)
     zephyr_add_overlay(
-        """
-&zephyr_udc0 {
-    cdc_acm_uart0: cdc_acm_uart0 {
+        f"""
+&zephyr_udc0 {{
+    cdc_acm_uart{id}: cdc_acm_uart{id} {{
         compatible = "zephyr,cdc-acm-uart";
-    };
-};
+    }};
+}};
 """
     )
 
diff --git a/esphome/components/zephyr_mcumgr/ota/__init__.py b/esphome/components/zephyr_mcumgr/ota/__init__.py
index 6530bf726f..77eb10575c 100644
--- a/esphome/components/zephyr_mcumgr/ota/__init__.py
+++ b/esphome/components/zephyr_mcumgr/ota/__init__.py
@@ -6,6 +6,7 @@ from esphome.const import (
     CONF_NUM_ATTEMPTS,
     CONF_OTA,
     CONF_REBOOT_TIMEOUT,
+    CONF_HARDWARE_UART,
 )
 from esphome.core import CORE, coroutine_with_priority
 import esphome.final_validate as fv
@@ -24,17 +25,23 @@ ZephyrMcumgrOTAComponent = cg.esphome_ns.namespace("zephyr_mcumgr").class_(
 )
 
 CONF_BLE = "ble"
-CONF_USB_CDC = "usb_cdc"
 
 
 def _validate_transport(conf):
-    if conf[CONF_BLE] or conf[CONF_USB_CDC]:
+    if conf[CONF_BLE] or conf[CONF_HARDWARE_UART]:
         return conf
     raise cv.Invalid(
-        f"At least one trasnport protocol has to be enabled. Set '{CONF_BLE}' or '{CONF_USB_CDC}'"
+        f"At least one trasnport protocol has to be enabled. Set '{CONF_BLE}' or '{CONF_HARDWARE_UART}'"
     )
 
 
+UARTS = {
+    "cdc": ("cdc_acm_uart0", 0),
+    "cdc1": ("cdc_acm_uart1", 1),
+    "uart0": ("uart0", -1),
+    "uart1": ("uart1", -1),
+}
+
 CONFIG_SCHEMA = cv.All(
     cv.Schema(
         {
@@ -44,7 +51,9 @@ CONFIG_SCHEMA = cv.All(
             ): cv.positive_time_period_milliseconds,
             cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int,
             cv.Optional(CONF_BLE, default=True): cv.boolean,
-            cv.Optional(CONF_USB_CDC, default=False): cv.boolean,
+            cv.Optional(
+                CONF_HARDWARE_UART,
+            ): cv.one_of(*UARTS, lower=True),
         }
     )
     .extend(BASE_OTA_SCHEMA)
@@ -117,17 +126,19 @@ async def to_code(config):
         zephyr_add_prj_conf("MCUMGR_GRP_OS_MCUMGR_PARAMS", True)
 
         zephyr_add_prj_conf("NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP", True)
-    if config[CONF_USB_CDC]:
-        zephyr_add_cdc_acm(config)
+    if config[CONF_HARDWARE_UART]:
+        cdc_id = UARTS[config[CONF_HARDWARE_UART]][1]
+        if cdc_id >= 0:
+            zephyr_add_cdc_acm(config, cdc_id)
         zephyr_add_prj_conf("MCUMGR_TRANSPORT_UART", True)
         zephyr_add_prj_conf("BASE64", True)
         zephyr_add_prj_conf("CONSOLE", True)
         zephyr_add_overlay(
-            """
-/ {
-    chosen {
-        zephyr,uart-mcumgr = &cdc_acm_uart0;
-    };
-};
+            f"""
+/ {{
+    chosen {{
+        zephyr,uart-mcumgr = &{UARTS[config[CONF_HARDWARE_UART]][0]};
+    }};
+}};
 """
         )
diff --git a/tests/components/ota/test.nrf52.yaml b/tests/components/ota/test.nrf52.yaml
index e0031b9a4c..41c2325820 100644
--- a/tests/components/ota/test.nrf52.yaml
+++ b/tests/components/ota/test.nrf52.yaml
@@ -2,6 +2,7 @@ zephyr_ble_server:
 
 ota:
   - platform: zephyr_mcumgr
+    hardware_uart: cdc
     on_begin:
       then:
         - logger.log: "OTA start"
diff --git a/tests/test12.2.yaml b/tests/test12.2.yaml
index ed372d82cb..2eae0f9107 100644
--- a/tests/test12.2.yaml
+++ b/tests/test12.2.yaml
@@ -52,7 +52,7 @@ dfu_mode:
 
 ota:
   - platform: zephyr_mcumgr
-    usb_cdc: True
+    hardware_uart: cdc1
     on_begin:
       then:
         - logger.log: "OTA start"