CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
SpiBus.cpp
Go to the documentation of this file.
1
5
6#include "cdc_hal/ISpiBus.h"
7#include "cdc_hal/hw_config.h"
8#include "cdc_log.h"
9#include <atomic>
10
11static const char* TAG = "SpiBus";
12
13namespace cdc::hal {
14
16static constexpr spi_host_device_t SPI_BUS_HOST = SPI2_HOST;
17static constexpr uint32_t SPI_DMA_CHAN = SPI_DMA_CH_AUTO;
18
19static std::atomic<bool> g_spiInitialized{false};
20
25spi_host_device_t getSharedSpiHost() {
26 return SPI_BUS_HOST;
27}
28
33esp_err_t initSharedSpiBus() {
34 // Already initialized?
35 if (g_spiInitialized.load()) {
36 return ESP_OK;
37 }
38
39 // Configure SPI bus
40 spi_bus_config_t buscfg = {};
41 buscfg.mosi_io_num = SPI_MOSI_PIN;
42 buscfg.miso_io_num = SPI_MISO_PIN;
43 buscfg.sclk_io_num = SPI_SCLK_PIN;
44 buscfg.quadwp_io_num = -1;
45 buscfg.quadhd_io_num = -1;
46 buscfg.max_transfer_sz = 4096;
47 buscfg.flags = SPICOMMON_BUSFLAG_MASTER;
48
49 esp_err_t err = spi_bus_initialize(SPI_BUS_HOST, &buscfg, SPI_DMA_CHAN);
50 if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
51 LOG_E(TAG, "SPI bus init failed: %d", err);
52 return err;
53 }
54
55 if (err == ESP_ERR_INVALID_STATE) {
56 // Already initialized (by CalEPD most likely)
57 LOG_I(TAG, "SPI bus already initialized (by display)");
58 } else {
59 LOG_I(TAG, "SPI bus initialized (MOSI=%d, MISO=%d, CLK=%d)",
61 }
62
63 g_spiInitialized.store(true);
64 return ESP_OK;
65}
66
67} // namespace cdc::hal
static const char * TAG
CDC Log: logging over TinyUSB CDC and UART.
#define LOG_I(tag, fmt,...)
Definition cdc_log.h:147
#define LOG_E(tag, fmt,...)
Definition cdc_log.h:145
#define SPI_MISO_PIN
Definition hw_config.h:36
#define SPI_MOSI_PIN
Definition hw_config.h:37
#define SPI_SCLK_PIN
Definition hw_config.h:35
static std::atomic< bool > g_spiInitialized
Definition SpiBus.cpp:19
static constexpr uint32_t SPI_DMA_CHAN
Definition SpiBus.cpp:17
esp_err_t initSharedSpiBus()
Initializes shared SPI bus once for all SPI peripherals.
Definition SpiBus.cpp:33
static constexpr spi_host_device_t SPI_BUS_HOST
Shared SPI host selection for ESP32-S3 user peripherals.
Definition SpiBus.cpp:16
spi_host_device_t getSharedSpiHost()
Returns shared SPI host identifier.
Definition SpiBus.cpp:25