Compare commits

...

1 Commits

Author SHA1 Message Date
J. Nick Koston
f195ac1afd Always use IDF SPI on ESP32 2025-10-05 23:15:53 -05:00
6 changed files with 62 additions and 27 deletions

View File

@@ -268,10 +268,10 @@ def validate_spi_config(config):
# Given an SPI index, convert to a string that represents the C++ object for it.
def get_spi_interface(index):
if CORE.using_esp_idf:
platform = get_target_platform()
if platform == PLATFORM_ESP32:
return ["SPI2_HOST", "SPI3_HOST"][index]
# Arduino code follows
platform = get_target_platform()
if platform == PLATFORM_RP2040:
return ["&SPI", "&SPI1"][index]
if index == 0:
@@ -306,7 +306,7 @@ def spi_mode_schema(mode):
if mode == TYPE_SINGLE:
return SPI_SINGLE_SCHEMA
pin_count = 4 if mode == TYPE_QUAD else 8
onlys = [cv.only_on([PLATFORM_ESP32]), cv.only_with_esp_idf]
onlys = [cv.only_on([PLATFORM_ESP32])]
if pin_count == 8:
onlys.append(
only_on_variant(
@@ -352,7 +352,7 @@ CONFIG_SCHEMA = cv.All(
async def to_code(configs):
cg.add_define("USE_SPI")
cg.add_global(spi_ns.using)
if CORE.using_arduino:
if CORE.using_arduino and get_target_platform() != PLATFORM_ESP32:
cg.add_library("SPI", None)
for spi in configs:
var = cg.new_Pvariable(spi[CONF_ID])
@@ -394,7 +394,9 @@ def spi_device_schema(
cv.Optional(CONF_SPI_MODE, default=default_mode): cv.enum(
SPI_MODE_OPTIONS, upper=True
),
cv.Optional(CONF_RELEASE_DEVICE): cv.All(cv.boolean, cv.only_with_esp_idf),
cv.Optional(CONF_RELEASE_DEVICE): cv.All(
cv.boolean, cv.only_on([PLATFORM_ESP32])
),
}
if cs_pin_required:
schema[cv.Required(CONF_CS_PIN)] = pins.gpio_output_pin_schema
@@ -443,13 +445,15 @@ def final_validate_device_schema(name: str, *, require_mosi: bool, require_miso:
FILTER_SOURCE_FILES = filter_source_files_from_platform(
{
"spi_arduino.cpp": {
PlatformFramework.ESP32_ARDUINO,
PlatformFramework.ESP8266_ARDUINO,
PlatformFramework.RP2040_ARDUINO,
PlatformFramework.BK72XX_ARDUINO,
PlatformFramework.RTL87XX_ARDUINO,
PlatformFramework.LN882X_ARDUINO,
},
"spi_esp_idf.cpp": {PlatformFramework.ESP32_IDF},
"spi_esp_idf.cpp": {
PlatformFramework.ESP32_IDF,
PlatformFramework.ESP32_ARDUINO,
},
}
)

View File

@@ -7,7 +7,7 @@
#include <utility>
#include <vector>
#ifdef USE_ARDUINO
#if defined(USE_ARDUINO) && !defined(USE_ESP32)
#include <SPI.h>
@@ -19,13 +19,13 @@ using SPIInterface = SPIClass *;
#endif
#ifdef USE_ESP_IDF
#ifdef USE_ESP32
#include "driver/spi_master.h"
using SPIInterface = spi_host_device_t;
#endif // USE_ESP_IDF
#endif // USE_ESP32
#ifdef USE_ZEPHYR
// TODO supprse clang-tidy. Remove after SPI driver for nrf52 is added.

View File

@@ -3,7 +3,7 @@
namespace esphome {
namespace spi {
#ifdef USE_ARDUINO
#if defined(USE_ARDUINO) && !defined(USE_ESP32)
static const char *const TAG = "spi-esp-arduino";
class SPIDelegateHw : public SPIDelegate {
@@ -73,9 +73,6 @@ class SPIBusHw : public SPIBus {
channel->pins(Utility::get_pin_no(clk), Utility::get_pin_no(sdi), Utility::get_pin_no(sdo), -1);
channel->begin();
#endif // USE_ESP8266
#ifdef USE_ESP32
channel->begin(Utility::get_pin_no(clk), Utility::get_pin_no(sdi), Utility::get_pin_no(sdo), -1);
#endif
#ifdef USE_RP2040
if (Utility::get_pin_no(sdi) != -1)
channel->setRX(Utility::get_pin_no(sdi));

View File

@@ -4,7 +4,7 @@
namespace esphome {
namespace spi {
#ifdef USE_ESP_IDF
#ifdef USE_ESP32
static const char *const TAG = "spi-esp-idf";
static const size_t MAX_TRANSFER_SIZE = 4092; // dictated by ESP-IDF API.

View File

@@ -1,6 +1,16 @@
substitutions:
clk_pin: GPIO6
mosi_pin: GPIO7
miso_pin: GPIO5
<<: !include common.yaml
spi:
- id: quad_spi
type: quad
interface: hardware
clk_pin:
number: 6
data_pins:
- 7
- 2
- 10
- allow_other_uses: true
number: 3
- id: spi_id_2
interface: any
clk_pin: 4
mosi_pin: 5

View File

@@ -1,13 +1,37 @@
spi:
- id: three_spi
- id: quad_spi
type: quad
interface: spi3
clk_pin:
number: 47
mosi_pin:
number: 40
- id: hw_spi
data_pins:
- allow_other_uses: true
number: 40
- allow_other_uses: true
number: 41
- allow_other_uses: true
number: 42
- allow_other_uses: true
number: 43
- id: octal_spi
type: octal
interface: hardware
clk_pin:
number: 0
miso_pin:
number: 41
data_pins:
- 36
- 37
- 38
- 39
- allow_other_uses: true
number: 40
- allow_other_uses: true
number: 41
- allow_other_uses: true
number: 42
- allow_other_uses: true
number: 43
- id: spi_id_3
interface: any
clk_pin: 8
mosi_pin: 9