硬件: ESP32 ,W25Q128 SPI显示器
库: IDF4.0.1
使用hspi挂载了外部16MB的W25Q128,并同时挂载了SPI的显示器,使用两不同IO口进行分时复用。
问题描述:分时复用spi时,给显示器发送数据后,可能导致FLASH出现问题或者FATFS文件丢失
初始化函数如下
flash 使用idf官方挂载FATFS例程
单独挂载均正常,两者分时复用时时不时会出现问题
猜测可能CS口出现异常,使用逻辑分析仪查看(SPI速度均限制在10M)
发现在给SPI显示发数据时,FLASH的CS引脚被拉低。(CS2为显示器的CS脚,enable为FLASH的CS脚,MOSI与MISO标记反了,不影响)
是否有方法让可以解决?或者使用软件进行CS脚的选择的呢?
外部flash与spi外设冲突
-
- Posts: 37
- Joined: Mon Aug 28, 2017 10:25 am
Re: 外部flash与spi外设冲突
Hi Omega_fish,
我们在IDF 4.2引入了SPI总线锁(https://github.com/espressif/esp-idf/co ... c943d50e0f),用以仲裁多个SPI设备对总线的并发访问。在此之前,并没有很好的办法防止二者互相冲突。
如果你可以仅在一个task中使用,你可以试试LCD仅使用polling mode,以避免ISR对总线的随机访问。这样两个驱动同时只会有一个访问外设,应该可以避免冲突。*另外一种方式是使用互斥锁(Mutex)避免两个驱动同时访问总线*
同时注释掉这行代码(https://github.com/espressif/esp-idf/bl ... ter.c#L494),强制device配置每次传输刷新。印象中对SPI_Flash本身没有什么额外的要求。
同时我们建议你如果不是马上要量产,可以尝试一下我们的master分支/即将到来的release 4.2,获得更多的新功能。
Michael
我们在IDF 4.2引入了SPI总线锁(https://github.com/espressif/esp-idf/co ... c943d50e0f),用以仲裁多个SPI设备对总线的并发访问。在此之前,并没有很好的办法防止二者互相冲突。
如果你可以仅在一个task中使用,你可以试试LCD仅使用polling mode,以避免ISR对总线的随机访问。这样两个驱动同时只会有一个访问外设,应该可以避免冲突。*另外一种方式是使用互斥锁(Mutex)避免两个驱动同时访问总线*
同时注释掉这行代码(https://github.com/espressif/esp-idf/bl ... ter.c#L494),强制device配置每次传输刷新。印象中对SPI_Flash本身没有什么额外的要求。
同时我们建议你如果不是马上要量产,可以尝试一下我们的master分支/即将到来的release 4.2,获得更多的新功能。
Michael
Who is online
Users browsing this forum: Google [Bot] and 134 guests