1 // Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #pragma once 16 17 #include <stdint.h> 18 #include "esp_attr.h" 19 #include "esp_bit_defs.h" 20 #include "soc/soc_caps.h" 21 #include "sdkconfig.h" 22 23 /** 24 * @brief Enum with the three SPI peripherals that are software-accessible in it 25 */ 26 typedef enum { 27 //SPI1 can be used as GPSPI only on ESP32 28 SPI1_HOST=0, ///< SPI1 29 SPI2_HOST=1, ///< SPI2 30 SPI3_HOST=2, ///< SPI3 31 } spi_host_device_t; 32 33 /// SPI Events 34 typedef enum { 35 /* Slave HD Only */ 36 SPI_EV_BUF_TX = BIT(0), ///< The buffer has sent data to master. 37 SPI_EV_BUF_RX = BIT(1), ///< The buffer has received data from master. 38 SPI_EV_SEND_DMA_READY = BIT(2), ///< Slave has loaded its TX data buffer to the hardware (DMA). 39 SPI_EV_SEND = BIT(3), ///< Master has received certain number of the data, the number is determined by Master. 40 SPI_EV_RECV_DMA_READY = BIT(4), ///< Slave has loaded its RX data buffer to the hardware (DMA). 41 SPI_EV_RECV = BIT(5), ///< Slave has received certain number of data from master, the number is determined by Master. 42 SPI_EV_CMD9 = BIT(6), ///< Received CMD9 from master. 43 SPI_EV_CMDA = BIT(7), ///< Received CMDA from master. 44 /* Common Event */ 45 SPI_EV_TRANS = BIT(8), ///< A transaction has done 46 } spi_event_t; 47 FLAG_ATTR(spi_event_t) 48 49 /** 50 * @brief Line mode of SPI transaction phases: CMD, ADDR, DOUT/DIN. 51 */ 52 typedef struct { 53 uint8_t cmd_lines; ///< The line width of command phase, e.g. 2-line-cmd-phase. 54 uint8_t addr_lines; ///< The line width of address phase, e.g. 1-line-addr-phase. 55 uint8_t data_lines; ///< The line width of data phase, e.g. 4-line-data-phase. 56 } spi_line_mode_t; 57 58 59 /** @cond */ //Doxy command to hide preprocessor definitions from docs */ 60 61 //alias for different chips, deprecated for the chips after esp32s2 62 #ifdef CONFIG_IDF_TARGET_ESP32 63 #define SPI_HOST SPI1_HOST 64 #define HSPI_HOST SPI2_HOST 65 #define VSPI_HOST SPI3_HOST 66 #elif CONFIG_IDF_TARGET_ESP32S2 67 // SPI_HOST (SPI1_HOST) is not supported by the SPI Master and SPI Slave driver on ESP32-S2 and later 68 #define SPI_HOST SPI1_HOST 69 #define FSPI_HOST SPI2_HOST 70 #define HSPI_HOST SPI3_HOST 71 #endif 72 73 /** @endcond */ 74