SoC Capability Macros
Different models of ESP chips integrate various hardware modules. Even the same type of module may have subtle differences across different chips. ESP-IDF provides a small "database" to describe the differences between chips (please note, only differences are described, not commonalities). The contents of this "database" are defined as macros in the soc/soc_caps.h file, referred to as SoC capability macros. Users can utilize these macros in their code with conditional compilation directives (such as #if) to control which code is actually compiled.
Note
Please note that the contents of soc/soc_caps.h are currently unstable and may undergo significant changes in the future.
Using SoC Capability Macros
We recommend accessing SoC capability macros indirectly through the following macro functions:
| Macro Function | Description | Example | 
|---|---|---|
| Determines the chip model | 
 | |
| Checks if the chip has a specific hardware module or feature | 
 | 
API Reference
Header File
- This header file can be included with: - #include "soc/soc_caps.h" 
Macros
- 
_SOC_CAPS_TARGET_IS_ESP32C3
- 
SOC_ADC_SUPPORTED
- 
SOC_DEDICATED_GPIO_SUPPORTED
- 
SOC_UART_SUPPORTED
- 
SOC_GDMA_SUPPORTED
- 
SOC_UHCI_SUPPORTED
- 
SOC_AHB_GDMA_SUPPORTED
- 
SOC_GPTIMER_SUPPORTED
- 
SOC_TWAI_SUPPORTED
- 
SOC_BT_SUPPORTED
- 
SOC_ASYNC_MEMCPY_SUPPORTED
- 
SOC_USB_SERIAL_JTAG_SUPPORTED
- 
SOC_TEMP_SENSOR_SUPPORTED
- 
SOC_XT_WDT_SUPPORTED
- 
SOC_PHY_SUPPORTED
- 
SOC_WIFI_SUPPORTED
- 
SOC_SUPPORTS_SECURE_DL_MODE
- 
SOC_EFUSE_KEY_PURPOSE_FIELD
- 
SOC_EFUSE_HAS_EFUSE_RST_BUG
- 
SOC_EFUSE_SUPPORTED
- 
SOC_RTC_FAST_MEM_SUPPORTED
- 
SOC_RTC_MEM_SUPPORTED
- 
SOC_I2S_SUPPORTED
- 
SOC_RMT_SUPPORTED
- 
SOC_SDM_SUPPORTED
- 
SOC_GPSPI_SUPPORTED
- 
SOC_LEDC_SUPPORTED
- 
SOC_I2C_SUPPORTED
- 
SOC_SYSTIMER_SUPPORTED
- 
SOC_SUPPORT_COEXISTENCE
- 
SOC_AES_SUPPORTED
- 
SOC_MPI_SUPPORTED
- 
SOC_SHA_SUPPORTED
- 
SOC_HMAC_SUPPORTED
- 
SOC_DIG_SIGN_SUPPORTED
- 
SOC_FLASH_ENC_SUPPORTED
- 
SOC_SECURE_BOOT_SUPPORTED
- 
SOC_MEMPROT_SUPPORTED
- 
SOC_BOD_SUPPORTED
- 
SOC_CLK_TREE_SUPPORTED
- 
SOC_ASSIST_DEBUG_SUPPORTED
- 
SOC_WDT_SUPPORTED
- 
SOC_SPI_FLASH_SUPPORTED
- 
SOC_RNG_SUPPORTED
- 
SOC_LIGHT_SLEEP_SUPPORTED
- 
SOC_DEEP_SLEEP_SUPPORTED
- 
SOC_LP_PERIPH_SHARE_INTERRUPT
- 
SOC_PM_SUPPORTED
- 
SOC_XTAL_SUPPORT_40M
- 
SOC_AES_SUPPORT_DMA
- 
SOC_AES_GDMA
- 
SOC_AES_SUPPORT_AES_128
- 
SOC_AES_SUPPORT_AES_256
- 
SOC_ADC_DIG_CTRL_SUPPORTED
- < SAR ADC Module 
- 
SOC_ADC_ARBITER_SUPPORTED
- 
SOC_ADC_DIG_IIR_FILTER_SUPPORTED
- 
SOC_ADC_MONITOR_SUPPORTED
- 
SOC_ADC_DMA_SUPPORTED
- 
SOC_ADC_DIG_SUPPORTED_UNIT(UNIT)
- 
SOC_ADC_PERIPH_NUM
- 
SOC_ADC_CHANNEL_NUM(PERIPH_NUM)
- 
SOC_ADC_MAX_CHANNEL_NUM
- 
SOC_ADC_ATTEN_NUM
- Digital 
- 
SOC_ADC_DIGI_CONTROLLER_NUM
- 
SOC_ADC_PATT_LEN_MAX
- One pattern table, each contains 8 items. Each item takes 1 byte 
- 
SOC_ADC_DIGI_MIN_BITWIDTH
- 
SOC_ADC_DIGI_MAX_BITWIDTH
- 
SOC_ADC_DIGI_RESULT_BYTES
- 
SOC_ADC_DIGI_DATA_BYTES_PER_CONV
- 
SOC_ADC_DIGI_IIR_FILTER_NUM
- 
SOC_ADC_DIGI_MONITOR_NUM
- F_sample = F_digi_con / 2 / interval. F_digi_con = 5M for now. 30 <= interval <= 4095 
- 
SOC_ADC_SAMPLE_FREQ_THRES_HIGH
- 
SOC_ADC_SAMPLE_FREQ_THRES_LOW
- RTC 
- 
SOC_ADC_RTC_MIN_BITWIDTH
- 
SOC_ADC_RTC_MAX_BITWIDTH
- Calibration 
- 
SOC_ADC_CALIBRATION_V1_SUPPORTED
- support HW offset calibration version 1 
- 
SOC_ADC_SELF_HW_CALI_SUPPORTED
- support HW offset self calibration ADC power control is shared by PWDET, TempSensor 
- 
SOC_ADC_SHARED_POWER
- 
SOC_APB_BACKUP_DMA
- 
SOC_BROWNOUT_RESET_SUPPORTED
- 
SOC_SHARED_IDCACHE_SUPPORTED
- 
SOC_CACHE_FREEZE_SUPPORTED
- 
SOC_CACHE_MEMORY_IBANK_SIZE
- 
SOC_CPU_CORES_NUM
- 
SOC_CPU_INTR_NUM
- 
SOC_CPU_HAS_FLEXIBLE_INTC
- 
SOC_CPU_HAS_CSR_PC
- 
SOC_CPU_BREAKPOINTS_NUM
- 
SOC_CPU_WATCHPOINTS_NUM
- 
SOC_CPU_WATCHPOINT_MAX_REGION_SIZE
- 
SOC_DS_SIGNATURE_MAX_BIT_LEN
- The maximum length of a Digital Signature in bits. 
- 
SOC_DS_KEY_PARAM_MD_IV_LENGTH
- Initialization vector (IV) length for the RSA key parameter message digest (MD) in bytes. 
- 
SOC_DS_KEY_CHECK_MAX_WAIT_US
- Maximum wait time for DS parameter decryption key. If overdue, then key error. See TRM DS chapter for more details 
- 
SOC_AHB_GDMA_VERSION
- 
SOC_GPIO_PORT
- 
SOC_GPIO_PIN_COUNT
- 
SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER
- 
SOC_GPIO_FILTER_CLK_SUPPORT_APB
- 
SOC_GPIO_SUPPORT_FORCE_HOLD
- 
SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP
- 
SOC_GPIO_VALID_GPIO_MASK
- 
SOC_GPIO_VALID_OUTPUT_GPIO_MASK
- 
SOC_GPIO_IN_RANGE_MAX
- 
SOC_GPIO_OUT_RANGE_MAX
- 
SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK
- 
SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT
- 
SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK
- 
SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX
- 
SOC_GPIO_CLOCKOUT_CHANNEL_NUM
- 
SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP
- 
SOC_I2C_NUM
- 
SOC_HP_I2C_NUM
- 
SOC_I2C_FIFO_LEN
- I2C hardware FIFO depth 
- 
SOC_I2C_CMD_REG_NUM
- Number of I2C command registers 
- 
SOC_I2C_SUPPORT_SLAVE
- 
SOC_I2C_SUPPORT_HW_CLR_BUS
- 
SOC_I2C_SUPPORT_XTAL
- 
SOC_I2C_SUPPORT_RTC
- 
SOC_I2C_SUPPORT_10BIT_ADDR
- 
SOC_I2C_SLAVE_SUPPORT_BROADCAST
- 
SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE
- 
SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS
- 
SOC_I2S_HW_VERSION_2
- 
SOC_I2S_SUPPORTS_PCM
- 
SOC_I2S_SUPPORTS_PDM
- 
SOC_I2S_SUPPORTS_PDM_TX
- 
SOC_I2S_SUPPORTS_PCM2PDM
- 
SOC_I2S_SUPPORTS_PDM_RX
- 
SOC_I2S_PDM_MAX_TX_LINES
- 
SOC_I2S_PDM_MAX_RX_LINES
- 
SOC_I2S_SUPPORTS_TDM
- 
SOC_LEDC_SUPPORT_APB_CLOCK
- 
SOC_LEDC_SUPPORT_XTAL_CLOCK
- 
SOC_LEDC_TIMER_NUM
- 
SOC_LEDC_CHANNEL_NUM
- 
SOC_LEDC_TIMER_BIT_WIDTH
- 
SOC_LEDC_SUPPORT_FADE_STOP
- 
SOC_MMU_LINEAR_ADDRESS_REGION_NUM
- 
SOC_MMU_PERIPH_NUM
- 
SOC_MPU_CONFIGURABLE_REGIONS_SUPPORTED
- 
SOC_MPU_MIN_REGION_SIZE
- 
SOC_MPU_REGIONS_MAX_NUM
- 
SOC_MPU_REGION_RO_SUPPORTED
- 
SOC_MPU_REGION_WO_SUPPORTED
- 
SOC_RMT_GROUPS
- One RMT group 
- 
SOC_RMT_TX_CANDIDATES_PER_GROUP
- Number of channels that capable of Transmit 
- 
SOC_RMT_RX_CANDIDATES_PER_GROUP
- Number of channels that capable of Receive 
- 
SOC_RMT_CHANNELS_PER_GROUP
- Total 4 channels 
- 
SOC_RMT_MEM_WORDS_PER_CHANNEL
- Each channel owns 48 words memory (1 word = 4 Bytes) 
- 
SOC_RMT_SUPPORT_RX_PINGPONG
- Support Ping-Pong mode on RX path 
- 
SOC_RMT_SUPPORT_RX_DEMODULATION
- Support signal demodulation on RX path (i.e. remove carrier) 
- 
SOC_RMT_SUPPORT_ASYNC_STOP
- Support stop transmission asynchronously 
- 
SOC_RMT_SUPPORT_TX_LOOP_COUNT
- Support transmit specified number of cycles in loop mode 
- 
SOC_RMT_SUPPORT_TX_SYNCHRO
- Support coordinate a group of TX channels to start simultaneously 
- 
SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY
- TX carrier can be modulated to data phase only 
- 
SOC_RMT_SUPPORT_XTAL
- Support set XTAL clock as the RMT clock source 
- 
SOC_RMT_SUPPORT_APB
- Support set APB as the RMT clock source 
- 
SOC_RMT_SUPPORT_RC_FAST
- Support set RC_FAST clock as the RMT clock source 
- 
SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH
- 
SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM
- 
SOC_RTC_CNTL_CPU_PD_DMA_ADDR_ALIGN
- 
SOC_RTC_CNTL_CPU_PD_DMA_BLOCK_SIZE
- 
SOC_RTC_CNTL_CPU_PD_RETENTION_MEM_SIZE
- 
SOC_SLEEP_SYSTIMER_STALL_WORKAROUND
- 
SOC_SLEEP_TGWDT_STOP_WORKAROUND
- 
SOC_RTCIO_PIN_COUNT
- 
SOC_MPI_MEM_BLOCKS_NUM
- 
SOC_MPI_OPERATIONS_NUM
- 
SOC_RSA_MAX_BIT_LEN
- 
SOC_SHA_DMA_MAX_BUFFER_SIZE
- 
SOC_SHA_SUPPORT_DMA
- 
SOC_SHA_SUPPORT_RESUME
- 
SOC_SHA_GDMA
- 
SOC_SHA_SUPPORT_SHA1
- 
SOC_SHA_SUPPORT_SHA224
- 
SOC_SHA_SUPPORT_SHA256
- 
SOC_SPI_PERIPH_NUM
- 
SOC_SPI_PERIPH_CS_NUM(i)
- 
SOC_SPI_MAX_CS_NUM
- 
SOC_SPI_MAXIMUM_BUFFER_SIZE
- 
SOC_SPI_SUPPORT_DDRCLK
- 
SOC_SPI_SLAVE_SUPPORT_SEG_TRANS
- 
SOC_SPI_SUPPORT_CD_SIG
- 
SOC_SPI_SUPPORT_CONTINUOUS_TRANS
- 
SOC_SPI_SUPPORT_SLAVE_HD_VER2
- 
SOC_SPI_SUPPORT_CLK_APB
- 
SOC_SPI_SUPPORT_CLK_XTAL
- 
SOC_SPI_PERIPH_SUPPORT_MULTILINE_MODE(host_id)
- 
SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT
- 
SOC_SPI_SCT_SUPPORTED
- 
SOC_SPI_SCT_SUPPORTED_PERIPH(PERIPH_NUM)
- 
SOC_SPI_SCT_REG_NUM
- 
SOC_SPI_SCT_BUFFER_NUM_MAX
- 
SOC_SPI_SCT_CONF_BITLEN_MAX
- 
SOC_MEMSPI_IS_INDEPENDENT
- 
SOC_SPI_MAX_PRE_DIVIDER
- 
SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE
- 
SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND
- 
SOC_SPI_MEM_SUPPORT_AUTO_RESUME
- 
SOC_SPI_MEM_SUPPORT_IDLE_INTR
- 
SOC_SPI_MEM_SUPPORT_SW_SUSPEND
- 
SOC_SPI_MEM_SUPPORT_CHECK_SUS
- 
SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE
- 
SOC_SPI_MEM_SUPPORT_WRAP
- 
SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED
- 
SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED
- 
SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED
- 
SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED
- 
SOC_SYSTIMER_COUNTER_NUM
- 
SOC_SYSTIMER_ALARM_NUM
- 
SOC_SYSTIMER_BIT_WIDTH_LO
- 
SOC_SYSTIMER_BIT_WIDTH_HI
- 
SOC_SYSTIMER_FIXED_DIVIDER
- 
SOC_SYSTIMER_INT_LEVEL
- 
SOC_SYSTIMER_ALARM_MISS_COMPENSATE
- 
SOC_LP_TIMER_BIT_WIDTH_LO
- 
SOC_LP_TIMER_BIT_WIDTH_HI
- 
SOC_MWDT_SUPPORT_XTAL
- 
SOC_TWAI_CONTROLLER_NUM
- 
SOC_TWAI_MASK_FILTER_NUM
- 
SOC_TWAI_CLK_SUPPORT_APB
- 
SOC_TWAI_BRP_MIN
- 
SOC_TWAI_BRP_MAX
- 
SOC_TWAI_SUPPORTS_RX_STATUS
- 
SOC_EFUSE_DIS_DOWNLOAD_ICACHE
- 
SOC_EFUSE_DIS_PAD_JTAG
- 
SOC_EFUSE_DIS_USB_JTAG
- 
SOC_EFUSE_DIS_DIRECT_BOOT
- 
SOC_EFUSE_SOFT_DIS_JTAG
- 
SOC_EFUSE_DIS_ICACHE
- 
SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK
- 
SOC_SECURE_BOOT_V2_RSA
- 
SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS
- 
SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS
- 
SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY
- 
SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX
- 
SOC_FLASH_ENCRYPTION_XTS_AES
- 
SOC_FLASH_ENCRYPTION_XTS_AES_128
- 
SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE
- 
SOC_MEMPROT_MEM_ALIGN_SIZE
- 
SOC_UART_NUM
- 
SOC_UART_HP_NUM
- 
SOC_UART_FIFO_LEN
- The UART hardware FIFO length 
- 
SOC_UART_BITRATE_MAX
- Max bit rate supported by UART 
- 
SOC_UART_SUPPORT_APB_CLK
- Support APB as the clock source 
- 
SOC_UART_SUPPORT_RTC_CLK
- Support RTC clock as the clock source 
- 
SOC_UART_SUPPORT_XTAL_CLK
- Support XTAL clock as the clock source 
- 
SOC_UART_SUPPORT_WAKEUP_INT
- Support UART wakeup interrupt 
- 
SOC_UART_SUPPORT_FSM_TX_WAIT_SEND
- 
SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE
- 
SOC_UHCI_NUM
- 
SOC_COEX_HW_PTI
- 
SOC_EXTERNAL_COEX_ADVANCE
- HARDWARE ADVANCED EXTERNAL COEXISTENCE CAPS 
- 
SOC_EXTERNAL_COEX_LEADER_TX_LINE
- EXTERNAL COEXISTENCE TX LINE CAPS 
- 
SOC_PHY_DIG_REGS_MEM_SIZE
- 
SOC_MAC_BB_PD_MEM_SIZE
- 
SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH
- 
SOC_PM_SUPPORT_WIFI_WAKEUP
- 
SOC_PM_SUPPORT_BT_WAKEUP
- 
SOC_PM_SUPPORT_CPU_PD
- 
SOC_PM_SUPPORT_WIFI_PD
- 
SOC_PM_SUPPORT_BT_PD
- 
SOC_PM_SUPPORT_RC_FAST_PD
- 
SOC_PM_SUPPORT_VDDSDIO_PD
- 
SOC_PM_SUPPORT_MAC_BB_PD
- 
SOC_PM_CPU_RETENTION_BY_RTCCNTL
- 
SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
- 
SOC_PM_MODEM_PD_BY_SW
- 
SOC_CLK_RC_FAST_D256_SUPPORTED
- 
SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256
- 
SOC_CLK_RC_FAST_SUPPORT_CALIBRATION
- 
SOC_CLK_XTAL32K_SUPPORTED
- Support to connect an external low frequency crystal 
- 
SOC_CLK_LP_FAST_SUPPORT_XTAL_D2
- Support XTAL_D2 clock as the LP_FAST clock source 
- 
SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC
- 
SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL
- 
SOC_WIFI_HW_TSF
- Support hardware TSF 
- 
SOC_WIFI_FTM_SUPPORT
- Support FTM 
- 
SOC_WIFI_GCMP_SUPPORT
- Support GCMP(GCMP128 and GCMP256) 
- 
SOC_WIFI_WAPI_SUPPORT
- Support WAPI 
- 
SOC_WIFI_CSI_SUPPORT
- Support CSI 
- 
SOC_WIFI_MESH_SUPPORT
- Support WIFI MESH 
- 
SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW
- Support delta early time for rf phy on/off 
- 
SOC_WIFI_PHY_NEEDS_USB_WORKAROUND
- SoC has WiFi and USB PHYs interference, needs a workaround 
- 
SOC_BLE_SUPPORTED
- Support Bluetooth Low Energy hardware 
- 
SOC_BLE_MESH_SUPPORTED
- Support BLE MESH 
- 
SOC_BLE_50_SUPPORTED
- Support Bluetooth 5.0 
- 
SOC_BLE_DEVICE_PRIVACY_SUPPORTED
- Support BLE device privacy mode 
- 
SOC_BLUFI_SUPPORTED
- Support BLUFI 
- 
SOC_PHY_COMBO_MODULE
- Support Wi-Fi and BLE 
Header File
- This header file can be included with: - #include "soc/soc_caps_eval.h" 
Macros
- 
_SOC_CAPS_EVAL(_name)
- SOC Capability evaluation helpers - These macros provide a standardized way to query SOC capabilities without directly accessing internal implementation macros in soc_caps_full.h and public macros in soc_caps.h. - The main categories of macros are: - SOC_IS : Check if the SOC is a specific target (e.g., SOC_IS(ESP32S3)) 
- SOC_MODULE_ATTR : Get a specific attribute of a module (e.g., SOC_MODULE_ATTR(GPTIMER, NUM)) 
- SOC_MODULE_SUPPORT : Check if a module supports a feature (e.g., SOC_MODULE_SUPPORT(GPTIMER, ETM)) 
 
- 
SOC_HAS(_module)
- 
SOC_IS(_target)
- 
SOC_MODULE_ATTR(_module, _attr)
- 
SOC_MODULE_SUPPORT(_module, _feat)