存储器的介绍
⒈ROM的功能⇢ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。
注→在后面发展的ROM是可以可写可读并且是可以达到掉电不丢失的(但是它名字还是ROM)
🍎存放单片机工作时的程序,单片机在上电工作的时候,程序指令制导单片机完成设定的功能。没有ROM存储器,单片机是不能够进行工作的。
⒉RAM的功能⇢RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。🍏数据存储器(RAM)存储单片机运行期间所需要的数据和临时生成的数据是需要能够快速读出和写入数据的。此类存储器在掉电之后,存储的数据会丢失,并不能永久保存。
PROM:只能写入一次,第一次写好以后就一直是这个数据了不能被修改(一次性)
EPROM:PROM的升级版本。
E2PROM:AT24C02也是E2PROM。
⑴RAM的优势⇢存储速度特别快。缺点⇢掉电丢失。
⑵ROM的优势⇢掉电不丢失。缺点⇢存储比较慢速度更不上。
🍎综上所示⇢所以我们是需要这两者相互结合。
我们需要高速存储的使用就放进到RAM程序运行的时候都是存储在RAM里面,然后我们需要永久保存的时候就使用ROM存储。我们就很好的利用这两个存储器的长处。
存储单元
🍊说明⇢任何计算系统都需要两种类型的存储器→程序存储器和数据存储器。程序存储器,顾名思义,包含程序,即要由CPU执行的指令。另一方面,数据存储器需要在执行指令时存储临时数据。通常,程序存储器是只读存储器或ROM,数据存储器是随机存储器或RAM。数据存储器有时也称为读写存储器(R/WM)
存储器的简化模型
注→上述右图的二极管[单向导电性]是防止对其它行产生干扰作用抑制干扰方式。
注→PROM之所以称之为:一次性编程是因为蓝色的二极管很容易被击穿,击穿之后就相当于短路了。而没有击穿就相当于是断开。
存储器在电路内部实际上都是一个网状结构。其中横向的线我们可以称之为是地址总线就是用来选择哪一位线就是哪一位地址,而下面这个线(纵向)就是我们的数据总线。
假设⇢我们选择了第一行给了一个高电平("1")剩下的我们暂时不接。然后我们把这些网格交错的地方第一个第二个第三个节点给连接上,剩下的都不进行连接。那么我们在读取下面的这个⑧位的数据总线上就是:第一个、第二个、第三个节点连接上了就从纵向下来就是("1")后面的线没有进行连接那么它就是一个悬空的状态可以暂时把它当作是("0")
那么这里存储的数据就是:1 1 1 0 0 0 0 0 注意这是第一行存储的数据。那么第二行实际上也是一样的。
如上↑便是存储器存储的最基本的原理。
重点⇢存储器是一种网格形式、左边给个地址下面就可以输出数据。
重点说明⇢这个地址一次只能选中一行(全体目光向我看齐😛)所以一般在地址总线之前我们都会加一个译码器(138译码器)
AT24C02
AT24C02是一种可以实现掉电不丢失的存储器。
可用于保存单片机运行时想要永久保存的数据信息。
例:就像我们单片机在运行时候的参数吖~像温度传感器高于某一个设定的阈值会报警,然后这个阈值还是可以调节的,然后把它调节好的时候就可以存进AT24C02。当下次断电再重启的时候你就是可以读取之前的数据了用作于这个。
存储介质→E2PROM。
通讯接口→I2C总线。
容量→256字节。
引脚以及应用电路⒎脚WP(高电平有效)
在计算机运行中,有些信息只允许使用而不允许修改,就要对存储这些信息的区域采取保护措施,这种保护措施称为写保护。即对该存储区的信息只允许读出以被使用,但不允许写入以防止破坏。在上述的应用电路当中我们是给它接地的。
★注→I2C硬件接口是开漏模式,这个接口只能输出低电平,要实现高电平就要靠上拉电阻去拉高。
内部结构框图
I2C(IIC)总线介绍
- I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线。
- 两根通信线⇢SCL(Serial Clock) & SDA(Serial Data)
- 拓展⇢SCL控制线[时钟线](同步)通信双方靠一根时钟线来约定通信速率SDA(数据线)
- 同步、半双工,带数据应答。
- 通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。但是学习I2C还是有一定的学习难度的,但是当你学会了I2C对于要用到它的通信协议来说你又会觉得不那么的难了。
- 显示屏幕(像素点好)
- DS3231(精度高)
- 陀螺仪自带传感器。
I2C电路规范
- 所有I2C设备的SCL连在一起以及SDA连在一起。
- 设备的SCL和SDA均要配置成开漏输出模式。
- SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。
- 开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题。
I2C时序结构
起始条件→[SCL]高电平期间,SDA从高电平切换到低电平。
终止条件→[SCL]高电平期间,SDA从低电平切换到高电平。
🍎注→在起始条件的时候我们最后还是把SCL给拉低的主要目的是为了能够与最后的终止条件进行一个衔接的状态。保证起始条件的时候SCL最后为低电平。
重点⇢最后的数据帧都是以S为起始P为终止的。
发送一个字节
SCL低电平期间,主机(单片机)将数据位依次放到SDA线上(高位在前)
然后拉高SCL,从机(AT24C02)将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次(依次从最高位再到最低位),即可发送一个字节。在下述图中那个x代表数据变化的。
🍏注→主机相当于是单片机而AT24C02相当于是从机,在所有的线都是由主机进行控制的。
接收一个字节
SCL低电平期间,从机(AT24C02)将数据位依次放到SDA线上(高位在前)
然后拉高SCL,主机(单片机)将在SCL高电平期间读取SDA数据位,同时在SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节。
注⇢主机在接收之前,需要释放SDA。我们把SDA置1就相当于释放,我们从机(AT24C02)是完全不会干预我们的这个通信线的。换言之我们的主机(单片机)释放掉SDA数据线把这个线的控制权交给从机(AT24C02),此时就是从机(AT24C02)拿到了控制权。
发送/接收(应答)
📑IIC它是带有数据应答的,所以当我们在发送一个字节之后需要接收应答。然后接收应答之后就需要发送应
SA发送应答→在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答。
RA接收应答→在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA=1)
I2C数据帧
向谁→由从机AT24C02地址规定的。
发→由字节上最后一位的地址来进行决定的。
什么→由S:BYTE x 规定的。
🤙发送一帧数据在协议上规定如下所示🤙
开始(起始条件) 发送从机(AT24C02)地址加写 接收应答 发送第一个字节数据 接收应答 发送第二个字节数据 接收应答 .....(直到第N个BYTE,然后接收应答) 结束(终止条件)
🍎注⇢整体和上述的发送一帧数据差不多知识改变了格式。
由 写 变成了 读。
由 发送 变成了 接收。
下面是复合格式数据帧。
🍎注→实际上就是发送一帧数据把(Stop)去掉再和接收一帧数据给进行的结合。
在上述就是AT20C02的读写功能。
字节写:在“字地址”处写入“数据”。
随机读:读出在“字地址”处的“数据”。