ESP32 硬件开发指北 ----外接FLASH权威指北

硬件环境:

  • ESP32-D0WD
  • ESP32-D0WD-V3
  • P25Q32H-UXH-IR USON8封装

软件环境:

  • ESP-IDF V4.3 VScode插件版本

一、选型

ESP32选型:

  ESP32External FlashExternal SRAM 作为片外存储器。图1 列出了两个 CPU 的数据总线指令总线中 的各段地址通过 Cache 与 MMU 所能访问的片外存储器。两个 CPU 通过 Cache 与 MMU 对片外存储器进行访 问时,Cache 将根据 MMU 中的设置把 CPU 的地址变换为 External FlashExternal SRAM 的实地址。经过变换之后的实地址最大支持 16 MBExternal Flash8 MBExternal SRAM

图1.ESP32 FLASH分布

片外存储器 -额外的补充:

  片外存储器 对片外闪存和片外 SPI RAM 的访问通过 Cache 实现,并且由 MMU 管理。根据进程的 PID 以及运行该进程的 CPU,Cache MMU 可以实现不同的映射,做法类似于片上存储器 MMU。即,对于存储器的每个虚地址页,都 有对应寄存器详细说明该虚地址页应映射到哪一个实地址页。但管理片上存储器的 MMU 和 Cache MMU 之间 存在差异。首先,Cache MMU 具有固定的页面大小片外闪存页大小为 64 KB,片外 RAM 页大小为 32 KB); 其次,Cache MMU 具有用于每个 PID 和处理器内核的显式映射表,不通过 MMU 配置项来控制访问权限。在下 文中,MMU 映射配置寄存器将被统称为“配置项”。这些寄存器只能由 PID 为 0 或 1 的进程访问;PID 为 2 到 7 的进程必须通过 PID 为 0 或 1 的进程来改变它们的 MMU 设置。 如上所述,MMU 配置项用于将对存储器虚地址页的访问映射到对存储器实地址页的访问。MMU 控制虚地址空间的五个区域,详见图2。地址范围 V Addr1 到 V Addr4 用于访问片外闪存,V AddrRAM 用于访问片外 RAM。注意 V Addr4 是 V Addr0 的子集。

图2.ESP32 FLASH映射

  总的来说ESP32选择时如果需要2MB以上的FLASH大小,我建议的是选择ESP32-D0WDV3/D0WD的型号主要是封装小的前提下还能保持双核的性能。

FLASH选型:

FLASH选择时我们往往注意这几个问题就可以了。

  • 工作电压
  • 容量
  • 工作模式
  • 封装体积

工作电压:

W25Q系列为例子:

如果能直接找到其 DATASHEET 可以在封面上看到:

图3.FLASH DATASHEET

  红色框住的就是工作电压1.8V,蓝色就是其大小32M-bit约等于4MB的flash,绿色框的就是其工作模式支持双线、四线模式也就是QIO\DIO模式。

这里要提醒的是:ESP32支持3.3V或者1.8V的FLASH当使用1.8V的FLASH的时候应通过设置Strapping的电平来改变LDO的输出值。

图4.内置LDO 电压

如果你找不到他的FLASH手册,可以参考一下其型号代码来进行更具体的识别。

当然了这里还是以Winbond为例子:

图5.Winbond编号

这里再给一个我常用的FLASH的厂商型号代码:

图6.PUYA编号

可以看到的是每一家厂商编码代表意思都是差不多的主要差别就在于封装上,这一点多注意就好了。

容量:

  在ESP32的开发过程中我们很少的选择很大的FLASH,类似于4MB以上都已经很大了,随着容量的增大FLASH的封装体积、价格也逐渐增大

这一部分需要注意的是有些单位是 M-bit ,但是我们常用的时M-byte 对应的就是8倍 的关系这一点尤其需要注意。

工作模式:

Flash 常用的工作模式有 4 种:DOUT/DIO/QOUT/QIO

  • DOUT:地址为 1 线模式输入,数据为 2 线模式输出
  • DIO:地址为 2 线模式输入,数据为 2 线模式输出
  • QOUT:地址为 1 线模式输入,数据为 4 线模式输出
  • QIO:地址为 4 线模式输入,数据为 4 线模式输出

用户如果需要使用 QIO 模式,则需要在选择 Flash 时确认该 Flash 是否支持 QIO 模式。

这里需要注意的是,QIO模式在40mhz工作的时候相当于两倍的DIO模式等价速度相当于普通SPI的4倍就是160MHZ.

封装体积:

对于一些特殊场景下的flash使用体积显得尤为重要,这里实际给大家举两个例子:

P25Q32H-UXH-IRW25Q32JVSSIQ

图7.不同封装比较图

  可以看到不同的FLASH 大小相同封装的方式有很大的差别,当然小的封装也是牺牲了烧写速度等来实现较小封装的,对于但是对于读取有很大要求的FLASH来说这些牺牲也是值得的。

二、Layout注意事项:

  说来惭愧,自己在第一次画的时候竟然画错了,疯狂报错找不到FLASH,原因是这样的:

ESP32对PAD的名命有些直接用用途来命名例如:

图8.FLASH 引脚

  这里的6个PAD就是其外置FLASH的连接引脚,我们知道QSPI下有四个数据脚分别对应SD_DATA_0 到SD_DATA_3

  问题就出在这里:SD_DATA的名命方式其实是遵循SDIO协议的,并不是QSPI的对应引脚,最开始我直接就按编号顺序连接了,其中各个引脚对应的如图9所示,效果就是图10这样:

图9.FLASH 引脚对应表

就是将SIO0——SD_DATA0,SIO1——SD_DATA1,这样一 一对应连接起来。

图10.FLASH 错误连接

焊接上去烧录就会报错:

图11.A fatal error occurred: Timed out waiting for packet content

Timed out waiting for packet content,后来我将FLASH拆下来,发现还报这个错误确定就是FLASH没有被检测到。

  仔细阅读了ESP32的Datasheet后发现其实链接并不是按号码顺序的,我才想起来这可能是针对SDIO的标号,这里实在无法理解为什么这样设计引脚标号:


图12.正确连接顺序

  但是我已经打板子了。。。这怎么办呢?四处查找找到了解决方案。

  原文地址:ESP32-D0WD FLASH PROBLEM,在这里我找到了可以通过烧写efues来REMAP这些引脚,如果你和我一样,按顺序连接了FLASH的引脚,你可以通过这样来改变

espefuse.py --port COMx burn_efuse SPI_PAD_CONFIG_CLK 6
espefuse.py --port COMx burn_efuse SPI_PAD_CONFIG_Q 8
espefuse.py --port COMx burn_efuse SPI_PAD_CONFIG_D 7
espefuse.py --port COMx burn_efuse SPI_PAD_CONFIG_HD 10
espefuse.py --port COMx burn_efuse SPI_PAD_CONFIG_CS0 11

  这样就实现了交换引脚,正常完成下载。

  你以为这样就完成了吗?当然不是,下载完成后我想开启QIO模式怎么办?

三、ESP32到底如何开启QIO模式:

首先!你要确认你的连接正确且FLASH支持QIO模式,打开IDF的设置。

图13.FLASH 模式

  将红框部分改为QIO模式,频率依照你的FLASH参数来改变,我这里选择了40MHZ。下边就是大小也是依照你的FLASH参数来改。

修改完后编译,如果没有报错那好恭喜你已经成功开启QIOmode,如果有报错别急继续往下看:

图14.QIO模式开启失败

  qio_mode: Failed to set QIE bit, not enabling QIO mode,如果你的报错是这个,就说明你的ESP32光放并没有对你所选用的FLASH进行支持,当然你可以自己添加支持,具体如何添加可以参考这个:只看添加驱动部分

  我在这里简单说一说如何添加,打开你FLASH的手册找两个寄存器的位置:

  这里说明你的FLASH生产商ID和设备ID,就是图中的

Manufacturer ID:0X85

FLASH ID:0X6016

找到后写入对应位置


Status Register:

图15.Status Register

  需要看的就是QE位是第几位,结合引用文章写入对应位置。

  值得注意的是,许多厂商会存在双八位寄存器,或者单16位的情况,如果调用正确的函数将无法读取到正确的QE位信息,导致无法使用,如何识别自己厂商是什么情况的呢?就需要去看其对应的命令表:

图15.命令表

  可以看到虽然Status Register一共有16位但是是分开访问的,所以我这里使用的是 read_status_8b_rdsr2,值得注意的是虽然他在途中是S9这也代表着他是下一个寄存器的第2位。

还有你修改后重新编译一下,你以为就好了吗?当然不是此时你会发现你的ESP32虽然开启了QSPI模式但是还会报错:

图16.QIO模式报错

  竟然找不到分区表了。。。当然这个问题只会存在于被强制修改过QSPI引脚的ESP32,正常连接顺序是不会报错的。那这样怎么办呢?

  其实在上边的时候你就能发现少REMAP了一个脚 ——>WP。

  它并不是在efues里面更改的而是在配置里面设定的,如下图所示。

图17.WP引脚修改

按照更改后再次编译烧写,就可以成功。

  这个教程我会持续更新,做到最强FLASH指南。

ESP32 硬件开发指北 -- 外接FLASH使用指北相关推荐

  1. 如何给 ESP32 选择外接 Flash 以及如何使能 QIO 模式

    [前言] 许多用户在使用 ESP32 做开发的时候,都会碰到如何选择外接 Flash 的难题,因为不同厂商的 Flash 存在很多差异,Flash 支持的工作模式也不同. [如何给 ESP32 选择外 ...

  2. ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建

      之前的一篇博客 Windows上基于ESP-IDF搭建ESP32开发环境 发布后,深受好评.几个月过去了,乐鑫的esp-idf-tools安装工具发生了较大的变化,VsCode插件的功能也愈加完善 ...

  3. ESP32 Ubuntu开发环境搭建

    在Ubuntu下搭建ESP32开发环境 文章目录 在Ubuntu下搭建ESP32开发环境 说明 开发环境 硬件准备 ESP32(NodeMCU-32S) NodeMCU-32S 引脚图 搭建步骤 安装 ...

  4. 智能手机之硬件开发知识篇一

    硬件开发知识: 手机软件层次: 手机软件技术也可按技术含量高低分为三层:技术含量低的是人机界面软件,稍高一些的是接口软件和模块软件,最高的是基础通信软件. 第一次层次是OperatingSystem( ...

  5. 单片机进阶---HLK-W801硬件开发之焊接电路

    前文介绍 <单片机进阶-HLK-W801硬件开发之制作PCB> <单片机进阶-HLK-W801硬件开发之优化PCB> 第一次接触到手焊贴片,也算是刚入门,侥幸成功之下,给大家传 ...

  6. 2023 4月份 华为硬件开发岗位实习生机考回忆

    2023 4月份 华为硬件开发岗位实习生机考回忆 Proscribe !本帖只用作学习之意,若违反任何要求或侵权将立马删除,其中答案也可能错误,实际的工程应用和理论也有所区别,仅收录部分题目和答案等, ...

  7. JAVA硬件开发板_用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? 这些都是怎么 ...

  8. 想做硬件开发的人员必看

    转眼间,已经毕业一年了,在这一年中经历了很多,工作已经换了两个了,住的地方好像已经换了两三个了,这中间不包括跨地区生活.  我刚大四的时候,应聘一家网络公司做硬件开发,03年的时刚过完年,我就千里 ...

  9. 在Win10的Linux子系统下搭建ESP32的开发环境

    在Win10的Linux子系统下搭建ESP32的开发环境 一.介绍 1.Windows的Linux子系统  win10进行了内置工作于命令行的Linux子系统功能,WIN10用户只需要开启Linux子 ...

  10. 乐鑫ESP32模组如何查看内部flash芯片支持的工作模式(QIO、QOUT、DIO、DOUT)?

    1,在终端输入命令: ​​​​​​​​​​​​​​esptool.py flash_id​​​​​​​ 2,查看上图输出信息中的红框部分:制造商ID.Device ID.Flash size信息. 3 ...

最新文章

  1. laravel CURD ORM
  2. Entity Framework 学习结束语
  3. 为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法...
  4. djangoORM语句
  5. MCtalk教育快报 | 0827
  6. 【C++鼠标键盘操作】自动下载CSDN博客文章到PDF
  7. c语言100位整数乘法,很大的数相乘怎么办?
  8. C#获取Windows下光标位置(转)
  9. python商品会员打折_Python微项目分享之双十一优惠计算器
  10. CREO图文教程:利用CREO软件实现模型零件设计实例大全(曲柱、矿泉水瓶、三弯管、风扇叶、一腔多模、螺旋弹簧、数字刻度、足球设计、齿轮参数化设计、油缸)等几十个案例之详细攻略
  11. PCI/PCIe转串口Linux驱动使用说明
  12. 服务器网页篡改,网站服务器网页防篡改系统
  13. [NN]前向神经网络的tf.keras详细实现教学
  14. 学3DMAX主要就业方向是什么?
  15. PowerPoint2007无法将Excel图表转换为图形对象
  16. 西瓜书课后11.1(Relief算法)
  17. Linux GRO流程分析
  18. 盟百照相馆影楼摄影工作室选片系统
  19. 昱灿推出单片机 YX133 YX150C 8脚 16脚 大量现货供应
  20. Fragment not attached to Activity 解决方案

热门文章

  1. 嵌入式和单片机有什么区别
  2. java程序猿面试问缺点怎么回答_当程序员面试被问“你的缺点是什么?”你该怎么回答?...
  3. vue微信内h5页面微信授权登录
  4. php呼叫平台,php – Twilio呼叫转发
  5. 计算机cpu结构实物图片,cpu内部结构显微图/cpu内部结构放大图
  6. 用计算机开方左右键,科学计算器开方怎么用(科学计算器开根号)
  7. Python车牌识别、车牌抓取源代码
  8. PS4 5.05安装Linux系统,PS4主机刷机教程以及游戏安装教程,到5.05 4.55 4.05等系统
  9. Android 宽高比控件
  10. centos7设置静态IP地址方法