一、目的
刚接触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这些知识点,请参考这篇博文(一定要看)
乐鑫官网的资料
三、实战
有了上面的知识点后,我们再来看下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)命令、地址、数据阶段(所有阶段)都使用四根数据线通信,并且一个时钟传输两位
好,本篇的内容基本结束,相信大家现在都能理解这些选项的含义了。