mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	[esp32, logger] Add initial P4 support (#8439)
Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
		| @@ -59,6 +59,7 @@ from .const import (  # noqa | |||||||
|     VARIANT_ESP32C3, |     VARIANT_ESP32C3, | ||||||
|     VARIANT_ESP32C6, |     VARIANT_ESP32C6, | ||||||
|     VARIANT_ESP32H2, |     VARIANT_ESP32H2, | ||||||
|  |     VARIANT_ESP32P4, | ||||||
|     VARIANT_ESP32S2, |     VARIANT_ESP32S2, | ||||||
|     VARIANT_ESP32S3, |     VARIANT_ESP32S3, | ||||||
|     VARIANT_FRIENDLY, |     VARIANT_FRIENDLY, | ||||||
| @@ -89,6 +90,7 @@ CPU_FREQUENCIES = { | |||||||
|     VARIANT_ESP32C3: get_cpu_frequencies(80, 160), |     VARIANT_ESP32C3: get_cpu_frequencies(80, 160), | ||||||
|     VARIANT_ESP32C6: get_cpu_frequencies(80, 120, 160), |     VARIANT_ESP32C6: get_cpu_frequencies(80, 120, 160), | ||||||
|     VARIANT_ESP32H2: get_cpu_frequencies(16, 32, 48, 64, 96), |     VARIANT_ESP32H2: get_cpu_frequencies(16, 32, 48, 64, 96), | ||||||
|  |     VARIANT_ESP32P4: get_cpu_frequencies(40, 360, 400), | ||||||
| } | } | ||||||
|  |  | ||||||
| # Make sure not missed here if a new variant added. | # Make sure not missed here if a new variant added. | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ from .const import ( | |||||||
|     VARIANT_ESP32C3, |     VARIANT_ESP32C3, | ||||||
|     VARIANT_ESP32C6, |     VARIANT_ESP32C6, | ||||||
|     VARIANT_ESP32H2, |     VARIANT_ESP32H2, | ||||||
|  |     VARIANT_ESP32P4, | ||||||
|     VARIANT_ESP32S2, |     VARIANT_ESP32S2, | ||||||
|     VARIANT_ESP32S3, |     VARIANT_ESP32S3, | ||||||
| ) | ) | ||||||
| @@ -1632,6 +1633,14 @@ BOARDS = { | |||||||
|         "name": "Espressif ESP32-H2-DevKit", |         "name": "Espressif ESP32-H2-DevKit", | ||||||
|         "variant": VARIANT_ESP32H2, |         "variant": VARIANT_ESP32H2, | ||||||
|     }, |     }, | ||||||
|  |     "esp32-p4": { | ||||||
|  |         "name": "Espressif ESP32-P4 generic", | ||||||
|  |         "variant": VARIANT_ESP32P4, | ||||||
|  |     }, | ||||||
|  |     "esp32-p4-evboard": { | ||||||
|  |         "name": "Espressif ESP32-P4 Function EV Board", | ||||||
|  |         "variant": VARIANT_ESP32P4, | ||||||
|  |     }, | ||||||
|     "esp32-pico-devkitm-2": { |     "esp32-pico-devkitm-2": { | ||||||
|         "name": "Espressif ESP32-PICO-DevKitM-2", |         "name": "Espressif ESP32-PICO-DevKitM-2", | ||||||
|         "variant": VARIANT_ESP32, |         "variant": VARIANT_ESP32, | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ VARIANT_ESP32C2 = "ESP32C2" | |||||||
| VARIANT_ESP32C3 = "ESP32C3" | VARIANT_ESP32C3 = "ESP32C3" | ||||||
| VARIANT_ESP32C6 = "ESP32C6" | VARIANT_ESP32C6 = "ESP32C6" | ||||||
| VARIANT_ESP32H2 = "ESP32H2" | VARIANT_ESP32H2 = "ESP32H2" | ||||||
|  | VARIANT_ESP32P4 = "ESP32P4" | ||||||
| VARIANTS = [ | VARIANTS = [ | ||||||
|     VARIANT_ESP32, |     VARIANT_ESP32, | ||||||
|     VARIANT_ESP32S2, |     VARIANT_ESP32S2, | ||||||
| @@ -27,6 +28,7 @@ VARIANTS = [ | |||||||
|     VARIANT_ESP32C3, |     VARIANT_ESP32C3, | ||||||
|     VARIANT_ESP32C6, |     VARIANT_ESP32C6, | ||||||
|     VARIANT_ESP32H2, |     VARIANT_ESP32H2, | ||||||
|  |     VARIANT_ESP32P4, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| VARIANT_FRIENDLY = { | VARIANT_FRIENDLY = { | ||||||
| @@ -37,6 +39,7 @@ VARIANT_FRIENDLY = { | |||||||
|     VARIANT_ESP32C3: "ESP32-C3", |     VARIANT_ESP32C3: "ESP32-C3", | ||||||
|     VARIANT_ESP32C6: "ESP32-C6", |     VARIANT_ESP32C6: "ESP32-C6", | ||||||
|     VARIANT_ESP32H2: "ESP32-H2", |     VARIANT_ESP32H2: "ESP32-H2", | ||||||
|  |     VARIANT_ESP32P4: "ESP32-P4", | ||||||
| } | } | ||||||
|  |  | ||||||
| esp32_ns = cg.esphome_ns.namespace("esp32") | esp32_ns = cg.esphome_ns.namespace("esp32") | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ from .const import ( | |||||||
|     VARIANT_ESP32C3, |     VARIANT_ESP32C3, | ||||||
|     VARIANT_ESP32C6, |     VARIANT_ESP32C6, | ||||||
|     VARIANT_ESP32H2, |     VARIANT_ESP32H2, | ||||||
|  |     VARIANT_ESP32P4, | ||||||
|     VARIANT_ESP32S2, |     VARIANT_ESP32S2, | ||||||
|     VARIANT_ESP32S3, |     VARIANT_ESP32S3, | ||||||
|     esp32_ns, |     esp32_ns, | ||||||
| @@ -38,6 +39,7 @@ from .gpio_esp32_c2 import esp32_c2_validate_gpio_pin, esp32_c2_validate_support | |||||||
| from .gpio_esp32_c3 import esp32_c3_validate_gpio_pin, esp32_c3_validate_supports | from .gpio_esp32_c3 import esp32_c3_validate_gpio_pin, esp32_c3_validate_supports | ||||||
| from .gpio_esp32_c6 import esp32_c6_validate_gpio_pin, esp32_c6_validate_supports | from .gpio_esp32_c6 import esp32_c6_validate_gpio_pin, esp32_c6_validate_supports | ||||||
| from .gpio_esp32_h2 import esp32_h2_validate_gpio_pin, esp32_h2_validate_supports | from .gpio_esp32_h2 import esp32_h2_validate_gpio_pin, esp32_h2_validate_supports | ||||||
|  | from .gpio_esp32_p4 import esp32_p4_validate_gpio_pin, esp32_p4_validate_supports | ||||||
| from .gpio_esp32_s2 import esp32_s2_validate_gpio_pin, esp32_s2_validate_supports | from .gpio_esp32_s2 import esp32_s2_validate_gpio_pin, esp32_s2_validate_supports | ||||||
| from .gpio_esp32_s3 import esp32_s3_validate_gpio_pin, esp32_s3_validate_supports | from .gpio_esp32_s3 import esp32_s3_validate_gpio_pin, esp32_s3_validate_supports | ||||||
|  |  | ||||||
| @@ -106,6 +108,10 @@ _esp32_validations = { | |||||||
|         pin_validation=esp32_h2_validate_gpio_pin, |         pin_validation=esp32_h2_validate_gpio_pin, | ||||||
|         usage_validation=esp32_h2_validate_supports, |         usage_validation=esp32_h2_validate_supports, | ||||||
|     ), |     ), | ||||||
|  |     VARIANT_ESP32P4: ESP32ValidationFunctions( | ||||||
|  |         pin_validation=esp32_p4_validate_gpio_pin, | ||||||
|  |         usage_validation=esp32_p4_validate_supports, | ||||||
|  |     ), | ||||||
|     VARIANT_ESP32S2: ESP32ValidationFunctions( |     VARIANT_ESP32S2: ESP32ValidationFunctions( | ||||||
|         pin_validation=esp32_s2_validate_gpio_pin, |         pin_validation=esp32_s2_validate_gpio_pin, | ||||||
|         usage_validation=esp32_s2_validate_supports, |         usage_validation=esp32_s2_validate_supports, | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								esphome/components/esp32/gpio_esp32_p4.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								esphome/components/esp32/gpio_esp32_p4.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | import logging | ||||||
|  |  | ||||||
|  | import esphome.config_validation as cv | ||||||
|  | from esphome.const import CONF_INPUT, CONF_MODE, CONF_NUMBER | ||||||
|  |  | ||||||
|  | _ESP32P4_USB_JTAG_PINS = {24, 25} | ||||||
|  |  | ||||||
|  | _ESP32P4_STRAPPING_PINS = {34, 35, 36, 37, 38} | ||||||
|  |  | ||||||
|  | _LOGGER = logging.getLogger(__name__) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def esp32_p4_validate_gpio_pin(value): | ||||||
|  |     if value < 0 or value > 54: | ||||||
|  |         raise cv.Invalid(f"Invalid pin number: {value} (must be 0-54)") | ||||||
|  |     if value in _ESP32P4_STRAPPING_PINS: | ||||||
|  |         _LOGGER.warning( | ||||||
|  |             "GPIO%d is a Strapping PIN and should be avoided.\n" | ||||||
|  |             "Attaching external pullup/down resistors to strapping pins can cause unexpected failures.\n" | ||||||
|  |             "See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins", | ||||||
|  |             value, | ||||||
|  |         ) | ||||||
|  |     if value in _ESP32P4_USB_JTAG_PINS: | ||||||
|  |         _LOGGER.warning( | ||||||
|  |             "GPIO%d is reserved for the USB-Serial-JTAG interface.\n" | ||||||
|  |             "To use this pin as GPIO, USB-Serial-JTAG will be disabled.", | ||||||
|  |             value, | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     return value | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def esp32_p4_validate_supports(value): | ||||||
|  |     num = value[CONF_NUMBER] | ||||||
|  |     mode = value[CONF_MODE] | ||||||
|  |     is_input = mode[CONF_INPUT] | ||||||
|  |  | ||||||
|  |     if num < 0 or num > 54: | ||||||
|  |         raise cv.Invalid(f"Invalid pin number: {value} (must be 0-54)") | ||||||
|  |     if is_input: | ||||||
|  |         # All ESP32 pins support input mode | ||||||
|  |         pass | ||||||
|  |     return value | ||||||
| @@ -10,6 +10,7 @@ from esphome.components.esp32.const import ( | |||||||
|     VARIANT_ESP32C3, |     VARIANT_ESP32C3, | ||||||
|     VARIANT_ESP32C6, |     VARIANT_ESP32C6, | ||||||
|     VARIANT_ESP32H2, |     VARIANT_ESP32H2, | ||||||
|  |     VARIANT_ESP32P4, | ||||||
|     VARIANT_ESP32S2, |     VARIANT_ESP32S2, | ||||||
|     VARIANT_ESP32S3, |     VARIANT_ESP32S3, | ||||||
| ) | ) | ||||||
| @@ -89,6 +90,7 @@ UART_SELECTION_ESP32 = { | |||||||
|     VARIANT_ESP32C2: [UART0, UART1], |     VARIANT_ESP32C2: [UART0, UART1], | ||||||
|     VARIANT_ESP32C6: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG], |     VARIANT_ESP32C6: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG], | ||||||
|     VARIANT_ESP32H2: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG], |     VARIANT_ESP32H2: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG], | ||||||
|  |     VARIANT_ESP32P4: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG], | ||||||
| } | } | ||||||
|  |  | ||||||
| UART_SELECTION_ESP8266 = [UART0, UART0_SWAP, UART1] | UART_SELECTION_ESP8266 = [UART0, UART0_SWAP, UART1] | ||||||
| @@ -206,6 +208,7 @@ CONFIG_SCHEMA = cv.All( | |||||||
|                 esp32_c3_idf=USB_SERIAL_JTAG, |                 esp32_c3_idf=USB_SERIAL_JTAG, | ||||||
|                 esp32_c6_arduino=USB_CDC, |                 esp32_c6_arduino=USB_CDC, | ||||||
|                 esp32_c6_idf=USB_SERIAL_JTAG, |                 esp32_c6_idf=USB_SERIAL_JTAG, | ||||||
|  |                 esp32_p4_idf=USB_SERIAL_JTAG, | ||||||
|                 rp2040=USB_CDC, |                 rp2040=USB_CDC, | ||||||
|                 bk72xx=DEFAULT, |                 bk72xx=DEFAULT, | ||||||
|                 rtl87xx=DEFAULT, |                 rtl87xx=DEFAULT, | ||||||
|   | |||||||
| @@ -18,12 +18,12 @@ | |||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include "freertos/FreeRTOS.h" |  | ||||||
| #include "esp_idf_version.h" | #include "esp_idf_version.h" | ||||||
|  | #include "freertos/FreeRTOS.h" | ||||||
|  |  | ||||||
|  | #include <fcntl.h> | ||||||
| #include <cstdint> | #include <cstdint> | ||||||
| #include <cstdio> | #include <cstdio> | ||||||
| #include <fcntl.h> |  | ||||||
|  |  | ||||||
| #endif  // USE_ESP_IDF | #endif  // USE_ESP_IDF | ||||||
|  |  | ||||||
| @@ -174,11 +174,11 @@ void Logger::pre_setup() { | |||||||
| #ifdef USE_ESP_IDF | #ifdef USE_ESP_IDF | ||||||
| void HOT Logger::write_msg_(const char *msg) { | void HOT Logger::write_msg_(const char *msg) { | ||||||
|   if ( |   if ( | ||||||
| #if defined(USE_ESP32_VARIANT_ESP32S2) | #if defined(USE_LOGGER_USB_CDC) && !defined(USE_LOGGER_USB_SERIAL_JTAG) | ||||||
|       this->uart_ == UART_SELECTION_USB_CDC |       this->uart_ == UART_SELECTION_USB_CDC | ||||||
| #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2) | #elif defined(USE_LOGGER_USB_SERIAL_JTAG) && !defined(USE_LOGGER_USB_CDC) | ||||||
|       this->uart_ == UART_SELECTION_USB_SERIAL_JTAG |       this->uart_ == UART_SELECTION_USB_SERIAL_JTAG | ||||||
| #elif defined(USE_ESP32_VARIANT_ESP32S3) | #elif defined(USE_LOGGER_USB_CDC) && defined(USE_LOGGER_USB_SERIAL_JTAG) | ||||||
|       this->uart_ == UART_SELECTION_USB_CDC || this->uart_ == UART_SELECTION_USB_SERIAL_JTAG |       this->uart_ == UART_SELECTION_USB_CDC || this->uart_ == UART_SELECTION_USB_SERIAL_JTAG | ||||||
| #else | #else | ||||||
|       /* DISABLES CODE */ (false)  // NOLINT |       /* DISABLES CODE */ (false)  // NOLINT | ||||||
|   | |||||||
| @@ -160,7 +160,7 @@ | |||||||
| #if defined(USE_ESP32_VARIANT_ESP32S2) | #if defined(USE_ESP32_VARIANT_ESP32S2) | ||||||
| #define USE_LOGGER_USB_CDC | #define USE_LOGGER_USB_CDC | ||||||
| #elif defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C3) || \ | #elif defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C3) || \ | ||||||
|     defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2) |     defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2) || defined(USE_ESP32_VARIANT_ESP32P4) | ||||||
| #define USE_LOGGER_USB_CDC | #define USE_LOGGER_USB_CDC | ||||||
| #define USE_LOGGER_USB_SERIAL_JTAG | #define USE_LOGGER_USB_SERIAL_JTAG | ||||||
| #endif | #endif | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user