嵌入式常用存储

目录

1. 分类方式

1.1 按照是否掉电后失去存储信息分类

1.2 按照是否可读写属性分类

1.3 按照是否可随机读写分类

1.4 按在嵌入式系统中的位置和角色分类

2. RAM、ROM、Flash

2.1 RAM- Random Access Memory

2.1.1 DRAM - Dynamic RAM、SRAM - Static RAM             

2.1.1.1 实现原理

2..1.1.2 用途

2.2 Flash

2.2.1 NAND Flash

2.2.2 NOR Flash

2.3 ROM

2.3.1 ROM

2.3.2 PROM

2.3.3 EPROM

2.3.4 EEPROM

3. Cache

3.1 时空局部性原理

3.2 Cache 在SOC(system on chip)中的位置

3.3 工作原理


1. 分类方式

1.1 按照是否掉电后失去存储信息分类

1. 易失性存储

        RAM(DRAM、SRAM)

 2. 非易失性存储

        ROM、Flash(NAND Flash、 NOR Flash)

1.2 按照是否可读写属性分类

1. ROM - Read Only Memory  只读存储器

        ROM

2. 可读可写存储器

        RAM、Flash

1.3 按照是否可随机读写分类

1. FIFO - first in first out   先进先出

        队列结构存储

2. FILO - first in last out   先进后出

        栈结构存储

3. RAM - random access 随机访问存储

        任何时刻可以随机访问任意字节

4. 按区域读写 例如 NAND Flash

        NAND Flash 读写都需要按page进行,无法对单独字节读取。

1.4 按在嵌入式系统中的位置和角色分类

1. 片上程序存储器,片上数据存储器

        通常为SRAM、NOR Flash

2. 片外主存

        DRAM

3. 片上程序、数据 Cache

        SRAM

4. 片外非易失性存储

        EEPROM、NAND Flash。

2. RAM、ROM、Flash

2.1 RAM- Random Access Memory

        某随机访问存储器的管脚如下:

                 

        具有地址线、数据线、控制线。

        RAM时钟频率较高、加之随机访问的性质,一般作为程序运行时刻的CPU直接取(不考虑中间经过Cache、MMU等)指令、数据的存储,一般称之为内存。

        在芯片被选通时,当CPU要读时、CPU在地址线上传递要访问的存储单元地址,存储器将会在数据线上放置该存储单元存储的数据。在CPU要写时、CPU在地址线上传递要访问的存储单元地址,数据线上传递要写的数据,存储器将会将数据线上放置的数据存储在该存储单元。

2.1.1 DRAM - Dynamic RAM、SRAM - Static RAM             

        还分为SRAM - Static RAM、DRAM - Dynamic RAM。

2.1.1.1 实现原理

        SRAM 实现原理基于锁存器、DRAM实现基于电容充放电。

        下图为SRAM的1bit存储单元电路原理图。

        

图 SRAM存储单元

        晶体管M1、M2、M3、M4构成锁存结构,M1、M3为P管,射极连接高电平,M2、M4为N管,射极链接低电平。M1、M2与M3、M4分别构成反相器,即非门。

        当word Line 选通时,把M5、M6等效为导线,等效门电路如下

        

图 SRAM存储单元等效门电路

        这是一个经典的锁存器结构,当Bit Line与Bit Line的‘非线’输入0\1时,0\1会被锁存住,即使后续失去Bit Line与Bit Line的‘非线’的输入驱动,Bit Line与Bit Line的‘非线’仍旧保持0\1, 从而达到存储一比特的数据。

        参考:1. 存储电路·专题01·锁存器 - 知乎 (zhihu.com)

                   2. SRAM与DRAM的区别_sram和dram-CSDN

                   3. 存储技术SRAM详解 - 知乎 (zhihu.com)

        下图为DRAM的1bit 存储单元的电路原理图。

        

图 DRAM存储单元

        由于电容会慢慢放电,故DRAM要每隔一段时间对内部电容进行充电(刷新),以防止存储的bit由1变0,这个一般称之为动态刷新,这也是其为什么叫做Dynamic RAM的原因。

        由于需要动态刷新、所以DRAM的存取速度相较SRAM慢,且功耗更大。但是由于其基于电容的实现结构的简单,可以做到更大的存储密度,价格也就更便宜。

2..1.1.2 用途

        SRAM 常用作片内存储、片内程序、数据存储器,特点是存储空间较小,但时钟速度几乎与CPU匹配。

        DRAM常用作片外存储,也常被称为主存,存储空间可达上G,但存取速度较慢,数据或程序放在上面会使程序运行较慢。

2.2 Flash

        被称为闪存技术、闪存定义:是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。嵌入式中常用的flash分为两种、NAND Flash 、 NOR Flash。

        NAND Flash 基于浮栅场效应管在bit Line上串联实现,Bit Line上具有与非逻辑, 即一个Bit Line上所有浮栅场效应管的浮栅极有电荷时,bit Line输出0(名字由此而来)

     

图 NAND Flash电路原理图

        NOR Flash基于浮栅场效应管在bit Line上并联实现,Bit Line上具有或非逻辑, 即一个Bit Line上任意浮栅场效应管的浮栅极有电荷时,bit Line输出0(名字由此而来)。 不同实现机制决定了不同的存储特性。

图 NOR Flash电路原理图

NAND Flash、NOR Flash 电路结构解析参考:Flash构成的基本原理 - 知乎 (zhihu.com)

2.2.1 NAND Flash

        某NAND Flash 的管脚如下所示

        

        可以看到NAND Flash并不同时具有地址线和数据线。而是具有数据与地址线复用的IO。并不具有像RAM那样的接口。

        第二点,NAND Flash对存储单元写时只能由1变0,不能由0变1:

        即假设某存储单元存储的内容为0b1001001,现在处理器想向其中写入0b0110110,结果再写入后,该存储单元存储内容为0b00000000,即对存储单元中为0的bit位是无法通过写入变为1的。

         第三点,NAND Flash的读写是以page为单位的,即要写入就要写一个page,要读就要读出1个page,这样假使CPU可以对其直接寻址,CPU也没有那么大的寄存器文件可以去存放NAND Flash吐出来的指令\数据。

        参考 1. NAND FLASH学习笔记之nand flash基础(二)_nand引脚定义-CSDN博客

                2. 为什么SSD的NAND非得按页写? - 知乎 (zhihu.com)

                3.【FLASH存储器系列十五】NAND Flash究竟能不能随机读写到某个字节的数据?-CSDN博客

         结合第二点、第三点,如果要对NAND Flash 一页进行自由写0写1,该如何操作呢?答案是,对NAND Flash进行erase操作,这个操作会对一个block (比page更大的一个概念,包含多个page)进行操作,将其中的存储单元每个bit变为1。这样,再对要写入的所有为0的位在page中进行写入就可以了。

        结合以上几点可知,NAND Flash是无法作为内存使用的,程序运行时,CPU无法实时从其上取指令、取数据。

        但是NAND Flash可以作为外设来存储程序、数据,在运行时将程序、数据从NAND Flash上读到内存中,再在内存中去执行,这种情况下需要一个“引导程序”先于NAND Flash其上存储的程序去执行,“引导程序”的作用是将NAND Flash其上的程序\数据拷贝到内存。NAND Flash更多被格式化为特定文件系统,用作存储对正确性要求不太严格的媒体数据,例如电影,图片等。固态硬盘(SSD)使用的也是NAND Flash(MLC、TLC、QLC等,即一个场效应管存储的信息不只1bit、量化阶数更多)。

2.2.2 NOR Flash

        NOR Flash 管脚如下所示

                                         

        与NAND Flash 不同,NOR Flash 同时具有地址线,数据线,即具有RAM那样的接口、这是它支持XIP(excute in place )特性的原因之一,即在程序运行时,CPU可以从中实时取指令,而不需要将其中指令拷贝到内存中再去执行。

        其二,它是可以以字节为单位进行读写的(工艺原因,读较快、写很慢),但是其写入前依旧需要按扇区(与 NAND 的 block对等的概念,但一般比block字节数多)进行擦除操作,擦除操作前需要对扇区全写0,故写入\擦除的速度比NAND Flash慢的多。

        参考:nor flash之擦除和写入-腾讯云开发者社区-腾讯云 (tencent.com)

        故NOR Flash多用作程序存储器,而不是数据存储器。因为CPU运行时存储的程序指令一般只需要被CPU读取到译指执行单元去执行,而几乎不需要被覆盖写入到存储器(除非软件有这方面的需求)。如果用做数据存储器,免不了写入操作,那样就太拖累CPU了。

2.3 ROM

只读存储器,在嵌入式中常用作引导程序存储器,存储着CPU上电后最先执行的程序。或者在PC上存储着BIOS。

ROM 大致分为 ROM、PROM、 EPROM、EEPROM

2.3.1 ROM

里面的程序时在产线上生产时就固化下来的,是利用特殊工艺“编程”的,生产出来后,任何方法无法对里面的程序再改变。里面存储内容收到损坏直接报废,只能换一片ROM

2.3.2 PROM

P代表可编程。程序不在生产时被固化,可以使用专用工具进行编程确定,但只能编一次,内容无法被擦除、过后与ROM一样。

2.3.3 EPROM

E代表可擦除,即编过程序之后,程序还可以被擦除,以便多次重复编程。但是编程工具、和擦除工具都是不同的专用工具,非常不便

2.3.4 EEPROM

        EE代表电可擦除,擦除时只需要提供电压高于普通工作电压一定量即可,一般电脑提供的电压就可以满足,所在在电脑上就可以进行重复编程操作。按照Flash定义,可以算作Flash了。现在电脑主板上的BIOS程序多用EEPROM存储。

        EEPROM也可以像NAND Flash用作外部存储,但数据通信接口一般为SPI以及CAN这样的串行外设总线,访问速度很慢。

3. Cache

        介于CPU与程序、数据存储器之间。根据局部性原理,提高程序、数据访问效率。

3.1 时空局部性原理

        时间:当第N时刻访问了一条指令、数据,那么N+1时刻访问这条指令、数据的可能性会很大。

        空间:当第N时刻访问了存储位置为M的一条指令、数据,那么N+1时刻访问这条指令或数据的相邻位置M+1的指令、数据的可能性会很大。

        根据这两条原理,Cache的重要功能就是缓存和预取。

3.2 Cache 在SOC(system on chip)中的位置

        

        上图为某款DSP内部Cache组织形式,一般L1 Cache属于各个核自身,分为程序Cache(P-Cache),数据Cache (D-Cache)。

        由程序、数据L1 cache向外扩展出L2 Cache,其中既可以缓存数据,也可以缓存指令,但L2 Cache 仍属于每个核自身。

        由L2 Cache 向外延伸扩展出L3 Cache,L3 Cache中既可以缓存数据,也可以缓存指令,此时L3由各个核心共享。

3.3 工作原理

        当CPU需要向内存中取指令\数据时,依次查看L1、L2、...、Ln Cache、MM(主存,这里解释为可被缓存的存储器)中是否存在副本。当查询到某一级存储中存在该数据\指令副本时,将该副本缓存至更高级别的所有存储中,并传递给CPU使用。

cache详解参考:操作系统-cache高速缓存 - float123 - 博客园 (cnblogs.com)

  • 31
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 嵌入式Linux是一种嵌入式操作系统,它可以运行在嵌入式设备上,如智能手机、平板电脑、路由器等。Python是一种高级编程语言,它可以在嵌入式Linux上运行,并且可以用于开发各种应用程序,如Web应用程序、机器学习应用程序等。嵌入式Linux和Python的结合可以为嵌入式设备提供更加强大的功能和更好的用户体验。 ### 回答2: 嵌入式Linux和Python是两个不同的概念,但在一些实际应用中它们常常是同时使用的。 嵌入式Linux是指将Linux操作系统移植到嵌入式设备上的过程。传统的Linux操作系统通常用于服务器和个人电脑等大型机器上,而嵌入式Linux则是针对资源受限的嵌入式设备进行优化的。它可以运行在各种嵌入式设备上,如智能手机、车载导航系统、智能家居设备等。嵌入式Linux通常具有稳定性、可靠性和灵活性等特点,可以为嵌入式设备提供强大的功能和开发环境。 Python是一种高级、解释性的编程语言,以其简洁的语法和强大的开发库而闻名。Python在嵌入式设备上的应用越来越广泛,它可以作为开发嵌入式应用的工具之一。使用Python编程语言可以帮助开发者更快速地实现各种功能,同时也减轻了在嵌入式设备上进行底层编程的复杂度。 结合嵌入式Linux和Python的优势,可以进行各种应用的开发。比如,可以使用嵌入式Linux作为底层操作系统,Python作为应用层开发工具,来实现一些智能家居控制、数字备忘录、物联网设备控制等。Python的丰富的库和模块可以帮助开发者更方便地进行开发,而嵌入式Linux的稳定性和可靠性则可以保证应用在嵌入式设备上的正常运行。 总的来说,嵌入式Linux和Python的结合可以为嵌入式设备提供强大的功能和开发环境,是嵌入式系统开发的一种常用方式。 ### 回答3: 嵌入式Linux是指将Linux操作系统嵌入到设备中的一种技术。它通过裁剪和优化的方式,适应嵌入式设备所需的资源限制。 Python是一种高级编程语言,具有易学易用、可读性强和丰富的标准库等特点。在嵌入式Linux环境中使用Python可以带来许多好处。 首先,Python语言简洁易读,使得开发人员可以更快地编写代码。其语法清晰明了,减少了开发过程中可能出现的错误和bug。 其次,Python拥有丰富的标准库和第三方库,提供了大量常用的功能和工具。这大大减轻了开发人员的工作量,使得开发过程更加高效和便捷。 此外,Python还支持面向对象的编程,使得代码的组织和管理更加方便。在嵌入式设备应用中,可以通过面向对象的方式实现模块化和可复用的代码,提高了代码的可维护性和可扩展性。 嵌入式Linux和Python的结合可以实现丰富的功能和应用。例如,可以使用Python语言来编写设备的控制逻辑和算法,以及与设备进行交互的用户界面。同时,通过嵌入式Linux的强大功能,可以实现设备的网络连接、数据存储和远程控制等功能。 总的来说,嵌入式Linux和Python的结合为嵌入式设备开发提供了强大的工具和技术支持。通过使用Python语言和嵌入式Linux操作系统,开发人员可以更快、更高效地开发出功能丰富、可靠稳定的嵌入式应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值