HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspTypes_SPI.h
Go to the documentation of this file.
1
14#pragma once
15
16#include "BaseSpi.h" // For hf_spi_err_t
17#include "EspTypes_Base.h"
18#include "HardwareTypes.h" // For basic hardware types
19#include "McuSelect.h" // Central MCU platform selection (includes all ESP-IDF)
20
21// ESP-IDF C headers must be wrapped in extern "C" for C++ compatibility
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#include "driver/spi_master.h"
27
28#ifdef __cplusplus
29}
30#endif
31
32// Forward declarations for new SPI bus/device classes
33class EspSpiBus;
34class EspSpiDevice;
35
36//==============================================================================
37// ESP32 SPI TYPE MAPPINGS
38//==============================================================================
39
40// Direct ESP-IDF type usage - no unnecessary aliases
41// These types are used internally by EspSpi implementation
42using hf_spi_device_handle_t = spi_device_handle_t;
43using hf_spi_device_interface_config_t = spi_device_interface_config_t;
44using hf_spi_transaction_t = spi_transaction_t;
45using hf_spi_clock_source_t = spi_clock_source_t;
46using hf_spi_sampling_point_t = spi_sampling_point_t;
47
48//==============================================================================
49// ESP32 SPI ENUMS
50//==============================================================================
51
55enum class hf_spi_mode_t : uint8_t {
56 HF_SPI_MODE_0 = 0,
57 HF_SPI_MODE_1 = 1,
58 HF_SPI_MODE_2 = 2,
59 HF_SPI_MODE_3 = 3,
60};
61
62// /**
63// * @brief ESP32 SPI host device enumeration.
64// * @details ESP32 SPI controller mapping aligned with ESP-IDF.
65// * SPI1 is reserved for flash and not exposed to users.
66// */
67// enum class hf_spi_host_device_t : uint8_t {
68// HF_SPI2_HOST =
69// static_cast<uint8_t>(spi_host_device_t::SPI2_HOST), ///< SPI2 host (general purpose) -
70// ESP-IDF SPI2_HOST
71// #ifdef HF_MCU_ESP32C6
72// // ESP32-C6 only has SPI2_HOST available for general purpose use
73// HF_SPI_HOST_MAX =
74// static_cast<uint8_t>(spi_host_device_t::SPI2_HOST + 1), ///< Maximum number of SPI hosts
75// for ESP32-C6
76// #else
77// HF_SPI3_HOST =
78// static_cast<uint8_t>(spi_host_device_t::SPI3_HOST), ///< SPI3 host (general purpose) -
79// ESP-IDF SPI3_HOST
80// HF_SPI_HOST_MAX = static_cast<uint8_t>(spi_host_device_t::SPI_HOST_MAX), ///< Maximum number of
81// SPI hosts
82// #endif
83// };
84
95
107
108//==============================================================================
109// ESP32 SPI CONSTANTS AND VALIDATION MACROS
110//==============================================================================
111
112static constexpr uint32_t HF_SPI_MIN_CLOCK_SPEED = 1000;
113static constexpr uint32_t HF_SPI_MAX_CLOCK_SPEED = 80000000;
114static constexpr uint32_t HF_SPI_MAX_TRANSFER_SIZE = 4092;
115static constexpr uint8_t HF_SPI_MAX_HOSTS = 3;
116
117#define HF_SPI_IS_VALID_HOST(host) \
118 ((host) < static_cast<uint8_t>(spi_host_device_t::HF_SPI_HOST_MAX))
119#define HF_SPI_IS_VALID_CLOCK_SPEED(speed) \
120 ((speed) >= HF_SPI_MIN_CLOCK_SPEED && (speed) <= HF_SPI_MAX_CLOCK_SPEED)
121#define HF_SPI_IS_VALID_MODE(mode) ((mode) >= 0 && (mode) <= 3)
122#define HF_SPI_IS_VALID_TRANSFER_SIZE(size) ((size) > 0 && (size) <= HF_SPI_MAX_TRANSFER_SIZE)
123
124//==============================================================================
125// ESP32 SPI BUS CONFIG STRUCT
126//==============================================================================
165
166//==============================================================================
167// ESP32 SPI DEVICE CONFIG STRUCT
168//==============================================================================
242
243// ESP-IDF SPI device flags (matching ESP-IDF example patterns)
244#define HF_SPI_DEVICE_HALFDUPLEX (1 << 0) // Half-duplex mode
245#define HF_SPI_DEVICE_POSITIVE_CS (1 << 1) // CS active high
246#define HF_SPI_DEVICE_CLK_AS_CS (1 << 2) // Clock idle state
247#define HF_SPI_DEVICE_NO_DUMMY (1 << 3) // No dummy bits
248#define HF_SPI_DEVICE_DDRCLK (1 << 4) // DDR clock mode
249
250//==============================================================================
251// END OF ESPSPI TYPES - MINIMAL AND ESSENTIAL ONLY
252//==============================================================================
Abstract base class for SPI device implementations in the HardFOC system.
ESP32 base type definitions for hardware abstraction.
static constexpr uint8_t HF_SPI_MAX_HOSTS
Maximum SPI hosts.
Definition EspTypes_SPI.h:115
spi_sampling_point_t hf_spi_sampling_point_t
Definition EspTypes_SPI.h:46
static constexpr uint32_t HF_SPI_MAX_TRANSFER_SIZE
Maximum transfer size (bytes)
Definition EspTypes_SPI.h:114
static constexpr uint32_t HF_SPI_MAX_CLOCK_SPEED
Maximum SPI clock speed (Hz)
Definition EspTypes_SPI.h:113
hf_spi_transfer_mode_t
SPI transfer modes for ESP32.
Definition EspTypes_SPI.h:89
@ HF_SPI_TRANSFER_MODE_OCTAL
Octal SPI (8-bit data lines) - ESP32 specific.
@ HF_SPI_TRANSFER_MODE_QUAD
Quad SPI (4-bit data lines)
@ HF_SPI_TRANSFER_MODE_DUAL
Dual SPI (2-bit data lines)
@ HF_SPI_TRANSFER_MODE_SINGLE
Standard SPI (1-bit MOSI/MISO)
static constexpr uint32_t HF_SPI_MIN_CLOCK_SPEED
Minimum SPI clock speed (Hz)
Definition EspTypes_SPI.h:112
hf_spi_event_type_t
SPI event types for callback notifications.
Definition EspTypes_SPI.h:100
@ HF_SPI_EVENT_BUS_SUSPENDED
Bus suspended for power saving.
@ HF_SPI_EVENT_TRANSACTION_COMPLETE
Transaction completed.
@ HF_SPI_EVENT_BUS_RESUMED
Bus resumed from suspension.
@ HF_SPI_EVENT_DMA_ERROR
DMA error occurred.
@ HF_SPI_EVENT_TRANSACTION_ERROR
Transaction error occurred.
spi_transaction_t hf_spi_transaction_t
Definition EspTypes_SPI.h:44
spi_device_handle_t hf_spi_device_handle_t
Definition EspTypes_SPI.h:42
hf_spi_mode_t
ESP32 SPI mode configuration.
Definition EspTypes_SPI.h:55
@ HF_SPI_MODE_3
CPOL=1, CPHA=1.
@ HF_SPI_MODE_0
CPOL=0, CPHA=0.
@ HF_SPI_MODE_2
CPOL=1, CPHA=0.
@ HF_SPI_MODE_1
CPOL=0, CPHA=1.
spi_device_interface_config_t hf_spi_device_interface_config_t
Definition EspTypes_SPI.h:43
spi_clock_source_t hf_spi_clock_source_t
Definition EspTypes_SPI.h:45
Platform-agnostic hardware type definitions for the HardFOC system.
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
hf_time_t hf_timeout_ms_t
Timeout value in milliseconds.
Definition HardwareTypes.h:178
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
constexpr hf_pin_num_t HF_INVALID_PIN
Invalid pin constant for unassigned or invalid pins.
Definition HardwareTypes.h:104
hf_i32_t hf_pin_num_t
Platform-agnostic GPIO pin number type.
Definition HardwareTypes.h:99
constexpr hf_host_id_t HF_INVALID_HOST
Invalid host constant for unassigned or invalid hosts.
Definition HardwareTypes.h:136
hf_u32_t hf_host_id_t
Platform-agnostic host/controller identifier type.
Definition HardwareTypes.h:131
uint16_t hf_u16_t
Platform-agnostic 16-bit unsigned integer type.
Definition HardwareTypes.h:46
Centralized MCU platform selection and configuration header.
Manages a single SPI bus (host). Handles bus init/deinit and device creation.
Definition EspSpi.h:169
Represents a single SPI device on a bus (CS/config/handle).
Definition EspSpi.h:74
Platform-agnostic SPI bus configuration for STM32.
Definition EspTypes_SPI.h:150
hf_spi_bus_config_t() noexcept
Definition EspTypes_SPI.h:160
hf_timeout_ms_t timeout_ms
Default timeout for operations (ms)
Definition EspTypes_SPI.h:157
hf_pin_num_t sclk_pin
SCLK pin.
Definition EspTypes_SPI.h:154
bool use_iomux
Use IOMUX for better performance.
Definition EspTypes_SPI.h:158
hf_u8_t dma_channel
DMA channel (0=auto, 1/2=specific, 0xFF=disabled)
Definition EspTypes_SPI.h:156
hf_pin_num_t mosi_pin
MOSI pin.
Definition EspTypes_SPI.h:152
hf_u32_t clock_speed_hz
Default clock speed in Hz.
Definition EspTypes_SPI.h:155
hf_pin_num_t miso_pin
MISO pin.
Definition EspTypes_SPI.h:153
hf_host_id_t host
SPI host/controller (e.g., HF_SPI2_HOST)
Definition EspTypes_SPI.h:151
SPI device configuration for STM32.
Definition EspTypes_SPI.h:210
hf_u16_t duty_cycle_pos
Duty cycle of positive clock (1/256th, 128=50%)
Definition EspTypes_SPI.h:218
hf_u32_t flags
Bitwise OR of SPI_DEVICE_* flags.
Definition EspTypes_SPI.h:221
void(* pre_cb)(void *)
Pre-transfer callback (optional)
Definition EspTypes_SPI.h:223
hf_u16_t cs_ena_pretrans
CS active before transmission (bit-cycles)
Definition EspTypes_SPI.h:219
hf_u8_t cs_ena_posttrans
CS active after transmission (bit-cycles)
Definition EspTypes_SPI.h:220
hf_u32_t input_delay_ns
Input delay (ns)
Definition EspTypes_SPI.h:222
hf_u8_t queue_size
Transaction queue size.
Definition EspTypes_SPI.h:214
hf_u8_t command_bits
Command phase bits (0-16)
Definition EspTypes_SPI.h:215
hf_spi_mode_t mode
SPI mode (0-3)
Definition EspTypes_SPI.h:212
hf_spi_sampling_point_t sampling_point
Sampling point for data (ESP32C6 specific)
Definition EspTypes_SPI.h:227
hf_spi_device_config_t() noexcept
Definition EspTypes_SPI.h:229
hf_u8_t dummy_bits
Dummy bits between address and data.
Definition EspTypes_SPI.h:217
hf_spi_clock_source_t clock_source
Clock source selection (0=default, ESP32C6 specific)
Definition EspTypes_SPI.h:226
void(* post_cb)(void *)
Post-transfer callback (optional)
Definition EspTypes_SPI.h:224
hf_pin_num_t cs_pin
CS pin (or -1 for software CS)
Definition EspTypes_SPI.h:213
hf_u8_t address_bits
Address phase bits (0-64)
Definition EspTypes_SPI.h:216
void * user_ctx
User context for callbacks.
Definition EspTypes_SPI.h:225
hf_u32_t clock_speed_hz
Device clock speed (Hz)
Definition EspTypes_SPI.h:211