乐鑫 SoC 内存映射入门

news2024/9/25 21:27:02

微控制器 (MCU) 的性能和内存能力逐步提升,其复杂度也随之加大。特别是当用户需要配置内存管理单元来映射外部存储器芯片 (Flash/SPIRAM) 时,这种现象尤其明显。

开始在乐鑫 SoC 上运行 Zephyr RTOS 时,会发现这些 SoC 与 ARM 架构的 MCU 相比,完全是不同的世界。ARM Cortex-M 基于冯-诺伊曼内存架构,而乐鑫 SoC 使用哈佛内存架构。架构不同,使用复杂度也有差异。 

乐鑫为用户提供了很多开源文档,如《技术规格书》或《技术参考手册》​​​​​​​是获取 SoC 技术信息的第一手资料。但这些内容对于一些用户来说,读起来颇具挑战,因为有一部分重要的信息被隐藏在冗长的文字描述中,用户很难快速获取核心重点。 

本文将从《技术参考手册》中提取重要信息,并绘制成视觉丰富,内容详实的描述性文档。将本文与 SoC《技术规格书》和《技术参考手册》搭配使用,用户可以更好地理解乐鑫 SoC 的内部结构。这在系统开发和驱动开发过程中,例如在移植到 Zephyr RTOS 等其他系统时,尤其重要。


目录

ESP32 

  • ROM 
  • SRAM 
  • RTC-SRAM 
  • 指令 Cache & 数据 Cache 
  • 外设 
  • eFuse 块 

ESP32-S2 

  • ROM 
  • SRAM 
  • RTC-SRAM 
  • 指令 Cache & 数据 Cache 
  • 外设 
  • eFuse 块 

ESP32-S3 

  • ROM 
  • SRAM 
  • RTC-SRAM 
  • 指令 Cache & 数据 Cache 
  • 外设 
  • eFuse 块 ​​​​​​​

ESP32-C3 

  • ROM 
  • SRAM 
  • RTC-SRAM 
  • 指令 Cache & 数据 Cache 
  • 外设 
  • eFuse 块 ​​​​​​​

ESP32-C6 

  • ROM 
  • SRAM 
  • 指令 Cache & 数据 Cache 
  • 外设 
  • eFuse 块 

资料下载 

结语 


ESP32 

ESP32 采用 Xtensa LX6 双核微处理器,是 ESP32 系列中最先发布的 SoC 产品。 

此款 SoC 可使用 SPI 接口访问外部 flash 存储器。也可以访问外部 SPIRAM,但仅限通过数据总线访问。 

点击链接可查看 Zephyr-RTOS 已支持的 ESP32 开发板。 

  • ROM 

ROM 用于存储主引导加载程序代码和其他用户可使用的库函数。ROM 中存储的内容已在生产过程中固化,不可更改。请参考《ESP32 系列芯片勘误表》查看更多 ECO 版本信息。TLDR 使用最新的 ECO v3 及之后的 ESP32 芯片版本。 

  • SRAM 

ESP32 内置三个 SRAM 模块。SRAM0 大小为 192 KB,头 64 KB 可配置为 MMU Cache,用于外部存储器访问。不作为 Cache 使用时,头 64 KB 可以被两个 CPU 通过指令总线读写。 

内部 SRAM1 大小为 128 KB。既可以被两个 CPU 通过数据总线读写,也可以被两个 CPU 通过指令总线读写。 

指令总线地址和数据总线地址访问的 word 是逆序的。 

  • RTC-SRAM 

RTC-FAST 内存仅能被 PRO_CPU 通过数据总线固定地址或指令总线固定地址访问。与其他内存不同,该内存不可通过 APP_CPU 访问。 

RTC-SLOW 内存可以被两个 CPU 通过数据总线和指令总线读写。 

RTC 内存可在 Deep-sleep 期间保存数据。 

  • 指令 Cache & 数据 Cache 

指令和数据 Cache 地址空间为虚拟地址空间,指令或数据总线可以在其中访问 flash 或 SPIRAM 等外部存储器。 

ESP32 内存和 Cache 地址空间
  • 外设 

ESP32 集成了 41 个外设。除 PID 控制器之外,其余外设都可以被两个 CPU 用相同地址访问。系统中有两个 PID 控制器分别服务于 PRO_CPU 和 APP_CPU。PRO_CPU 和 APP_CPU 都只能访问自己的 PID 控制器,不能访问对方的 PID 控制器。 

  • eFuse 块 

eFuse 内存为一次性可编程 (OTP) 内存,可用于存储硬件和加密配置参数。作为一种非易失性存储单位,eFuse 的 bit 一旦被烧写为 1,不可再恢复为 0。 

ESP32 片上外设及对应的 eFuse 地址空间

 请参考最新版《ESP32 技术参考手册》查看更多信息。 


ESP32-S2 

ESP32-S2 是基于 ESP32 的一款 SoC,与 ESP32 非常相似。但 ESP32-S2 属于单核 SoC,且内存组成略有不同。 

与 ESP32 相比,ESP32-S2 可以通过数据总线和指令总线访问外部 SPIRAM,可以运行程序和访问数据。 

点击链接可查看 Zephyr-RTOS 已支持的 ESP32-S2 开发板。 

  • ROM 

ROM 用于存储主引导加载程序代码和其他用户可使用的库函数。ROM 中存储的内容已在生产过程中固化,不可更改。 

  • SRAM 

ESP32-S2 的 SRAM0 可以配置为硬件 Cache,用于访问外部存储器。CPU 可以通过数据或指令总线同序进行读写访问。 

  • RTC-SRAM 

RTC-SLOW 内存可以被 CPU 通过数据总线和指令总线读写,也可以通过 PeriBus1 和 PeriBus2 访问。 

  • 指令 Cache & 数据 Cache 

CPU 通过 Cache 访问外部存储器。通过 I-Cache 访问的地址空间可达 7.5 MB。通过 I-Cache 访问的只读数据总线地址空间可达 4 MB。可访问的外部 flash 或 SPIRAM 地址空间可达 10.5 MB。 

ESP32-S2 内存和 Cache 地址空间
  • 外设 

ESP32-S2 的外设可通过两个外设总线 PeriBus1 和 PeriBus2 进行访问。 每个外设总线在数据总线上都有自己的地址空间。 

PeriBus1 具有预测性读的功能,可提高性能。但不能保证每次的读访问都有效。因此,在使用 PeriBus1 时需要使用易失性声明。但在访问特殊寄存器如 FIFO 时,必须使用 PeriBus2,访问速度虽然慢,但可以确保安全访问。 

  • eFuse 块 

eFuse 内存为一次性可编程 (OTP) 内存,包含 4096 个 bit,可用于存储硬件和加密配置参数。作为一种非易失性存储单位,eFuse 的 bit 一旦被烧写为 1,不可再恢复为 0。 

ESP32-S2 片上外设及对应的 eFuse 地址空间

请参考最新版《ESP32-S2 技术参考手册》查看更多信息。 


ESP32-S3 

ESP32-S3 是最新一款 Xtensa LX7 双核设计 SoC。除了两个主处理器外,ESP32-S3 还集成了两个超低功耗 RISC-V 协处理器。ESP32-S3 集成了一个 JTAG 调试器,可通过 USB 接口进行通信。ESP32-S3 还可以通过数据总线和指令总线访问外部 SPIRAM,可以运行程序和访问数据。 

点击链接可查看 Zephyr-RTOS 已支持的 ESP32-S3 开发板。 

  • ROM 

ROM 用于存储主引导加载程序代码和其他用户可使用的库函数。ROM 中存储的内容已在生产过程中固化,不可更改。 

  • SRAM 

ESP32-S3 内置三个 SRAM 模块。SRAM0 可配置为 I-Cache buffer,用来访问外部存储器的指令。SRAM0 也可用作静态内存由指令总线使用。SRAM1 可以通过数据总线和指令总线进行读写访问。SRAM2 可以配置为 D-Cache,也用作静态内存,可以通过数据总线进行读写访问。 

  • RTC-SRAM 

RTC-SLOW 内存可以通过数据总线和指令总线读写。RTC-FAST 内存可以通过数据总线和指令总线固定地址进行读写访问。 

  • 指令 Cache & 数据 Cache 

两个 CPU 可以通过缓存的 MMU 地址空间访问外部存储器。I-Cache 和 D-Dache 可通过指令总线或数据总线分别访问存储器。 

ESP32-S3 内存和 Cache 地址空间

  • 外设 

外设模块可使用数据总线或指令总线通过固定地址段进行访问。每个外设模块的基地址和地址空间大小,决定了其边界地址。外设地址空间大小一般为 4 KB。更多信息,请查看设备的技术参考手册。 

  • eFuse 块 

eFuse 内存为一次性可编程 (OTP) 内存,包含 4096 个 bit,可用于存储硬件和加密配置参数。作为一种非易失性存储单位,eFuse 的 bit 一旦被烧写为 1,不可再恢复为 0。 

ESP32-S3 片上外设及对应的 eFuse 地址空间 

请参考最新版《ESP32-S3 技术参考手册》查看更多信息。 


ESP32-C3 

ESP32-C3 是一款 32 位 RISC-V SoC,自带 “IMC” 扩展。与 Xtensa SoC 相比,ESP32-C3 地址空间极其简单。ESP32-C3 支持 JTAG 调试,可通过片上 USB 接口进行通信。 

点击链接可查看 Zephyr-RTOS 已支持的 ESP32-C3 开发板。 

  • ROM 

ROM 用于存储主引导加载程序代码和其他用户可使用的库函数。ROM 中存储的内容已在生产过程中固化,不可更改。 

  • SRAM 

ESP32-C3 有两个 SRAM 模块。SRAM1 可以配置为 I-Cache buffer,也用作静态内存。SRAM1 属于通用内存,可以通过数据总线和指令总线进行读写访问。 

  • RTC-SRAM 

RTC-FAST 内存可以通过 CPU 数据总线和指令总线读写。 

  • 指令 Cache & 数据 Cache 

ESP32-C3 支持以 SPI、Dual SPI、Quad SPI、QPI 等接口形式访问片外 flash。ESP32-C3 还支持手动加密和自动解密。I-Cache 和 D-Dache 可通过指令总线或数据总线分别访问外部 flash。 

ESP32-C3 内存和 Cache 地址空间
  • 外设 

CPU 可通过数据/指令总线的固定地址空间访问外设模块。每个外设模块的基地址和地址空间大小,决定了其边界地址。地址空间大小一般为 4 KB。更多信息见技术参考手册。 

  • eFuse 块 

eFuse 内存为一次性可编程 (OTP) 内存,包含 4096 个 bit,可用于存储硬件和加密配置参数。作为一种非易失性存储单位,eFuse 的 bit 一旦被烧写为 1,不可再恢复为 0。 

ESP32-C3 片上外设及对应的 eFuse 地址空间 

请参考最新版《ESP32-C3 技术参考手册》查看更多信息。 


ESP32-C6 

ESP32-C6 是一款 32 位 RISC-V SoC,自带 “IMAC” 扩展。与 Xtensa SoC 相比,ESP32-C6 地址空间极其简单。ESP32-C6 支持 JTAG 调试,可通过片上 USB 接口进行通信。 

Zephyr-RTOS 对 ESP32-C6 开发板的支持正在开发中。 

  • ROM 

ROM 用于存储主引导加载程序代码和其他用户可使用的库函数。ROM 中存储的内容已在生产过程中固化,不可更改。 

  • SRAM 

ESP32-C6 有两个 SRAM 模块。 

HP-SRAM 属于静态内存,HP CPU 和 LP CPU 可以通过数据总线或指令总线同序读写访问这部分内存。 

LP-SRAM 属于静态内存,HP CPU 和 LP CPU 可以通过数据总线或指令总线读写访问这部分内存。可使用高速模式或低速模式访问 LP-SRAM。 

  • 指令 Cache & 数据 Cache 

ESP32-C3 支持以 SPI、Dual SPI、Quad SPI、QPI 等接口形式访问片外 flash。ESP32-C6 还支持手动加密和自动解密,从而保护开发者片外 flash 中的程序和数据。 

ESP32-C6 内存和 Cache 地址空间 
  • 外设 

CPU 可通过数据/指令总线的固定地址空间访问外设模块。每个外设模块的基地址和地址空间大小,决定了其边界地址。地址空间大小一般为 4 KB。更多信息见技术参考手册。 

  • eFuse 块 

eFuse 内存为一次性可编程 (OTP) 内存,包含 4096 个 bit,可用于存储硬件和加密配置参数。作为一种非易失性存储单位,eFuse 的 bit 一旦被烧写为 1,不可再恢复为 0。 

ESP32-C6 片上外设及对应的 eFuse 地址空间 

请参考最新版《ESP32-C6 技术参考手册》查看更多信息。 


资料下载 

PDF 格式的图片可通过以下途径下载: 

  • ESP32 
  • ESP32-S2 
  • ESP32-S3 
  • ESP32-C3 
  • ESP32-C6 

结语 

有时候,当我们想要深入了解某些内容时,需要首先深入研究一些技术文档,然后再用我们自己的方式将有用信息提取出来,消化吸收。技术文档可能很难理解,如果不熟悉涉及的一些体系结构或特定领域,则更加难读懂技术文档。希望这篇博客可以让你轻松理解乐鑫 SoC 的内存映射。或者在你需要深入研究技术参考手册或技术规格书时,作为辅助参考使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java进阶(HashMap)——面试时HashMap常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中HashMap集合的面试问题,结合源码分析题目背后的知识点。 关于List的博客文章如下: Java进阶(List)——面试…

CPU架构之x86解读

一.什么是x86架构 X86架构:是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集。 编辑搜图 二、x86架构的优势 技术成熟:x86架构的芯片经过多年的发展&#…

Linux:KVM虚拟化

本章操作基于centos7系统 简介 KVM是Kernel Virtual Machine的简写,目前Redhat只支持在64位的Rhel5.4以上的系统运行KVM,同时硬件需要支持VT技术。KVM的前身是QEMU,在2008年被redhat公司收购并获得了一项hypervisor技术,不过redh…

UE学习记录08----Actor 绕指定Actor旋转

Sphere 以 Cube为中心点 在水平面 即 xy平面进行旋转 来源: UE4 actor绕着某个actor旋转 - 简书 (jianshu.com)

【EI会议征稿】第三届绿色能源与电力系统国际学术会议(ICGEPS 2024)

第三届绿色能源与电力系统国际学术会议(ICGEPS 2024) 2024 3rd International Conference on Green Energy and Power Systems 绿色能源是指可以直接用于生产和生活的能源。它包括核能和“可再生能源”。随着世界各国能源需求的不断增长和环境保护意识…

启动Vue项目报错Error: error:0308010C:digital envelope routines::unsupported

问题描述 启动Vue项目报错Error: error:0308010C:digital envelope routines::unsupported 出现这个一般就是node版本的问题,通过命令查看node -v查看node版本; 百度查了好多,都让我降低node版本,属实太麻烦了 在不改node版本的…

WhatsApp是什么?如何使用?有何功能?

相信很多做跨境的小伙伴对WhatsApp并不陌生,现在它是数十亿人使用的最受欢迎的即时通讯平台,每天在该平台上交换超过100亿条消息。它在全球200个国家地区拥有超过20亿用户,在60个国家属于常用通讯设备,是世界上最受欢迎的消息传递…

【广州华锐互动】飞机诊断AR远程指导系统为工程师提供更多支持

随着科技的发展,飞机的维护工作也在不断进步。其中,AR(增强现实)技术的应用使得远程运维成为可能。本文将探讨AR在飞机诊断远程指导系统中的应用,以及它对未来航空维护模式的影响。 AR远程指导系统是一种使用增强现实技…

对接第三方接口鉴权

我们知道,做为一个web系统,少不了要调用别的系统的接口或者是提供接口供别的系统调用。从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂…

虹科干货 | CAN与CAN FD总线常见故障诊断及解决

全文导读:CAN总线凭借着可靠、实时、经济和灵活的优势,在汽车、工业等领域得到广泛应用,并逐渐普及到电池储能、医疗器械、智能大楼等应用场景中。随着CAN总线在越来越多领域得到应用,CAN总线测试的需求也逐渐增多。本文主要总结了…

c++之内联函数

要学习内联函数(inline),首先我们要复习一下宏的缺点 我们的目的就是用内联函数去替代宏。 内联函数类似与宏的优点,但是克服了宏的缺点。(内联函数编译器通过宏实现了内联函数) 但是一般只适合小函数&…

车载网关产品解析(附:车载网关详细应用案例及部署流程)

5G车载网关是一款功能强大的工业级无线通讯设备。它集成了4G/5G双模网络模块、M12接口设计、强大的路由和安全功能等特性,可以为车载和移动应用提供稳定可靠的无线数据连接。 链接直达:https://www.key-iot.com/iotlist/sv900.html ### 产品特性 5G车载网关最大的…

一百九十八、Java——IDEA项目中有参构造、无参构造等快捷键(持续梳理中)

一、目的 由于IDEA项目中有很多快捷键,可以很好的提高开发效率,因此整理一下 二、快捷键 (一)快捷键生成public static void main(String[] args) {} 快捷键:psvm (二)快捷键在test中创建cn…

一文6个步骤带你实现接口测试入门

一、接口测试概述 1 什么是接口测试: 接口测试是测试系统组件间交互的一种测试。接口测试主要用于检测外部系统与系统之间,内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑…

在线客服源码系统+完全开源可二开 带完整搭建教程

在线客服源码系统是一种基于互联网技术的自动化客户服务软件。它通过网页、即时通讯等多种方式,实现企业与客户之间的即时互动和信息交流。该系统具有多种功能,如在线聊天、文件传输、消息管理、用户信息存储等。选择合适的在线客服源码系统,…

Spring两大核心之一:AOP(面向切面编程)含设计模式讲解,通知类型切点;附有案例,实现spring事务管理

模拟转账业务 pom.xml <dependencies><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29</version></dependency><!--lombok-->…

Jmeter 测试 MQ 接口怎么做?跟我学秒变大神!

MQ(message queue)消息队列&#xff0c;是基础数据结构 先进先出 的一种典型数据结构。一般用来解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 MQ 主要产品包括&#xff1a;Rabb…

ChatGLM3 模型学习与实战

文章目录 一&#xff0c;说明二、前言1. 背景2. 系统说明3. 相比于ChatGLM2-6B进行的 性能升级4. 模型列表 三、环境搭建1. 下载代码2 构建环境3 安装依赖4. 大模型下载方式4.1 安装 lfs 方便本地下载 ChatGLM2-6B 大模型4.2 Hmodelscop 上手动下载模型及其文件 【推荐】4.3 Hu…

大中小企业自招人力及劳务派遣全行业招聘抖音直播招聘效果佳

在抖音平台上&#xff0c;企业或者人力资源公司可以通过直播的形式&#xff0c;将职位以视频直播的方式展现出来。通过抖音直播招聘报白&#xff0c;企业或者人力资源公司可以利用抖音的短视频流量红利&#xff0c;触达到每天超过8亿的活跃用户群体。这样可以提高岗位信息的曝光…

python爬取百度图片上的图像

from fake_useragent import UserAgent import requests import re headers {"User-agent": UserAgent().random, # 随机生成一个代理请求"Accept-Language": "zh-CN,zh;q0.9,en;q0.8,en-GB;q0.7,en-US;q0.6","Connection": "k…