串行E2PROM是可在线电擦除和电写入的存储器,具有体积小、接口简单、数据保存可靠、可在线改写、功耗低等特点,而且为低电压写入,在单片机系统中应用十分普遍。
串行E2PROM按总线形式分为三种,即I2C总线、Microwire总线及SPI总线三种。
一、I2C总线型 I2C总线,是INTER INTEGRATED CIRCUIT BUS的缩写,即“内部集成电路总线”。I2C总线采用时钟(SCL)和数据(SDA)两根线进行数据传输。
1 引脚
SDA是串行数据脚。该脚为双向脚,漏极开路,用于地址、数据的输入和数据的输出,使用时需加上拉电阻。
SCL是时钟脚。该脚为器件数据传输的同步时钟信号。
SDA和SCL脚均为施密特触发输入,并有滤波电路,可有效抑制噪声尖峰信号,保证在总线噪声严重时器件仍能正常工作。
在单片机系统中,总线受单片机控制。单片机产生串行时钟(SCL),控制总线的存取,发送STRAT和STOP信号。
2 总线协议
仅当总线不忙(数据和时钟均保持高电平)时方能启动数据传输。
在数据传输期间,时钟(SCL)为高电平时数据(SDA)必须保持不变。在SCL为高电平时数据线(SDA)从高电平跳变到低电平,为开始数据传输(START)的条件,开始数据传输条件后所有的命令有效;SCL为高电平时,数据(SDA)从低电平跳变到高电平,为停止数据传输(STOP)的条件,停止数据传输条件后所有的操作结束。
开始数据传输START后、停止数据传输STOP前,SCL高电平期间,SDA上为有效数据。
字节写入时,每写完一个字节,送一位传送结束信号ACK,直至STOP;读出时,每读完一个字节,送一位传送结束信号ACK,但STOP前一位结束时不送ACK信号。
3 器件寻址
START后,单片机发送一个控制字,该控制字包括Start位(S)、受控地址7位,读写(R/W)选择位(“1”为读,“0”为写)及传送结束位ACK。
4 写操作
单片机送出开始信号后,接着送器件码(7位)、R/W位(“0”),表示ACK位后面为待写入数据字节的字地址和待写入数据字节,然后结束一个字节的写入。即S+写控制字(R/W位为“0”)+ACK(“0”)+字地址+ACK(“0”)+写入数据+ACK(“0”)+STOP。
5 读操作
读操作有三种,读当前地址的内容、读指定地址的内容、读指定起始地址后的若干字节的内容。 读当前地址的内容为:S+读控制字(R/W位为“1”)+ACK+读出数据+no ACK+STOP 读指定地址的内容为:S+写控制字(R/W位为“0”)+ACK+写入数据+ACK+读控制字(R/W位为“1”)+ACK+读出数据+no ACK+STOP 读指定起始地址后的若干字节的内容为:S+写控制字(R/W位为“0”)+ACK+写入数据+ACK+读控制字(R/W位为“1”)+ACK+读出数据(1)+ACK+……+读出数据(n+x)+noACK+STOP 24XX系列串行E2PROM存储芯片与单片机硬件接口只有SCL和SDA两根线,非常简单
二、Microwire总线型 Microwire总线采用时钟(CLK)、数据输入(DI)、数据输出(DO)三根线进行数据传输,接口简单。Microchip公司的93XXX系列串行E2PROM存储容量从1k bit(×8/×16)至16k bit(×8/×16),采用Microwire总线结构。产品采用先进的CMOS技术,是理想的低功耗非易失性存储器器件。
1 引脚
93XX系列串行E2PROM的产品很多,附图是93AA46型1k 1.8V Microwire总线串行E2PROM的引脚图。 CS是片选输入,高电平有效。CS端低电平,93AA46为休眠状态。但若在一个编程周期启动后,CS由高变低,93AA46将在该编程周期完成后立即进入休眠状态。在连续指令与连续指令之间,CS必须有不小于250ns(TCSL)的低电平保持时间,使之复位(RESET),芯片在CS为低电平期间,保持复位状态。 CLK是同步时钟输入,数据读写与CLK上升沿同步。对于自动定时写周期不需要CLK信号。 DI是串行数据输入,接受来自单片机的命令、地址和数据。 DO是串行数据输出,在DO端需加上拉电阻。 ORG是数据结构选择输入,当ORG为高电平时选×16结构,ORG为低电平时选×8结构。
2 工作模式 根据单片机的不同命令,93AA46有7种不同的工作模式,附表给出在ORG=1(×16结构)时的命令集(表中“S”为Start位)。ORG=0(×8结构),除在地址前加A6位或在地址后加一位“X”外,其余与附表相同。
三、 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
(1)SDO – 主设备数据输出,从设备数据输入
(2)SDI – 主设备数据输入,从设备数据输出
(3)SCLK – 时钟信号,由主设备产生
(4)CS – 从设备使能信号,由主设备控制
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
AT91RM9200的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO 是主机的输入,从机的输出。/SS是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。SPI总线可以配置成单主单从,单主多从,互为主从。
SPI的片选可以扩充选择16个外设,这时PCS输出=NPCS,说NPCS0~3接4-16译码器,这个译码器是需要外接4-16译码器,译码器的输入为NPCS0~3,输出用于16个外设的选择。
SPI协议举例
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。I2C总线 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。