mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +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_ESP32C6, | ||||
|     VARIANT_ESP32H2, | ||||
|     VARIANT_ESP32P4, | ||||
|     VARIANT_ESP32S2, | ||||
|     VARIANT_ESP32S3, | ||||
|     VARIANT_FRIENDLY, | ||||
| @@ -89,6 +90,7 @@ CPU_FREQUENCIES = { | ||||
|     VARIANT_ESP32C3: get_cpu_frequencies(80, 160), | ||||
|     VARIANT_ESP32C6: get_cpu_frequencies(80, 120, 160), | ||||
|     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. | ||||
|   | ||||
| @@ -4,6 +4,7 @@ from .const import ( | ||||
|     VARIANT_ESP32C3, | ||||
|     VARIANT_ESP32C6, | ||||
|     VARIANT_ESP32H2, | ||||
|     VARIANT_ESP32P4, | ||||
|     VARIANT_ESP32S2, | ||||
|     VARIANT_ESP32S3, | ||||
| ) | ||||
| @@ -1632,6 +1633,14 @@ BOARDS = { | ||||
|         "name": "Espressif ESP32-H2-DevKit", | ||||
|         "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": { | ||||
|         "name": "Espressif ESP32-PICO-DevKitM-2", | ||||
|         "variant": VARIANT_ESP32, | ||||
|   | ||||
| @@ -19,6 +19,7 @@ VARIANT_ESP32C2 = "ESP32C2" | ||||
| VARIANT_ESP32C3 = "ESP32C3" | ||||
| VARIANT_ESP32C6 = "ESP32C6" | ||||
| VARIANT_ESP32H2 = "ESP32H2" | ||||
| VARIANT_ESP32P4 = "ESP32P4" | ||||
| VARIANTS = [ | ||||
|     VARIANT_ESP32, | ||||
|     VARIANT_ESP32S2, | ||||
| @@ -27,6 +28,7 @@ VARIANTS = [ | ||||
|     VARIANT_ESP32C3, | ||||
|     VARIANT_ESP32C6, | ||||
|     VARIANT_ESP32H2, | ||||
|     VARIANT_ESP32P4, | ||||
| ] | ||||
|  | ||||
| VARIANT_FRIENDLY = { | ||||
| @@ -37,6 +39,7 @@ VARIANT_FRIENDLY = { | ||||
|     VARIANT_ESP32C3: "ESP32-C3", | ||||
|     VARIANT_ESP32C6: "ESP32-C6", | ||||
|     VARIANT_ESP32H2: "ESP32-H2", | ||||
|     VARIANT_ESP32P4: "ESP32-P4", | ||||
| } | ||||
|  | ||||
| esp32_ns = cg.esphome_ns.namespace("esp32") | ||||
|   | ||||
| @@ -29,6 +29,7 @@ from .const import ( | ||||
|     VARIANT_ESP32C3, | ||||
|     VARIANT_ESP32C6, | ||||
|     VARIANT_ESP32H2, | ||||
|     VARIANT_ESP32P4, | ||||
|     VARIANT_ESP32S2, | ||||
|     VARIANT_ESP32S3, | ||||
|     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_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_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_s3 import esp32_s3_validate_gpio_pin, esp32_s3_validate_supports | ||||
|  | ||||
| @@ -106,6 +108,10 @@ _esp32_validations = { | ||||
|         pin_validation=esp32_h2_validate_gpio_pin, | ||||
|         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( | ||||
|         pin_validation=esp32_s2_validate_gpio_pin, | ||||
|         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_ESP32C6, | ||||
|     VARIANT_ESP32H2, | ||||
|     VARIANT_ESP32P4, | ||||
|     VARIANT_ESP32S2, | ||||
|     VARIANT_ESP32S3, | ||||
| ) | ||||
| @@ -89,6 +90,7 @@ UART_SELECTION_ESP32 = { | ||||
|     VARIANT_ESP32C2: [UART0, UART1], | ||||
|     VARIANT_ESP32C6: [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] | ||||
| @@ -206,6 +208,7 @@ CONFIG_SCHEMA = cv.All( | ||||
|                 esp32_c3_idf=USB_SERIAL_JTAG, | ||||
|                 esp32_c6_arduino=USB_CDC, | ||||
|                 esp32_c6_idf=USB_SERIAL_JTAG, | ||||
|                 esp32_p4_idf=USB_SERIAL_JTAG, | ||||
|                 rp2040=USB_CDC, | ||||
|                 bk72xx=DEFAULT, | ||||
|                 rtl87xx=DEFAULT, | ||||
|   | ||||
| @@ -18,12 +18,12 @@ | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #include "freertos/FreeRTOS.h" | ||||
| #include "esp_idf_version.h" | ||||
| #include "freertos/FreeRTOS.h" | ||||
|  | ||||
| #include <fcntl.h> | ||||
| #include <cstdint> | ||||
| #include <cstdio> | ||||
| #include <fcntl.h> | ||||
|  | ||||
| #endif  // USE_ESP_IDF | ||||
|  | ||||
| @@ -174,11 +174,11 @@ void Logger::pre_setup() { | ||||
| #ifdef USE_ESP_IDF | ||||
| void HOT Logger::write_msg_(const char *msg) { | ||||
|   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 | ||||
| #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 | ||||
| #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 | ||||
| #else | ||||
|       /* DISABLES CODE */ (false)  // NOLINT | ||||
|   | ||||
| @@ -160,7 +160,7 @@ | ||||
| #if defined(USE_ESP32_VARIANT_ESP32S2) | ||||
| #define USE_LOGGER_USB_CDC | ||||
| #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_SERIAL_JTAG | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user