Skip to content

Commit

Permalink
Use shared SPI bus for CMT and W5500
Browse files Browse the repository at this point in the history
  • Loading branch information
LennartF22 committed Sep 24, 2024
1 parent 5457db2 commit 36da830
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 47 deletions.
34 changes: 13 additions & 21 deletions lib/CMT2300a/cmt_spi3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,11 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin
{
paramLock = xSemaphoreCreateMutex();

spi_host_device_t host_device;
if (!SpiManagerInst.claim_bus(host_device))
ESP_ERROR_CHECK(ESP_FAIL);

spi_bus_config_t buscfg = {
.mosi_io_num = pin_sdio,
.miso_io_num = -1, // single wire MOSI/MISO
.sclk_io_num = pin_clk,
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.data4_io_num = -1,
.data5_io_num = -1,
.data6_io_num = -1,
.data7_io_num = -1,
.max_transfer_sz = 32,
.flags = 0,
.intr_flags = 0,
};
ESP_ERROR_CHECK(spi_bus_initialize(host_device, &buscfg, SPI_DMA_DISABLED));
auto bus_config = std::make_shared<SpiBusConfig>(
static_cast<gpio_num_t>(pin_sdio),
GPIO_NUM_NC,
static_cast<gpio_num_t>(pin_clk)
);

spi_device_interface_config_t devcfg = {
.command_bits = 1,
Expand All @@ -51,7 +37,10 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin
.pre_cb = nullptr,
.post_cb = nullptr,
};
ESP_ERROR_CHECK(spi_bus_add_device(host_device, &devcfg, &spi_reg));

spi_reg = SpiManagerInst.alloc_device("", bus_config, devcfg);
if (!spi_reg)
ESP_ERROR_CHECK(ESP_FAIL);

// FiFo
spi_device_interface_config_t devcfg2 = {
Expand All @@ -70,7 +59,10 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin
.pre_cb = nullptr,
.post_cb = nullptr,
};
ESP_ERROR_CHECK(spi_bus_add_device(host_device, &devcfg2, &spi_fifo));

spi_fifo = SpiManagerInst.alloc_device("", bus_config, devcfg2);
if (!spi_fifo)
ESP_ERROR_CHECK(ESP_ERR_NOT_SUPPORTED);
}

void cmt_spi3_write(const uint8_t addr, const uint8_t data)
Expand Down
34 changes: 8 additions & 26 deletions src/W5500.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,41 +12,22 @@ W5500::W5500(int8_t pin_mosi, int8_t pin_miso, int8_t pin_sclk, int8_t pin_cs, i
eth_handle(nullptr),
eth_netif(nullptr)
{
spi_host_device_t host_device;
if (!SpiManagerInst.claim_bus(host_device))
ESP_ERROR_CHECK(ESP_FAIL);

gpio_reset_pin(static_cast<gpio_num_t>(pin_rst));
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 0);
gpio_set_direction(static_cast<gpio_num_t>(pin_rst), GPIO_MODE_OUTPUT);

gpio_reset_pin(static_cast<gpio_num_t>(pin_mosi));
gpio_reset_pin(static_cast<gpio_num_t>(pin_miso));
gpio_reset_pin(static_cast<gpio_num_t>(pin_sclk));
gpio_reset_pin(static_cast<gpio_num_t>(pin_cs));

gpio_reset_pin(static_cast<gpio_num_t>(pin_int));

esp_err_t err = gpio_install_isr_service(ARDUINO_ISR_FLAG);
if (err != ESP_ERR_INVALID_STATE) // don't raise an error when ISR service is already installed
ESP_ERROR_CHECK(err);

spi_bus_config_t bus_config {
.mosi_io_num = pin_mosi,
.miso_io_num = pin_miso,
.sclk_io_num = pin_sclk,
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.data4_io_num = -1,
.data5_io_num = -1,
.data6_io_num = -1,
.data7_io_num = -1,
.max_transfer_sz = 0, // uses default value internally
.flags = 0,
.intr_flags = 0,
};

ESP_ERROR_CHECK(spi_bus_initialize(host_device, &bus_config, SPI_DMA_CH_AUTO));
auto bus_config = std::make_shared<SpiBusConfig>(
static_cast<gpio_num_t>(pin_mosi),
static_cast<gpio_num_t>(pin_miso),
static_cast<gpio_num_t>(pin_sclk)
);

spi_device_interface_config_t device_config {
.command_bits = 16, // actually address phase
Expand All @@ -65,8 +46,9 @@ W5500::W5500(int8_t pin_mosi, int8_t pin_miso, int8_t pin_sclk, int8_t pin_cs, i
.post_cb = nullptr,
};

spi_device_handle_t spi;
ESP_ERROR_CHECK(spi_bus_add_device(host_device, &device_config, &spi));
spi_device_handle_t spi = SpiManagerInst.alloc_device("", bus_config, device_config);
if (!spi)
ESP_ERROR_CHECK(ESP_FAIL);

// Reset sequence
delayMicroseconds(500);
Expand Down

0 comments on commit 36da830

Please sign in to comment.