外部flash与spi外设冲突

Omega_fish
Posts: 3
Joined: Wed Jul 22, 2020 3:07 am

外部flash与spi外设冲突

Postby Omega_fish » Sat Aug 01, 2020 9:53 am

硬件: ESP32 ,W25Q128 SPI显示器
库: IDF4.0.1
使用hspi挂载了外部16MB的W25Q128,并同时挂载了SPI的显示器,使用两不同IO口进行分时复用。
问题描述:分时复用spi时,给显示器发送数据后,可能导致FLASH出现问题或者FATFS文件丢失
初始化函数如下
flash 使用idf官方挂载FATFS例程
1.png
1.png (70.15 KiB) Viewed 916 times
单独挂载均正常,两者分时复用时时不时会出现问题
猜测可能CS口出现异常,使用逻辑分析仪查看(SPI速度均限制在10M)
2.png
2.png (24.63 KiB) Viewed 916 times
发现在给SPI显示发数据时,FLASH的CS引脚被拉低。(CS2为显示器的CS脚,enable为FLASH的CS脚,MOSI与MISO标记反了,不影响)
3.png
3.png (20.28 KiB) Viewed 916 times
是否有方法让可以解决?或者使用软件进行CS脚的选择的呢?

xiaoxufeng
Posts: 24
Joined: Mon Aug 28, 2017 10:25 am

Re: 外部flash与spi外设冲突

Postby xiaoxufeng » Tue Aug 18, 2020 9:35 am

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

Who is online

Users browsing this forum: Google [Bot] and 4 guests