一、目的

        刚接触ESP32开发的同学如果不是使用Ubuntu进行烧写的话,可能在使用乐鑫的Flash烧写工具时可能会有这样的疑问

        Flash工具下载地址

        工具 | 乐鑫科技 (espressif.com.cn)https://www.espressif.com.cn/zh-hans/support/download/other-tools

        

        上图中的SPI Mode如何选择,到底什么意思呢?

        另外在Ubuntu下开发时,我们执行下面两条命令时

idf.py set-target esp32
idf.py menuconfig

命令行界面会弹出一个菜单,如下

  

        注意上图中Flash SPI mode选项

        这边就是我们可以选择的mode配置项 

下面的截图的是ESP32S3芯片上的,增加了一个QPI选项

        其实要搞清楚这个,需要的基础知识还是蛮多的,本篇就给大家讲解一下里面涉及到的知识点。

        关于乐鑫Flash工具如何使用,官方工具包里面有对应的使用文档,后面我会结合具体的例子给大家讲解下。

        需要特别注意的是DoNotChgBin这个选项,因为我们编译固件时候已经通过menuconfig进行过Flash相关配置,故我们编译出来的固件里面已经有了设定的信息,所以稍写工具其实就不用再设置了。

        另外需要注意的是每个ESP32模组并不是都是同时支持这些SPI Mode的,有些可能是因为使用的Flash本身不支持,有些可能是Flash本身的WP/HOLD这些引脚并没有接到模组上,使用时一般建议DIO或者DOUT,如果明确知道模组的信息,就选择其最优的配置。

        当然并不是说QIO一定比DIO快,时钟频率的设置也是一个重要项。

二、介绍

        要理解DOUT/DIO/QOUT/QIO这些含义,首先需要了解SPI/Dual SPI/Quad SPI/QPI这些知识点,请参考这篇博文(一定要看

        理解SPI/Dual SPI/Quad SPI/QPI之间的区别_coder.mark的博客-CSDN博客https://blog.csdn.net/tianizimark/article/details/124608851

        乐鑫官网的资料

        SPI Flash Modes - ESP32 - — esptool.py latest documentation (espressif.com)https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/spi-flash-modes.html#spi-flash-modes 

三、实战

        有了上面的知识点后,我们再来看下esp-idf里面关于Flash SPI mode的配置项

        查看文件components/hal/include/hal/spi_flash_types.h

    SPI_FLASH_SLOWRD 标准SPI,对时钟速度有限制(速率较慢)
    SPI_FLASH_FASTRD 标准SPI
    SPI_FLASH_DOUT 双线SPI(Dual SPI)只在数据阶段使用两根数据线通信
    SPI_FLASH_DIO 双线SPI(Dual SPI)地址、数据阶段都使用两根数据线通信
    SPI_FLASH_QOUT 四线SPI(Qual SPI)只在数据阶段使用四根数据线通信
    SPI_FLASH_QIO 四线SPI(Qual SPI)地址、数据阶段使用四根数据线通信
    SPI_FLASH_OPI_STR 四线SPI(Qual SPI)命令、地址、数据阶段(所有阶段)都使用四根数据线通信,并且一个时钟传输一位
    SPI_FLASH_OPI_DTR 四线SPI(Qual SPI)命令、地址、数据阶段(所有阶段)都使用四根数据线通信,并且一个时钟传输两位

        好,本篇的内容基本结束,相信大家现在都能理解这些选项的含义了。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐