二线制I2C CMOS串行EEPROM是一种采用CMOS工艺制成的串行可用电擦除可编程随机读写存储器。
1、I2C总线特征介绍
I2C(Inter Integrated Circuit)双向二进制总线,简而言之就是有两根线。一根是数据线(sda),另一根是时钟线(scl)。
- scl,是输入端口
-
sda,是输出/输出的双向端口
I2C总线协议定义为:只有在总线处于“非忙”状态时,数据传输才能开始。数据传输期间,只要时钟线为高电平,数据线都必须保持稳定,否则数据线上任何变化都被当做“启动”或者“停止”信号。下图描述I2C双向二进制串行总线的协议波形图。
I2C双向二进制串行总线.png - A:总线非忙状态,数据线(sda)和时钟线(scl)都保持高电平。
- B:启动状态,数据线(sda)下降沿并且时钟线(scl)处于高电平。只有“启动信号”发出以后,其他的命令才有效。
- C:写状态,可以对数据线(sda)进行数据的写入修改,数据线(sda)可以变化并且时钟线(scl)处于低电平状态。
- D:读状态,数据线(sda)的数据不能改变,数据线(sda)不变并且时钟线(scl)处于高电平状态。
-
E:停止状态,数据线(sda)上升沿并且时钟线(scl)处于高电平状态。
注意:
1、每一个数据的传输都会开始于“启动信号”,结束于“停止信号”。
2、每个正在接收数据的EEPROM在接收到一个字节的数据后,通常需要发出一个应答信号,而每个正在发送数据的EEPROM在发出一个字节的数据后,通常要接收一个应答信号。
3、所谓的应答信号是将数据线拉低,也就是低电平信号,非应答信号就是高电平信号。
4、在读操作中,结束时发送非应答信号,然后发送通知信号。
1.1 EEPROM的写入和读出方式
串行EEPROM一般具有两种写入方式:一种是字节写入方式;一种是页写入方式。允许在一个写周期内对一个字节到一页的若干个字节进行编程写入。
为了程序的简单起见,我们这里只讨论串行EEPROM的一个字节的写入和读出方式。
1.2 写操作
EEPROM的写操作(字节编程方式):通过读写控制器把一个字节数据发送到EEPROM中指定地址的存储单元。过程如下:EEPROM读写控制器发出启动信号,紧跟着是8位的控制字,然后接收到一个应答信号,接着是EEPROM存储单元的地址,然后接收到一个应答信号,接着是要写入的8位数据,然后接收到一个应答信号,便产生停止信号。
字节写入帧格式.png 8bit的控制字.png
在这里我还是想再次强调一下,sda上的应答信号有效时是低电平,非应答信号是高电平。sda是双向的,在进行数据的写入时,应答信号是接收到的,是输入信号;在进行控制字、地址和数据的写入时,是输出信号。深入理解sda上的数据是怎样来的是十分重要的,必须要彻底理清自己的思路才能着手写代码,要不然会十分混乱!
1.3 读操作
EEPROM的读操作:通过读写控制器读取EEPROM中指定地址的存储单元中的一个字节数据。串行EEPROM的读操作分为两步进行,读写控制器发送一个启动信号,紧接着是控制字,然后接收到一个应答信号,接着是EEPROM存储单元指定地址,然后接收到一个应答信号,再接着发送一个启动信号,紧接着是控制字,接收应答信号,读出数据,接收非应答信号,最后发出停止信号。
这里要强调一下,在读操作进行时,在读出数据时,sda是输出端口并且接收一个非应答信号。
小结:充分了解I2C总线协议是很必要的,特别是对sda这个双向端口,何时是输出端何时是输入端更是对设计有着重要的影响。把握住全局,理清设计思路才能写出优秀的代码。下面,我们就EEPROM 的Verilog HDL程序进行一个专题的系列介绍。参照了夏宇闻老师的《Verilog 数字系统设计教程》。
网友评论