每一个CAT24Cxx 都包括一个上电复位电路,用来保护内部逻辑,防止上电的时候出现错误的状态。
一个CAT24CXX设备上电之后进入到Standby模式,当VCC低于POR的触发值时进入Reset模式。这个双向的POR特性保护了设备防止欠压。
Pin Description
SCL: 串行时钟输出引脚,接受Master产生的串行时钟。
SDA:串行数据I/O引脚,接受输入数据和输出EEPROM中的数据。在输出模式,这个引脚是开漏的。数据在上升沿读入,在下降沿输出。对于Master来讲就是在SCL的上升沿数据输出给Slave,在SCL的下降沿数据从Slave读入。
A0,A1,A2:地址输入设置引脚。当挂载多个设备的时候通过配置这三个引脚将Slave地址避免重复。默认情况下这些引脚内部拉低。
Functional Description
CAT24Cxx支持IIC总线数据传输协议,IIC定义了一个设备发送数据到总线,作为一个发送者;一个设备接受数据,作为一个接收者。数据流由Master控制,Master负责产生SCL时钟信号和所有的START、STOP状态。CAT24Cxx是一个Slave设备。在传输过程中Master和Slave交替作为发送者和传输者。
IIC Bus Protocol
IIC总线由两条线组成,SCL和SDA。这两条线通过上拉电阻接到VCC上。Master和Slave设备通过他们的SCL/SDA引脚连接到这两根线上。传输设备拉低SDA到0来传输一个0,释放SDA来传输一个1.
输出传输只能在总线不忙的情况下启动。
在数据传输过程中,SDA在SCL为高的情况下必须保持不动。一个SDA的电平变化在SCL为高的时候,将会导致一个START或者STOP状态产生。START状态处理所有的命令。它由一个下降沿来唤醒所有的接收者。缺少了START,Slave将不会响应命令。STOP状态用来结束所有命令。它是在SCL为高的时候产生一个上升沿。
Device Addressing
Master通过产生一个START状态来启动传输。之后Master广播一个8位串行Slave地址,对于普通的R/W操作,前四位地址固定为1010(Ah)。接下来的三位是可编程的,用来防止跟别的器件冲突。最后一位地址用来表示R/W,1表示R,0表示W。
Acknowledge
在处理完Slave地址之后,Slave用一个ACK来响应,就是在第九个时钟周期的时候将SDA拉低。Slave在写模式下将会响应地址和每一个数据字节。在读模式下,Slave移出一个数据字节,然后Slave在第九个时钟周期释放SDA。等着Master发送ACK,然后Slave将继续进行传输。Master通过产生一个NOACK和STOP状态来结束会话。
Byte Write
在Byte Write模式下。
Master发送一个START状态,然后是Slave的address,跟着是一位R/W标志。R/W应该为0,表示写操作。
然后等待Slave产生一个ACK信号。
然后Master发送byte的address,表示要写入的地址。
然后等待Slave产生一个ACK信号。
然后Master发送数据byte,将被写到上一个address表示的地址中。
然后等待Slave产生一个ACK信号。
然后Master产生一个STOP状态。
然后Slave开始把数据写到非易失性存储器中。
这部分需要一些时间,当这部分处理完,SDA输出将会是三态,并且CAT24CXX将不会响应任何来自Master的请求。
Page Write
CAT24CXX一个写周期能够写16bytes的数据,使用页写操作。页写操作用同样的方式启动,但是在数据byte传输完之后不结束,允许Master继续传送15个额外的bytes。在每个byte传输完CAT24CXX都会响应一个ACK,然后内部增加地址的低四位。最高位定义了页地址仍然未改变。如果Master传输多于16个bytes,那么地址将回滚,刚开始写的数据将被覆盖。一旦所有的十六个bytes接收到了,并且STOP状态由Master发送了,Slave内部的写循环开始。
这时,所有的数据都在单个写周期内写入。
Acknowledge Polling
应答轮询
ACK轮询机制能够用来在典型的写周期时间中提供优势。
一旦STOP状态发出来表示主机的写操作结束,CAT24CXX启动内部写循环。
ACK轮询可以被马上启动。
这涉及到发送START状态,由slave地址跟随的,为了写操作。
如果CAT24CXX仍然忙于写操作,NOACK将会返回。
如果CAT24CXX已经完成了内部写操作,ACK将会返回,并且主机可以进行下一个读或者写操作。
Hardware Write Protection
硬件写操作
WP引脚为高的时候,整个的内存都被执行写保护。
如果WP悬空或者接地,它就不会影响对CAT24CX的操作。
WP的状态被选通在SCL的下降沿,第一个数据byte的最后一个时钟。
如果WP在选通时间内为高,写的数据就会被忽略掉。
Delivery State
运输状态
CAT24CXX is shipped erased. 所有的字节都是FFh。
总结一下写操作。
写操作有两种模式,但是流程是一样的。
START----SLAVE ADDR----W bit----ACK----WRITE ADDR----ACK----DATA----ACK----STOP/or WRITE ADDR
就是先写一个从机地址,再写一个数据要存放的数据地址,然后发送数据,数据可以发送一个字节就结束,也可以最多发送16个字节再结束。16个字节之后不结束写的数据地址将会回滚,覆盖数据。
因此写的操作在多个写的情况下只需要连续发送然后再STOP就可以了。
Immediate Read
立即读取
在接收到Slave地址上的R/W标志为‘1’时,表示这是一个读操作。
CAT24CXX将会将其解释为请求当前byte地址的数据。
CAT24CXX将会知道Slave地址,将会马上位移出数据在当前的地址。
并且将会等待Master响应。
如果Master不回ACK,(就是回NOACK),并且用STOP结束。
CAT24CXX将返回standby模式。
Selective Read
有选择的读取
选择读取操作允许Master设备选择一个随机的内存地址进行一个读操作。
Master首先进行一个'dummy'写操作通过发送一个START状态,slave地址和byte地址,这个地址是它希望读取的地址。在CAT24CXX响应了byte地址之后。
Master重新发送START状态和slave地址,这次R/W位置一,表示读操作。
然后CAT24CXX响应,并且发送数据byte。
Master不响应(NOACK)并产生一个STOP状态。
Sequential Read
顺序读取
如果在读过程中Master回了ACK,那么CAT24CXX将会继续传输数据在当前的地址,直到Master用NOACK响应,跟着一个STOP。
与页写模式相反,在顺序读的情况下地址会自动增长,在内存结束的地方回滚(而不是页面结束的地址).
对于CAT24C01,内部地址计数将不会回滚,在128byte内存空间结束的地方。
总结一下读操作
读操作有三种,读取当前Slave内部地址的数据;读取指定的Slave内部地址的数据,连续读取指定Slave内部地址的多个数据。
对于第一种情况,直接发送读命令就是SLAVE ADDR+R bit然后在总线上读8bit数据就可以了。
对于后两种情况要有一个指定Slave内部数据内存地址的步骤。这个步骤是通过一个'假写'来完成的。
先进行一个写操作,写一个Slave地址再写一个你想要读取的数据的地址,然后等回应ACK了之后就重启总线,进行读操作。读一个还是连续读,取决于读完一个字节的数据之后Master发的是NOACK还是ACK,发ACK表示还要继续读。读数据会把Slave内部的FLASH读完之后再回滚。
这里说白了,第一个写地址的动作类似于文件操作里面的lseek,改变Slvae内部的Flash的指向的指针。当然一般默认都是从开头开始的。