新星杯-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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)图像变换

形态变换 图像处理中的形态学操作是处理图像结构的有效方法。以下是一些常见的形态学操作的介绍及其在 OpenCV 中的实现示例。 1. 腐蚀(Erosion) 腐蚀操作通过消除图像边界来减少图像中的白色区域(前景),使物体的边…

Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP

文章目录 一、MPP 介绍二、获取和编译RKMPP库三、视频解码四、视频编码 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍如何调用alsa api来进行音频数据的播放和录制。 一、MPP 介绍 瑞芯微提供的媒体处理软件平台…

阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI

通义灵码是基于阿里巴巴通义大模型研发的AI 智能编码助手,在通义灵码 1.0 时代,我们针对代码的生成、补全和问答,通过高效果、低时延,研发出了国内最受欢迎的编码助手。 在通义灵码 2.0 发布会上,阿里云通义实验室自然…

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…

endnote x9 如何将参考文献和文中的应用格式由annotated变为编码,例[1],[2]

在 EndNote X9 中&#xff0c;将参考文献和文中引用格式更改为编码形式&#xff08;如 [1], [2]&#xff09;需要以下步骤&#xff1a; 1. 选择合适的输出样式 打开 EndNote X9。点击菜单栏的 "Edit" > "Output Styles" > "Open Style Manage…

用户中心项目教程(二)---umi3的使用出现的错误

目录 1.情况的说明 2.遇到的问题 1&#xff09;第一个问题-关于npx的使用 2&#xff09;第二个问题--unsupport问题 3&#xff09;第三个收获--nodejs安装问题 4&#xff09;第四个收获---nvm下载问题 5&#xff09;第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…

【面试宝典】Java中创建线程池的几种方式以及区别

强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 创建线程池有多种方式&#xff0c;主要通过 Java 的 java.util.concurrent 包提供的 Executors 工具类来实现。以下是几…

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

通过视觉语言模型蒸馏进行 3D 形状零件分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01;对应英文要求比较高&#xff0c;特此说明&#xff01; Abstract This paper proposes a cross-modal distillation framework, PartDistill, which transfers 2D knowledge from vision-language models …

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Transformer-LSTMNSGAII多目标优化算法&#xff0c;工艺参数优化、工程设计优化&#xff01;&#xff08;Matlab完整源码和数据&#xff09; Transformer-LSTM模型的架构&#xff1a;输入层&#xff1a;多个变量作…

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…

电脑风扇声音大怎么办? 原因及解决方法

电脑风扇是电脑的重要组件之一&#xff0c;它的作用是为电脑的各个部件提供冷却&#xff0c;防止电脑过热。然而&#xff0c;有时候我们会发现电脑风扇的声音特别大&#xff0c;不仅影响我们的使用体验&#xff0c;也可能是电脑出现了一些问题。那么&#xff0c;电脑风扇声音大…

Oracle报错ORA-01078、LRM-00109

虚拟机异常关机后&#xff0c;rac数据库备机无法启动数据库&#xff0c;报错如下 解决方法&#xff1a; 找到如下路径文件 执行&#xff1a; cp init.ora.016202516818 /u01/app/oracle/product/19.3.0/db/dbs/ mv init.ora.016202516818 initplm2.ora 再次进入命令行sqlpl…

.Net Core微服务入门系列(一)——项目搭建

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

Ability Kit-程序框架服务(类似Android Activity)

文章目录 Ability Kit&#xff08;程序框架服务&#xff09;简介Stage模型开发概述Stage模型应用组件应用/组件级配置UIAbility组件概述概述声明配置 生命周期概述生命周期状态说明Create状态WindowStageCreate**和**WindowStageDestroy状态WindowStageWillDestroy状态Foregrou…

Harmony OS 5.0.1 模拟器报未开启 Hyper-V解决方法

程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java、嵌入式、鸿蒙、人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴&#xff01;君志所向,一往无前&#xff01; 今天在写Harmony NEXT版本的元服务的时候&#xff0c;突然模拟器无法启动了&#xff0…

WPS数据分析000004

目录 一、表格阅读技巧 冻结窗格 拆分窗口 新建窗口 阅读模式 护眼模式 二、表格打印技巧 打印预览 打印缩放 打印区域 打印标题 分页打印 打印位置 页眉页脚 逐份打印 三、表格保护技巧 锁定单元格 隐藏公式 文档权限 文件加密 一、表格阅读技巧 冻结窗…

LabVIEW桥接传感器数据采集与校准程序

该程序设计用于采集来自桥接传感器的数据&#xff0c;执行必要的设置&#xff08;如桥接配置、信号采集参数、时间与触发设置&#xff09;&#xff0c;并进行适当的标定和偏移校正&#xff0c;最终通过图表呈现采集到的数据信息。程序包括多个模块&#xff0c;用于配置通道、触…

2025西湖论剑-babytrace

前言 就做了下题目&#xff0c;pwn1/3 都是签到&#xff0c;pwn2 后面绕 ptrace 有点意思&#xff0c;简单记录一下 漏洞分析 子进程中的读/写功能没有检查负数的情况&#xff0c;存在越界读写&#xff1a; void __fastcall get_value(__int64 *int64_arr) {__int64 ll; //…

【统计的思想】假设检验(一)

假设检验是统计学里的重要方法&#xff0c;同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系&#xff0c;籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统&#xff0c;简称PSS系统&#xff0c;有一种业…