ShuangChenYue ShuangChenYue
首页
  • Cpp之旅
  • Cpp专栏
  • Effective_CPP
  • muduo网络库
  • Unix环境高级编程
  • Cpp提高编程
  • 计算机网络
  • 操作系统
  • 数据结构
  • Linux
  • 算法
  • 基础篇
  • MySql
  • Redis
  • 电子嵌入式通信协议
  • 深入浅出SSD
  • 文件系统
  • 汇编语言
  • STM32
  • 随笔(持续更新)
  • Git知识总结
  • Git 创建删除远程分支
  • nvm使用小结
  • 虚拟机固定 IP 地址
  • Shell 脚本学习笔记
  • VScode 插件 CodeGeeX 使用教程
  • KylinV10 将项目上传至 Github教程
  • KylinV10 安装 MySQL 教程(可防踩雷)
  • kylinV10-SP1 安装 QT
  • 高并发内存池
  • USBGUARD 项目编译环境配置
  • Power_Destory 项目
  • U 盘清除工具编译教程
  • 个人博客代码推送教程
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • MFC编程随记
  • MFC实现ini配置文件的读取
  • MFC实现点击列表头排序
  • 贴图法美化Button按钮
  • 如何高效阅读嵌入式项目代码
  • NAND Flash
  • ARM 处理器
  • 嵌入式基础知识-存储器
  • 闪存存储和制造技术概述
  • 芯片IO驱动力
  • 主流先进封装技术介绍
  • 虎牙C++技术面经
  • 金山一面复习
  • 完美世界秋招 C++ 游戏开发面经(Cpp部分)
  • 博客搭建
  • 网站收藏箱
首页
  • Cpp之旅
  • Cpp专栏
  • Effective_CPP
  • muduo网络库
  • Unix环境高级编程
  • Cpp提高编程
  • 计算机网络
  • 操作系统
  • 数据结构
  • Linux
  • 算法
  • 基础篇
  • MySql
  • Redis
  • 电子嵌入式通信协议
  • 深入浅出SSD
  • 文件系统
  • 汇编语言
  • STM32
  • 随笔(持续更新)
  • Git知识总结
  • Git 创建删除远程分支
  • nvm使用小结
  • 虚拟机固定 IP 地址
  • Shell 脚本学习笔记
  • VScode 插件 CodeGeeX 使用教程
  • KylinV10 将项目上传至 Github教程
  • KylinV10 安装 MySQL 教程(可防踩雷)
  • kylinV10-SP1 安装 QT
  • 高并发内存池
  • USBGUARD 项目编译环境配置
  • Power_Destory 项目
  • U 盘清除工具编译教程
  • 个人博客代码推送教程
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • MFC编程随记
  • MFC实现ini配置文件的读取
  • MFC实现点击列表头排序
  • 贴图法美化Button按钮
  • 如何高效阅读嵌入式项目代码
  • NAND Flash
  • ARM 处理器
  • 嵌入式基础知识-存储器
  • 闪存存储和制造技术概述
  • 芯片IO驱动力
  • 主流先进封装技术介绍
  • 虎牙C++技术面经
  • 金山一面复习
  • 完美世界秋招 C++ 游戏开发面经(Cpp部分)
  • 博客搭建
  • 网站收藏箱
  • 嵌入式基础知识——存储器
    • 1. 计算机存储结构
    • 2. 存储器分类
      • 2.1 RAM(内存) 与 ROM(硬盘)
      • 2.1.1 主存储器 RAM
      • 2.1.2 辅助存储器 ROM
      • 2.2 Cache
      • 2.3 其他
      • 2.3.1 Flash
      • 2.3.2 磁盘、光盘等
    • 3. 三级存储体系
    • 4. 高速缓存控制器
    • 5. 一些存储相关的计算题
      • 5.1 题目一
      • 5.2 题目二
      • 5.3 题目三
      • 5.4 题目四
      • 5.5 题目五
    • 6. 其他计算机基础知识
      • 6.1 冯诺依曼计算机组成结构图
      • 6.2 总线
      • 6.3 地址空间
      • 6.4 CPU 工作原理简述
  • 如何高效阅读嵌入式项目代码
  • 闪存存储和制造技术概述
  • 芯片 IO 驱动力
  • ARM处理器
  • Nand Flash
  • 主流先进封装技术介绍
  • 闪存
霜晨月
2024-06-03
目录

嵌入式基础知识——存储器

# 嵌入式基础知识——存储器

# 1. 计算机存储结构

存储器是用来存储程序和数据的部件,是实现"存储程序控制"的基础,理想的存储器应该是执行快,容量足,价格便宜等。但实际上,目前无法同时满足这些目标,因此计算机通常采用分级存储的方式。

image

  • 寄存器:CPU 寄存器,保存来自 cache 的字
  • L1 高速缓存:芯片内的高速缓存 cache,保存来自芯片外 cache 的行
  • L2 高速缓存:芯片外的高速缓存,如 SRAM、DRAM、DDRAM,保存来自主存储器cache 的行
  • 主存储器:如 Flash、PROM、EPROM、EEPROM,保存来自外部存储器的文件
  • 外部存储器:如磁盘、光盘、CF卡、SD卡等
  • 远程二级存储:如分布式文件系统,Web 服务器

# 2. 存储器分类

# 2.1 RAM(内存) 与 ROM(硬盘)

按照存储器存放信息易失性,可分为 RAM 和 ROM:

  • RAM:随机存储器(Random Access Memory),读写速度快,但掉电时会丢失其存储的内容。速度、价格、容量介于 Cache 与辅存之间、断电数据丢失、CPU 可直接访问 存储当前正在执行的程序和数据。
  • ROM:只读存储器(Read-Only Memory),存储的内容掉电后不会丢失。速度最慢、价格最低、容量最大、断电数据不丢失、CPU 不可直接访问存储暂时不运行的程序和数据,需要时再传送到主存。

# 2.1.1 主存储器 RAM

按照 RAM 存储单元的工作原理,又可分为如下几类:

  • SRAM:静态随机存储器(Static RAM),它是靠触发器的自保护功能存储数据,数据一旦写入,其信息就稳定的保存在电路中等待读出,无论读出多少次,只要不断电,信息会一直保存;
  • DRAM:动态随机存储器(Dynamic RAM),它将每个位存储为对一个电容的充电,而它的电容容量小,易漏电,因此需要定时给电容补电,通常称为"刷新";
  • DDR SDRAM:双倍速率同步动态随机存储器(Double Date Rate SDRAM),或称为 DDR。DDR 内存是在 SDRAM 内存的基础上发展而来的

# 2.1.2 辅助存储器 ROM

  • PROM:可编程只读存储器(Programmable ROM)
  • EPROM:可抹除可编程只读存储器(Erasable Programmable ROM)
  • EEPROM:电子式可抹除可编程只读存储器(Electrically Erasable Programmable ROM)

# 2.2 Cache

Cache 是一种比常见内存更快的存储器,一般称为高速缓存存储器。

根据 Cache 的工作机制,可分为:

  • 回写式 Cache:当 CPU 执行写数据时,回写式 Cache 只把该数据写入其数据地址对应的 Cache 中,不直接写入内存。仅当该 Cache 块需要替换时,才把 Cache 写回写入内存中
  • 写通式 Cache:当 CPU 执行写数据时,写通式 Cache 必须同时把该数据写入其数据地址对应的 Cache 块和内存中。

# 2.3 其他

# 2.3.1 Flash

Flash 称为快闪存储器,简称闪存,因其擦除和写入速度比较快而得名。

Flash 是 EEPROM 的变种,不同的是 EEPROM 能在字节水平上进行擦除重新,而 Flash 需要在块的水平上进行擦除。

  • NOR Flash:它带有 SRAM 接口,有足够的地址引脚来寻址,可以方便地存取其内部的每一个字节,因此可直接连接总线系统,构成内存储器;
  • NAND Flash:它使用复杂的 I/O 口来串行地存取数据,采用串行接口,不能直接构成内存,只能用来构成外部存储器。

两者的一些特点对比:

  • NOR 的读速度比 NAND 稍快
  • NAND 的写速度比 NOR 快很多
  • NAND 的擦除速度也比 NOR 快很多
  • NAND 的擦除单元更小
  • NOR 上可直接运行程序,NAND 只能存储信息

# 2.3.2 磁盘、光盘等

  • 磁盘:利用磁头变化和磁化电流进行读/写的存储器
  • 光盘:用光学方式读/写信息的圆盘
  • CF卡:紧凑式闪存(Compact Flash),由 SanDisk 公司于1994年生成,并制定相关规范
  • SD卡:安全数字存储卡(Secure Digital Memory Card)

# 3. 三级存储体系

上面介绍过,存储器的3个指标:容量、速度、价格往往无法同时满足,因此计算机采用多级存储器构成存储体系。

典型的三级存储结构,从内到外一般指Cache、主存储器、外部存储器。

image

Cache 设置在 CPU 和主存之间,可放在 CPU 的内部或外部,其作用是解决主存和 CPU 的速度匹配问题。

除了速度匹配问题,存储还受容量制约,因此。还需要外部存储器提供大容量存储空间。

# 4. 高速缓存控制器

高速缓存控制器负责CPU与高速缓存和主存之间的通信控制

image

# 5. 一些存储相关的计算题

# 5.1 题目一

某计算机总线是32位,地址空间从 0xF000000 到 0xF007FFFF 映射为 Flash 空间,若实现 Flash 的最大存储容量,至少需要多少片 16Kx16bit 的 Flash 芯片。

主存容量计算,内存地址和芯片计算问题,先要了解:

  • 内存单元个数 = 内存尾地址 - 内存首地址 + 1
  • 内存容量 = 内存单元个数 x 每个内存单元容量
  • 将得出的 16 进制容量简化为 2 的幂的形式

分析:

  • Flash 的存储单元个数为:0xF007FFFF - 0xF0000000 + 1 = 0x80000 = 2^19^ 个
  • 总线是 32 位,也表示内存单元的大小是 32bit
  • 因此,Flash 总的容量大小为 2^19^ × 32bit = 2^24^ bit
  • 每片的大小是 16K x 16bit,也即 2^18^ bit(2^14^ × 2^4^)
  • 因此,需要的片数为:2^24^ / 2^18^ = 2^6^ = 64片

# 5.2 题目二

某计算机字长是 32位,存储容量是 256KB,求按字编址的寻址范围

一些基础知识:

  • 位:二进制的每一个 0 或 1 是组成二进制的最小单位,称为位(bit)。
  • 字:计算机在存储、传送或操作时,作为一个单元的一组二进制码称为字。
  • 字长:一个字中的二进制位的位数称为字长,常用的字长包括 8位、16位、32位、64位。例如,通常把处理字长为 8位数据的CPU称为 8位CPU。
  • 字节:字长为 8位的编码称为字节(Byte),字节是计算机中的基本编码单位。

分析:

  • 按字编址,需要知道字长,题目知字长 32位,即 4Byte
  • 存储容量 256KB,即 256K Byte
  • 所以,寻址范围为 256K / 4 = 64K

(个人理解:因为计算机存储传送或操作时是按字作为单位的,那么寻址也是按字进行寻址,这里一个字就是32位也就是 4Byte,所以寻址范围就是存储容量 / 一次寻址单位 = 256K / 4 = 64K 或者 65536字)

# 5.3 题目三

一个 32K x 32位 的静态存储器,求其地址线和数据线的位数

分析:

  • 32位,说明数据宽度是 32位,即数据线的位数是32
  • 32K,即 2^15^,所以地址线需要15位

# 5.4 题目四

某计算机主存容量 64KB,其中 ROM 区为 4KB,其余是 RAM 区,按字节编址。若使用 2K x 8位 的 ROM 和 4K x 4位 的 RAM 设计该存储器,计算两种需用到的数量。

分析:

  • 由题目知,ROM 是 4KB,RAM 是 64 - 4 = 60KB
  • 按字节编址,则按 8bit 位编址
  • 一片 ROM 是 2K x 8bit,需要2片,即可满足大小为 4KB 的 ROM
  • 一片 RAM 是 4K x 4bit,需要30片(60K / 4K = 15,1Byte = 8位,8bit / 4 bit = 2,所以需要 15 × 2 = 30片 )

# 5.5 题目五

容量为 64块 的 Cache 采用组相连方式映射,块大小为 128 字节,每 4块 为一组,若主存容量为 4096 块,且以字节编址,求主存地址的位数和主存区号的位数。

基础知识:

主存地址 = 区号 + 组号 + 组内块号 + 块内地址号

分析:

  • 块大小为 128 字节,即 128 Byte
  • 主存容量为 4096块,即 4K 块,结合块的大小,主存容量为 4K × 128 Byte = 512KB = 2^19^ KB,所以主存地址需要 19 位
  • 块大小为 128 字节(2^7^),则块内地址需要用 7 位表示
  • 每 4 组为一块,则组内块号需要用 2 位表示
  • Cache 容量为 64 块,则分了 16 组,则组号需要用 4位 表示
  • 主存区号位数 = 19 - 7 - 2 - 4 = 6

# 6. 其他计算机基础知识

# 6.1 冯诺依曼计算机组成结构图

image

  • 输入设备:把其他信号转换成计算机能识别和处理的信号并送入计算机中。如键盘、鼠标、摄像头等

  • 输出设备:把运算结果以人或其他设备所能接受的形式送出计算机0外。如显示器、音响、打印机等

  • 存储器:用来存储程序和数据的部件,是实现"存储程序控制"的基础。如内存、硬盘等

  • 运算器:CPU 中负责进行算数运算和逻辑运算的部件,其核心是算术逻辑单元 ALU

  • 控制器:是CPU的指挥中心,其控制着整个 CPU 执行程序的逻辑过程

# 6.2 总线

  • 总线 :总线是计算机中各个部件之间 传送信息的公共通信干线, 在物理上就是一束导线按照其传递信息的类型可以分为 数据总线、地址总线、控制总线。
  • DMA总线 :DMA(Direct Memory Access)即 直接存储器访问,使用 DMA 总线可以不通过 CPU 直接在存储器之间进行数据传递。

# 6.3 地址空间

一个 处理器 能够访问(读写)的 存储空间 是有限的,我们称这个空间为它的 地址空间(寻址空间),一般来说 N位 地址总线的处理器的地址空间是 2的 N 次方。

例如:2位总线能访问 00、01、10、11 即 2^2^。

# 6.4 CPU 工作原理简述

image

CPU执行指令的过程 :

  • CPU先通过 指令计数器PC 向内存写入要读取数据的地址,
  • 内存根据地址找到数据并返回给CPU,
  • CPU通过 指令寄存器IR 接收到数据,将数据通过 指令译码器 翻译成 可执行指令 发送给运算器执行,运算结果储存在 寄存器 中,
  • CPU指令计数器 自增 重复执行步骤。

==一条指令的执行分为三个阶段:==

  1. 取址 :CPU 将 PC 寄存器中的地址发送给内存,内存将其地址中对应的指令返回到 CPU 中的指令寄存器(IR)
  2. 译码 :译码器对 IR 中的指令进行识别,将指令(机器码)解析成具体的运算
  3. 执行 :控制器控制运算器中对应的运算单元进行运算,运算结果写入寄存器

每执行一条指令后 PC 的值会自动增加指向下一条指令。

上次更新: 2024/6/3 14:54:44
如何高效阅读嵌入式项目代码

如何高效阅读嵌入式项目代码→

Theme by Vdoing | Copyright © 2023-2024 霜晨月
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式