在写之前突然下雨了,不自觉的就想起这个诗。 平时去淘宝买ESP32的开发板,20出头大概率是这个板子,那我们这篇就来完完整整的将芯片进行挖掘,解决我们的引脚配置,硬件设置等等相关的问题,以后不再纠缠相关的问题. 板子的外部是这样 背部是这样 Chip is ESP32D0WDQ6 (revision (unknown 0xa)) Features: WiFi, BT, Dual Core, VRef calibration in efuse Uploading stub... Running stub... Stub running... Changing baud rate to 921600 Changed. Configuring flash size... Auto-detected Flash size: 4MB 使用Arduino烧录时,出现真实的芯片信息 以及由一个4MB的flash https://www.mouser.cn/ProductDetail/Espressif-Systems/ESP32-D0WDQ6?qs=chTDxNqvsykWgzfXx0gR%252bQ%3D%3D 在网站上面找到的装配图 https://www.mouser.com/PCN/Espressif_Systems_PCN_02_20180515_ESP32_Datasheet_Update.pdf 芯片前期可以直接看这个技术规格书,画红线的就是 内部的系统框图 值得一提的是,有ULP的处理器 画框的就是我们的芯片的参数 最后这里也是同理 内部芯片的引脚图 这些资源是最宝贵的,再贴一下 具体芯片就告一段落,我们接下来看模组: esp-wroom-32 就是我图中画的这个,这个是将芯片启动必要的原件封装在一起 接下来看的资料是这个 可以看到WIFI+蓝牙+BLE,然后芯片类型也对的上 一些外设的性能 这个是我们全盘文章关注的要点,因为嵌入式开发的第一关就是找对引脚 一共38个引脚,上图是管脚定义 注意这句话,连SPI芯片了 更多的细节要去这里找到答案
先放一个SPI的flash芯片的原理图 然后一个具体的原理图也有,有需要的自己看文档 这个很贴心啊,就是芯片引脚和真实的引出脚之间的映射关系 模组的外围原理图 模组尺寸 接下来的这些话里面全是要考的,全记住 记住这些参数,后面我要深入研究 这个是片上的存储器 片外就是要通过外界的IO相连 最大支持到16MB,而且片上的存储器可以做片外的缓存,加快速度 这个是地址图,完全是对称的 地址的映射结构 emmmm,我不认识 指令总线 数据和指令公用 地址 0x4000_0000 以下的部分属于数据总线的地址范围,地址 0x4000_0000 ~ 0x4FFF_FFFF 部分为指令总线 的地址范围,地址 0x5000_0000 及以上的部分是数据总线与指令总线共用的地址范围。 CPU 的数据总线与指令总线都为小端序。即字节地址 0x0、0x1、0x2、0x3 访问的字节分别是 0x0 访问的 32-bit 字中的最低、次低、次高、最高字节。 CPU 可以通过数据总线按照字节、半字、字进行对齐与非对齐的 数据访问。CPU 可以通过指令总线进行数据访问,但必须是字对齐方式;非对齐数据访问会导致 CPU 工作异 常。 地址映射 具有DMA的模块 两个CPU,各有32KB的缓存来访问外部存储器 在读写外设的时候有速度的差异 怎么解决,可以看这个文档 可以看到解决办法,清晰明了 中断矩阵的结构图 ESP32 总共有 71 个外部中断源。ESP32 中的 71 个外部中断源中有 67 个可以 分配给两个 CPU。 其余的 4 个外部中断源只能分配给特定的 CPU,每个 CPU 2 个。GPIO_INTERRUPT_PRO 和 GPIO_INTERRUPT_PRO_NMI 只可以分配给 PRO_CPU。 GPIO_INTERRUPT_APP 和 GPIO_INTERRUPT_APP_NMI 只可以分配给 APP_CPU。 因此,PRO_CPU 与 APP_CPU 各可以分配到 69 个外 部中断源。 两个 CPU(PRO_CPU 和 APP_CPU)各有 32 个中断。 其中 26 个为外部中断。以上列出了每个 CPU 所有的 中断。 系统提供三种级别的复位 系统时钟 有三种时钟源 IO,RTC-IO,GPIO交换矩阵结构框图 IO Pad供电,上面的引脚映射实在看不懂了 具体说明颜色在这里
如果外部不供电,则内部线性稳压器会给 VDD_SDIO 供电。VDD_SDIO 电压可以为 1.8V 或与 VDD3P3_RTC 一 致,这取决于 MTDI pad 在复位时的状态——高电平时为 1.8V,低电平时为与 VDD3P3_RTC 一致。 eFuse bit 置上后可强制决定 VDD_SDIO 的默认电压。此外,软件启动后软件还可以配置寄存器来强制改变 VDD_SDIO 的 电压。 天天DMA,DMA,到底是个啥嘛。 直接存储访问 (Direct Memory Access, DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据,从而提高了 CPU 的效率。 ESP32 中有 13 个外设都具有 DMA 功能,这 13 个外设是:UART0、UART1、UART2、SPI1、SPI2、SPI3、 I2S0、I2S1、SDIO slave、SD/MMC host、EMAC、BT 和 Wi-Fi。 就是外设需要数据交换的时候,不经过中间人CPU的手 DMA的引擎构架 DMA 引擎通过 AHB_BUS 将数据存入内部 RAM 或者将数据从 RAM 取出。其 中 RAM 为 ESP32 的内部 SRAM,软件可以通过挂载链表的方式来使用 DMA 引擎。DMA_ENGING 根据 out_link 中的内容将相应 RAM 中的数据发送出去,也可根据 in_link 中的内容将接收的数据存入指定 RAM 地址空间。 链表结构图 out_link和in_link的结构式一样的。一个链表式由三个字构成 三个字段的意义是 用 DMA 接收数据时, 如果一帧数据长度小于给定的 buffer 长度,那么 DMA 不会接着使用这个 buffer 剩余空间。 这使得 DMA_ENGING 可以用于传输任意字节数的数据。 UDMA SPI DMA 最后是I2S DMA 使用时的流程 关于SPI的内容就写这点,后面再写详细的 这个图是4线制的双工,半双工连接 并行QSPI的接口 并行QSPI的通信模式 ESP32 SPI 中断分为两类,一类为 SPI 接口中断,另一类为 SPI DMA 接口中断。 ESP32 SPI 将发送和/或接收两种操作结束时的中断统一成一个,即认为同是控制器一次操作的结束,而不加以区分。ESP32 SPI 作为从机时,根据操作的不同,从机会产生读/写状态寄存器和读/写缓存数据中断。 我中间跳了两个外设,因为用的少。之后如果要用再研究 说下MAC的接口,就是芯片可以接一个网线 官方的文档有很多的特性说明,我对这块不熟悉 就截取一点,你看接口和速度 这是它的功能框图,剩下的内容看了看又是知识盲区
I2C 是一个两线总线,由 SDA 线和 SCL 线构成。这些线设置为漏极开漏输出。因此,I2C 总线上可以挂载多个外设,通常是和一个或多个主机以及一个或多个从机。主机通过总线访问从机。主机发出开始信号,则通讯开始:在 SCL 为高电平时拉低 SDA 线,主机将通过 SCL 线发出 9 个时钟脉冲。 前 8 个脉冲用于按位传输,该字节包括 7-bit 地址和 1 个读写位。如果从机地址与该 7-bit 地址一致,那么从机可 以通过在第 9 个脉冲上拉低 SDA 线来应答。接下来,根据读/写标志位,主机和从机可以发送/接收更多的数据。 根据应答位的逻辑电平决定是否停止发送数据。在数据传输中,SDA 线仅在 SCL 线为低电平时才发生变化。当 主机完成通讯,回发送一个停止标志:在 SCL 为高电平时,拉高 SDA 线。ESP32 I2C 控制器可以处理 I2C 协议,腾出处理器核用于其它任务。 主机架构 从机架构 I2C 控制器可以工作于 Master 模式或者 Slave 模式, I2C_MS_MODE 寄存器用于模式选择。 总线时序图 可以的控制单元: · RAM:大小为 32 x 8 bit,直接映射到 CPU 内核的地址上,首地址为 (REG_I2C_BASE+0x100),I2C 数据 的每一个字节占据一个 word 的存储地址(因此,首字节在 +0x100, 第二字节在 +0x104, 第三字节在 +0x108,以此类推)。用户需要置位 I2C_NONFIFO_EN 寄存器。 · 16 个命令寄存器 (cmd0 ~ cmd15) 以及一个 CMD_Controller:用于 I2C Master 控制数据传输过程。I2C 控制器每次执行一个命令。 · SCL_FSM:用于控制 SCL 时钟,I2C_SCL_HIGH_PERIOD_REG 以及 I2C_SCL_LOW_PERIOD_REG 寄存 器用于配置 SCL 的频率和占空比。 · SDA_FSM:用于控制 SDA 数据线。 · DATA_Shifter:用于将字节数据转化成比特流或者将比特流转化成字节数据。I2C_RX_LSB_FIRST 和I2C_TX_LSB_FIRST 用于配置最高有效位或最低有效位的优先储存或传输。 · SCL_Filter 以及 SDA_Filter:用于 I2C_Slave 滤除输入噪声。通过配置 I2C_SCL_FILTER_EN 以及 I2C_SDA_FILTER_EN 寄存器可以开启或关闭滤波器。滤波器可以滤除脉宽低于I2C_SCL_FILTER_THRES 以及 I2C_SDA_FILTER_THRES 的毛刺。 串口架构图 特性 UART 是一种以字符为导向的通用数据链,可以实现设备间的通信。异步传输的意思是不需要在发送数据上添 加时钟信息。这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同,通信才能成功。 一个典型的 UART 帧开始于一个起始位,紧接着是有效数据,然后是奇偶校验位(可有可无),最后是停止位。ESP32 上的 UART 控制器支持多种字符长度和停止位。另外,控制器还支持软硬件流控和 DMA,可以实现无缝高速的数据传输。 我们这里就是简单的介绍一下
架构图 我在想16个通道,就是16个引脚吗? 高速通道框图 分频器 常用的频率和精度 相关中断 外设还有很多,但是我不想逐条看了。挑感兴趣的看看 ESP32支持电容传感器和霍尔传感器 丰富的特性,看的我就想做炸弹 一共10个管脚支持 内部结构 什么原理: 触摸管脚的电容会进行周期性充放电。” 触摸管脚的内部电压” 代表充/放电电压在参考高值 (drefH) 与参考低值 (drefL) 之间的变化。在每次变化中,触摸传感器将生成一个输出脉冲 (OUT)。由于触摸管脚受到触碰(高电容) 与未受到触碰(低电容)时的电压变化速率不同,可以通过统计同一时间间隔内出现的输出脉冲数量,判断触摸管脚是否受到触碰。可以通过 TIE_OPT 设置开始充/放电的初始电压电平。 可视化的工作流程 FSM的内部结构,就是有限状态机的内部 霍尔传感器结构 根据霍尔效应,当电流垂直于磁场通过N 型半导体时,会在垂直于电流和磁场的方向产生附加电场,从而在半 导体两端形成电势差,具体高低与电磁场的强度和电流大小有关。
但是它自带得这个ADC,一言难尽 一些英文缩写,看寄存器表得时候有用 谈谈我对乐鑫的看法,首先就是夸赞,很了不起的公司,完美的找到了自己的市场,其次就是40nm这个制程,美国还真的不打压。 乐鑫的资料可能不是最完美的,但它一定是修bug最勤劳的,而且最最最好的一点就是它的开源做法,几乎开源了一切,除了敏感的协议栈。所以学习或者开发都很方便的找到参考资料。 在Github上面搜索ESP32,你可以看到它开源项目的丰富程度 问你哪家MCU场子能有这种盛况 官网这些资源一键直达,好像最近换前端了 做的美观了一些 包括给出的一些解决方案,都很有趣 特别是资料的丰富程度,几乎拥有一切 https://www.espressif.com/zh-hans/support/download/all?keys=&&&page=2 自家的IDF几乎不停的修bug加功能 10多块钱就可以拥有双核,WiFi+蓝牙+USB OTG加等等的外设。这个话听起来就想做梦一样,但是乐鑫做到的。而且几乎完美,也正是如此,俘获了国内外大量用户的♥。当然它可能也没有那么完美,可能它的ADC精度不高,IO少等等。。。但是它在变好,它在路上。而且有点不务正业,在8266的身上它从来都不是一个主机,而是通过AT固件使用串口与传统单片机相连扩展起通信能力。只不过后面被“玩”坏了。 特别是Arduino开发模式的加入,降低了开发的门槛。大批的老师,学生,爱好者蜂拥而来。 国内领先的K12编程平台,里面的硬件实体就有很多的ESP32开发板
本身我是大疆的粉丝,就说一下我知道的ESP芯片的用处。 大疆其实是个对技术方案的使用很随心所欲的公式 这个TT是大疆首次拥抱开源推出的无人机,外置的大脑就是ESP32的一款单核芯片,至于更多的内容,看我以前的文章Dji TT无人机扩展件ESP32芯片(D2WDQ5) https://www.dji.com/cn/robomaster-tt/downloads https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/RM-TT/RoboMaster%20TT%20Arduino%20IDE%20%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.pdf 直到今日我都惊叹于这个设计的精妙之处 通过这样的方式扩展了无人机的能力 众所周知我有一个云台相机,一代的无线传输能力就是一个无线底座实现的 大疆Dji pocket 一代研究(Dji Mimo),可以看我写的文章 长这样 底座,当时我看出来是ESP32的应用都惊呆了!还可以这样? 没错,就是这么骚,大疆的无线方案而已~ 我感觉就是应用举例里面的视频流传输吧
|
|