2024-07-26 12:50:15 +01:00
|
|
|
/*
|
|
|
|
support_a_spi.ino - SPI support for Tasmota
|
|
|
|
|
|
|
|
SPDX-FileCopyrightText: 2024 Theo Arends
|
|
|
|
|
|
|
|
SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef USE_SPI
|
|
|
|
/*********************************************************************************************\
|
|
|
|
* Basic SPI routines supporting two busses
|
|
|
|
\*********************************************************************************************/
|
|
|
|
|
|
|
|
SPIClass *SpiBegin(uint32 bus = 1);
|
|
|
|
SPIClass *SpiBegin(uint32 bus) {
|
|
|
|
SPIClass *spi;
|
|
|
|
if (1 == bus) { // SPI bus 1
|
|
|
|
if (TasmotaGlobal.spi_enabled) {
|
2024-07-26 13:29:51 +01:00
|
|
|
spi = &SPI; // Uses VSPI on ESP32 or FSPI on all other ESP32 derivatives (See SPI.cpp)
|
2024-07-26 12:50:15 +01:00
|
|
|
#ifdef ESP8266
|
|
|
|
spi->begin();
|
|
|
|
#endif // ESP8266
|
|
|
|
#ifdef ESP32
|
|
|
|
spi->begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
|
|
|
|
#endif // ESP32
|
|
|
|
return spi;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#ifdef ESP32
|
|
|
|
if (2 == bus) { // SPI bus 2
|
|
|
|
if (TasmotaGlobal.spi_enabled2) {
|
2024-07-26 13:29:51 +01:00
|
|
|
spi = new SPIClass(HSPI); // See framework-arduinoespressif32 esp32-hal-spi.h
|
2024-07-26 12:50:15 +01:00
|
|
|
spi->begin(Pin(GPIO_SPI_CLK, 1), Pin(GPIO_SPI_MISO, 1), Pin(GPIO_SPI_MOSI, 1), -1);
|
|
|
|
return spi;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif // ESP32
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // USE_SPI
|
|
|
|
|
|
|
|
/********************************************************************************************/
|
|
|
|
|
|
|
|
void AddLogSpi(uint32_t hardware, int clk, int mosi, int miso) {
|
|
|
|
uint32_t enabled = TasmotaGlobal.soft_spi_enabled;
|
|
|
|
char hwswbus[8];
|
|
|
|
if (hardware) {
|
|
|
|
#ifdef ESP8266
|
|
|
|
strcpy_P(hwswbus, PSTR("Hard"));
|
|
|
|
enabled = TasmotaGlobal.spi_enabled;
|
|
|
|
#endif
|
|
|
|
#ifdef ESP32
|
|
|
|
strcpy_P(hwswbus, PSTR("Bus0"));
|
|
|
|
hwswbus[3] += (char)hardware;
|
|
|
|
enabled = (1 == hardware) ? TasmotaGlobal.spi_enabled : TasmotaGlobal.spi_enabled2;
|
|
|
|
#endif
|
|
|
|
} else {
|
|
|
|
strcpy_P(hwswbus, PSTR("Soft"));
|
|
|
|
}
|
|
|
|
switch(enabled) {
|
|
|
|
case SPI_MOSI:
|
|
|
|
AddLog(LOG_LEVEL_INFO, PSTR("SPI: %s using GPIO%02d(CLK) and GPIO%02d(MOSI)"),
|
|
|
|
hwswbus, clk, mosi);
|
|
|
|
break;
|
|
|
|
case SPI_MISO:
|
|
|
|
AddLog(LOG_LEVEL_INFO, PSTR("SPI: %s using GPIO%02d(CLK) and GPIO%02d(MISO)"),
|
|
|
|
hwswbus, clk, miso);
|
|
|
|
break;
|
|
|
|
case SPI_MOSI_MISO:
|
|
|
|
AddLog(LOG_LEVEL_INFO, PSTR("SPI: %s using GPIO%02d(CLK), GPIO%02d(MOSI) and GPIO%02d(MISO)"),
|
|
|
|
hwswbus, clk, mosi, miso);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|