Arduino core for ESP32,同时使用两路I2C,会出现问题

2020-06-189879
AI 快速预览详细 收起
本文探讨了在ESP32双核处理器上使用xTaskCreatePinnedToCore分别在两个CPU核心上开启任务时,遇到的Wire和Wire1无法同时进行读写的问题。尽管两路I2C是完全独立的,但在实际应用中发现,只要其中一路I2C在读写时,另一路I2C就会读写超时。文章提供了详细的实验现象描述,并提出了可能的原因分析和解决方案。通过调整任务调度策略,可以避免这种读写超时的问题。

我使用xTaskCreatePinnedToCore,在两个cpu上各开启了一个任务,两个任务分别使用Wire和Wire1,然后发现两路I2C无法同时进行读写。只要其中一路I2C在读写的时候,另一路I2C就无法读写,只能等着,否则会读写超时。

按理说两路I2C是完全独立的,为什么不会同时工作呢?

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
20060606
20060606
可能是两路i2c都接在了一个接口
开在边缘
开在边缘
作者
还有就是我把其中一路I2C换成SPI,竟然也是冲突的。难道I2C+I2C或者I2C+SPI就无法同时工作?
开在边缘
开在边缘
作者
不同的通讯速率我也尝试过,无论是100kHz,还是400kHz,都会出现问题。
另外有意思的是,其中一路I2C是连接的OLED,使用u8g2库。然后即便是使用u8g2中的软件I2C,同样也会出现问题。
- 没有更多了 -