完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
做了hal层的接口调用spi功能,在esp32-c3上测试结果没有问题,但是到s3上读取的结果就错了
int HA_spi_read(spi_device_handle_t spi, uint8_t *data) { esp_err_t ret; spi_transaction_t t; uint8_t data1 = 0xFF; memset(&t, 0, sizeof(t)); t.length = sizeof(uint8_t) * 8; t.rxlength = sizeof(uint8_t) * 8; t.rx_buffer = &data1; ret = spi_device_polling_transmit(spi, &t); assert( ret == ESP_OK ); *data = data1; return 0; } void HA_Spi_Init(HA_SPI_CONFIG_T *spi_config, spi_device_handle_t *spi) { esp_err_t ret; spi_bus_config_t buscfg; spi_device_interface_config_t devcfg; buscfg.miso_io_num = spi_config->spi_miso; buscfg.mosi_io_num = spi_config->spi_mosi; buscfg.sclk_io_num = spi_config->spi_clk; buscfg.quadwp_io_num = -1; buscfg.quadhd_io_num = -1; buscfg.flags = SPICOMMON_BUSFLAG_MASTER; devcfg.command_bits = 0; devcfg.address_bits = 0; devcfg.dummy_bits = 0; devcfg.clock_speed_hz = 1000 * 1000; // Clock out at 10 MHz devcfg.input_delay_ns = 0; devcfg.duty_cycle_pos = 0; devcfg.mode = 0; // SPI mode 0 devcfg.spics_io_num = -1; // CS pin devcfg.queue_size = 6; //queue 7 transactions at a time ret = spi_bus_initialize(SPI2_HOST, &buscfg, 0); if (ret != ESP_OK){ ESP_LOGI(SPI_TAG, "bus initialize failed!n"); }else{ ESP_LOGI(SPI_TAG, "bus initialize successed!n"); } ret = spi_bus_add_device(SPI2_HOST, &devcfg, spi); if (ret != ESP_OK){ ESP_LOGI(SPI_TAG, "device config errorn"); }else{ ESP_LOGI(SPI_TAG, "device config successn"); } } 测了波形,发送的数据是对的,从机回的数据看波形是EF16也是对的,但是api返回的结果是F768 想可能是c3和s3的差异,查了sdkconfig,关于spi的设置也都是一样的,代码里配置的参数也都一样。 是spi_device_polling_transmit不适用s3吗,但是也找不到其他关于spi通信api的说明了,换了spi_device_transmit结果也是一样的 |
|
相关推荐
1个回答
|
|
从ESP32-C3移植到S3后,SPI读取结果错误可能是由以下几个原因导致的:
1. **硬件连接问题**:首先检查S3上的SPI硬件连接是否正确,包括数据线、时钟线、片选线等。确保连接没有问题。 2. **SPI配置问题**:在移植过程中,需要确保SPI的配置与ESP32-C3上的配置相同。这包括时钟频率、数据位宽、CPOL、CPHA等参数。请检查S3上的SPI配置是否与ESP32-C3上的配置一致。 3. **中断和DMA配置**:如果ESP32-C3上使用了中断或DMA来处理SPI通信,需要确保S3上也正确配置了中断和DMA。请检查S3上的中断和DMA设置是否正确。 4. **SPI驱动问题**:可能是S3上的SPI驱动存在问题。可以尝试更新或重新编译SPI驱动,以确保驱动与硬件兼容。 5. **代码移植问题**:在移植代码时,可能存在一些细节问题导致SPI读取结果错误。请仔细检查代码,确保所有与SPI相关的函数和变量都已正确移植。 6. **调试和日志**:在S3上运行时,可以使用调试工具和日志输出来检查SPI通信过程中的问题。这有助于定位问题所在。 针对您提供的代码片段,我有一些建议: - 确保`spi_device_handle_t spi`是正确初始化和配置的SPI设备句柄。 - 在`spi_transaction_t t`结构体中,`rx_buffer`应指向要接收数据的缓冲区,而不是`data1`。请将`t.rx_buffer = &data1;`更改为`t.rx_buffer = data;`。 - 确保`spi_device_polling`函数调用正确,并且传入的参数无误。 最后,建议您在S3上进行详细的调试,以便找到导致SPI读取结果错误的根本原因。 |
|
|
|
只有小组成员才能发言,加入小组>>
1149 浏览 1 评论
582浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
465浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 00:53 , Processed in 1.487083 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号