新星杯-ESP32智能硬件开发--ESP32系统

本博文内容导读📕🎉🔥

1、ESP32芯片和系统架构进行描述,给出ESP32系统的地址映射规则。

2、介绍ESP32复位及时钟定时具体功能,方便后续开发。

3、介绍基于ESP32开发板使用的底层操作系统,对ESP32应用程序开发过程中使用的API进行总结。

🔥🔥🔥 ESP32系统

ESP32芯片有QFN 5*5和QFN6*6两种封装类型,其中QFN6*6如图所示。引脚的名称及功能,包括模拟类、VDD3P3_RTC、VDD_SDIO和VDD3P3_CPU。其中,P代表电源,I/O分别代表输入/输出。

🔥🔥🔥ESP32系统架构

系统架构概述 所有的片上存储器、片外存储器以及外设都分布在两个CPU的数据总线/或指令总线上,除个别情况外,两个CPU的地址映射呈对称结构,即使用相同的地址访问同一目标。系统中多个外设能够通过DMA访问片上存储器。两个CPU的名称分别是"PRO_CPU"和"APP_CPU"。PRO代表协议,APP代表应用。在大多数情况下,两个CPU的功能是相同的。

7级流水线架构,支持高达240MHz的时钟频率(除ESP32-S0WD,ESP32-D2WD和ESP32-U4WDH为160MHz);16/24位指令集提供高代码密度;支持浮点单元;支持DSP指令,例如,32位乘法器、32位除法器和40位累加乘法器;支持来自约70个中断源的32个中断向量。

片上存储器功能

328KB DMA地址空间;448KB 片内ROM;520KB片内SRAM;8KB RTC快速存储;8KB RTC慢速存储。 片外存储器功能 片外SPI存储器可作为片外存储器被映射到可用的地址空间。部分片上存储器可用作片外存储器的Cache;最大支持16MB片外Flash;最大支持8MB片外SRAM;外设包括41个模块,DMA包括13个模块。

🔥🔥🔥地址映射

同构双核系统由两个哈佛结构Xtensa LX6 CPU构成,每个CPU都具有4GB(32位)的地址空间,两个CPU的地址映射是对称的。

CPU的数据总线与指令总线都为小端序。字节地址0x0、0x1、0x2、0x3访问的字节分别是0x0访问的32位字中的最低、次低、次高、最高字节。CPU可以通过数据总线按照字节、半字、字进行对齐与非对齐的数据访问。

CPU可以通过指令总线进行数据访问,但必须是字对齐方式;非对齐数据访问会导致CPU工作异常。 两个CPU都能够使用数据总线与指令总线直接访问片上存储器、Cache和MMU直接访问映射到地址空间的片外存储器、指令总线直接访问外设。当两个CPU访问同一目标时,其使用相同的地址,整个系统的地址映射呈对称结构。

🔥🔥1.片上存储器

片上存储器分为片上ROM、片上SRAM、RTC快速存储、RTC慢速存储四部分,其容量分别为448KB、520KB、8KB、8KB。其中,448KB片上ROM分为384KB片上ROM0、64KB片上ROM1两部分;520KB片上SRAM分为192KB片上SRAM0、128KB片上SRAM1、200KB片上SRAM2三部分。RTC快速存储与RTC慢速存储都是SRAM。

🔥🔥2.DMA模块

DMA功能模块有13个,包括:UART0 、UART1 、UART2、SPI1 、SPI2 、SPI3、I2S0、I2S1、SDIO Slave、SDMMC、EMAC、BT、WiFi。

🔥🔥3.片外存储器

ESP32将片外Flash与片外SRAM作为片外存储器。通过缓存与内存管理单元所能访问的片外存储器,缓存根据内存管理单元中的设置把CPU的地址变换为片外Flash与片外SRAM的实地址。经过变换之后的实地址最大支持16MB的片外Flash与8MB的片外SRAM。

🔥🔥4. 缓存

ESP32的2个CPU各有一组大小为32KB的缓存,用以访问外部存储器。PRO_CPU和APP_CPU分别使用DPORT_PRO_CACHE_CTRL_REG的PRO_CACHE_ENABLE位和DPORT_APP_CACHE_CTRL_REG的APP_CACHE_ENABLE 位使能缓存功能。

🔥🔥🔥ESP32复位及时钟定时

系统时钟 ESP32提供多种不同频率的时钟选择,可以灵活的配置CPU、外设及RTC的工作频率,以满足不同功耗和性能需求。ESP32的时钟源分别来自外部晶振、内部PLL或震荡电路。

🔥🔥1.时钟源

(1)快速时钟主要包括PLL_CLK、320MHz或480MHz内部PLL时钟;XTL_CLK,2~40MHz外部晶振时钟。

(2)低功耗慢速时钟主要包括XTL32K_CLK,32KHz外部晶振时钟;RTC8M_CLK,8MHz内部时钟,频率可调;RTC8M_D256_CLK由RTC8M_CLK经256分频所得,频率为(RTC8M_CLK/256),当 RTC8M_CLK的初始频率为8MHz时,该时钟以31.250KHz频率运行;RTC_CLK,150KHz 内部低功耗时钟,频率可调。

(3)音频时钟,APLL_CLK,16~28MHz内部AudioPLL时钟。

🔥🔥2.CPU时钟

CPU_CLK为CPU主时钟,它在高效工作模式下,主频可以达到240MHz。同时,CPU能够在超低频下工作,以减少功耗。CPU_CLK由RTC_CNTL_SOC_CLK_SEL选择时钟源,允许选择PLL_CLK、APLL_CLK、RTC8M_CLK、XTL_CLK作为CPU_CLK的时钟源。

🔥🔥3.外设时钟

外设需要的时钟包括:APB_CLK、REF_TICK、LEDC_SCLK、APLL_CLK和PLL_D2_CLK。 APB_CLK由CPU_CLK产生,分频系数由CPU_CLK源决定。

REF_TICK由APB_CLK分频产生,分频值由APB_CLK源和CPU_CLK源共同决定。用户通过配置合理分频系数,可以保证REF_TICK在APB_CLK 切换时维持频率不变。

LEDC_SCLK时钟源由寄存器 LEDC_APB_CLK_SEL决定。

APLL_CLK 来自内部 PLL_CLK,其输出频率通过使用APLL寄存器来配置。

PLL_D2_CLK是PLL_CLK的二分频时钟。

一般情况下,大多数外设一般在选择PLL_CLK时钟源的情况下工作。若频率发生变化,外设需要通过修改配置才能以同样的频率工作。接入REF_TICK外设允许在切换时钟源的情况下,不修改外设配置即可工作。

🔥🔥4.WiFi和BT时钟

WiFi和BT必须在APB_CLK时钟源选择PLL_CLK下才能工作。只有当WiFi和BT同时进入低功耗模式时,才能暂时关闭PLL_CLK。LOW_POWER_CLK允许选择RTC_CLK、SLOW_CLK、RTC8M_CLK或XTL_CLK,用于WiFi和BT的低功耗模式。

🔥🔥5.RTC时钟

SLOW_CLK和FAST_CLK的时钟源为低频时钟。RTC模块能够在大多数时钟源关闭的状态下工作。SLOW_CLK 允许选择RTC_CLK、XTL32K_CLK或RTC8M_D256_CLK,用于驱动电源管理模块。FAST_CLK允许选择XTL_CLK的分频时钟或RTC8M_CLK,用于驱动片上传感器模块。

🔥🔥6.音频PLL

音频和其他对于数据传输时效性要求很高的应用都需要高度可配置、低抖动并且精确的时钟源。来自系统时钟的时钟源可能会携带抖动,并且不支持高精度的时钟频率配置。

🔥🔥🔥ESP32系统定时器

🔥🔥1.64bit通用定时器

芯片内置4个64位通用定时器,具有16位分频器和64位可自动重载的向上/向下计时器。定时器特性:16位时钟分频器,分频系数为2~65536;64位计时器;计时器方向可配置:递增或递减;软件控制计数暂停和继续;定时器超时自动重载;软件控制的即时重载;电平触发中断和边沿触发中断。

🔥🔥2.看门狗定时器

芯片中有3个看门狗定时器:2个定时器模块中各有1个(称作主看门狗定时器,即MWDT),RTC模块中也有1个(称作RTC看门狗定时器,即 RWDT)。意外的软件或硬件问题会导致应用程序工作失常,而看门狗定时器可以帮助系统从中恢复。如果当前程序运行超过预定时间,但没有喂狗或关闭看门狗定时器,可能引发以下动作包括:中断、CPU复位、内核复位和系统复位。其中,只有RWDT能够触发系统复位,复位包括RTC在内的整个芯片,每个阶段的超时时间长度均可单独设置。

🔥🔥🔥FreeRTOS

🔥🔥单任务与多任务系统区别

在没有操作系统的情况下,嵌入式系统中主函数是通过不断循环完成所有任务处理的,当然也可以通过中断完成一些任务处理,一般称之为单任务系统,也称为前后台系统,中断服务函数作为前台程序,主函数不断循环作为后台程序。目前嵌入式系统的发展,已经进入多任务的处理阶段,需要解决不同任务之间的关系和时序问题。FreeRTOS是一个抢占式的实时多任务系统,它将系统分为多个任务处理,根据每个任务的属性,由调度器进行安排时间进行执行,实现了多任务的协调处理。

🔥🔥🔥FreeRTOS任务状态

🔥🔥1.运行态。

当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在使用处理器的任务。如果使用的是单核处理器的话,那么不管在任何时刻永远都只有一个任务处于运行态。

🔥🔥2.就绪态。

处于就绪态的任务是那些已经准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!

🔥🔥3.阻塞态。

如果一个任务当前正在等待某个外部事件的话,它处于阻塞态,例如,某个任务调用了函数vTaskDelay()的话,会进入阻塞态,直到延时周期完成。任务在等待队列、信号量、事件组、通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临!

🔥🔥4.挂起态。

像阻塞态一样,任务进入挂起态以后也不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间。任务进入和退出挂起态通过调用函数vTaskSuspend()和xTaskResume()。

🔥🔥🔥FreeRTOS任务构成

🔥🔥1.任务定义

在单任务系统中,系统的主体就是主函数里面顺序执行的无限循环,在无限循环里面CPU按照顺序完成各种事情。在多任务系统中,根据功能的不同,把整个系统分割成一个个独立的函数,这个函数称为任务。任务(task),是抽象的东西,并没有一个严格的定义,一般是指由软件完成的一个活动,对于freeRTOS的系统,任务即线程/进程。

🔥🔥2.任务控制

FreeRTOS的任务属性需要存储,这些属性集合到一起,以任务控制块结构体表示,在函数xTaskCreate()创建任务时,会自动给每个任务分配任务控制块。FreeRTOS旧版本的任务控制块叫作tskTCB,新版本重命名为TCB_t。

🔥🔥3.任务堆栈

FreeRTOS要正确恢复任务的运行,离不开任务堆栈,任务调度器在进行任务切换时,将当前任务现场(CPU寄存器值等)保存在任务堆栈中,下次运行任务时,用堆栈中保存的值来恢复现场,任务从上次中断的地方开始运行。

因此,创建任务需要指定堆栈,如果使用的函数xTaskCreate()创建任务(动态方法),那么任务堆栈就会由函数xTaskCreate()自动创建。如果使用函数xTaskCreateStatic()创建任务(静态方法),需要程序员自行定义任务堆栈,然后将堆栈首地址作为参数传递给函数。

🔥🔥🔥FreeRTOS相关API

🔥🔥1.任务相关API

xTaxkCreate()

xTaskCreateStatic()

xTaskCreateRestricted()

vTaskDelete()

🔥🔥2.时间相关API

vTaskDelay()

vTaskDelayUntil()

🔥🔥3.队列相关API

xQueueCreate()

xQueueSend()、xQueueSendToBack()和xQueueSendToFront()

xQueueSendFromISR()、xQueueSendToBackFromISR()和xQueueSendToFrontFromISR()

相关推荐
Industio_触觉智能3 天前
RK3506 Buildroot系统目录地图-上|7个关键符号链接与构建产物全解析
嵌入式硬件·sdk·智能硬件·固件·瑞芯微·系统编译·rk3506
say_fall8 天前
【Linux系统编程】Linux进程信号:从“外卖到了“到内核里的一张位图
linux·运维·服务器·车载系统·智能硬件
AiNightVision9 天前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
mk01510 天前
单片机同步降压稳压器输出最低1V,关断时损耗3uA
单片机·嵌入式硬件·硬件工程·智能硬件·pcb工艺
领麦微红外12 天前
红外测温传感器 赋能充电桩热安全与运维智能化
运维·安全·产品经理·智能硬件
聆思科技AI芯片13 天前
【AI硬件开发上手教程】怎么使用AI编程实现小聆AI语音控制舵机
人工智能·嵌入式硬件·开源·ai编程·智能硬件
AiNightVision15 天前
星光级 是什么?——星光级摄像机是什么?0.001Lux 照度门槛与选型真相
人工智能·算法·车载系统·自动驾驶·无人机·视频·智能硬件
美摄科技17 天前
智能硬件如何增加一键成片剪辑功能?
数码相机·智能手机·智能硬件
光子物联单片机17 天前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
蒲公英内测分发17 天前
智能家居厂商有多个产品线,包装上的 App 下载入口该共用还是分开?
android·人工智能·数码相机·机器人·智能家居·智能硬件