【发布时间】:2022-10-07 20:01:59
【问题描述】:
我正在尝试将 ESP32 上的 DIO SPI 模式与 espidf(4.4 版)一起使用。 但是我遇到了问题。
我有一个 ram 设备(参考 23LC1024),可以通过多种模式(单、双、四)访问。
单一模式完美运行(可以写和回读)
双模式会产生问题。
这是我配置 SPI 总线的方式(单模式或双模式的设置相同)
memset(&config, 0, sizeof(spi_bus_config_t));
config.mosi_io_num = MOSI_PIN;
config.miso_io_num = MISO_PIN;
config.sclk_io_num = SCLK_PIN;
config.quadwp_io_num = -1; // -1 not used
config.quadhd_io_num = -1; // -1 not used
config.flags = SPICOMMON_BUSFLAG_DUAL | SPICOMMON_BUSFLAG_MASTER;
spi_bus_initialize(VSPI_HOST, &config, SPI_DMA_DISABLED); // 0 DMA not used
现在设备的设置(单模或双模的设置相同):
spi_device_interface_config_t devcfg = {
.clock_speed_hz = freq,
.command_bits = 8,
.address_bits = 24,
.dummy_bits = 8,
.mode = 0, // SPI MODE 0
.flags = 0,
.spics_io_num = _cs,
.queue_size = 1,
.pre_cb = NULL,
.post_cb = NULL};
ESP_ERROR_CHECK(spi_bus_add_device(VSPI_HOST, &devcfg, &data_Ram));
现在交易的设置:
spi_transaction_t t;
memset(&t, 0, sizeof(t)); // Zero out the transaction
t.cmd = WRITE;
t.tx_buffer = data;
t.rx_buffer = NULL;
t.addr = address;
t.length = size * 8;
if (USE_DIO) // configure these flags in case of DIO
t.flags = SPI_TRANS_MODE_DIO | SPI_TRANS_MULTILINE_ADDR | SPI_TRANS_MULTILINE_CMD;
ESP_ERROR_CHECK(spi_device_transmit(data_Ram, &t)); // Transmit!
它在单模式下运行良好,但在双模式下我得到了错误:
E (1618) spi_master: check_trans_valid(699): 设置为多线模式和半双工模式时不兼容
这是否意味着我不能在半双工模式下将 DIO 与 SPI 主库一起使用?
我的设置有什么我应该改变的吗? 我试图在 spi_device_interface_config_t 中指定 SPI_DEVICE_HALFDUPLEX 标志。没有帮助。
不幸的是,我在互联网上没有找到任何示例。
谢谢你的提醒!
【问题讨论】: