上一篇介绍过了I2C的基本原理以及相关的函数,这一篇会介绍EEPROM来做为I2C实作的示範。
什么是EEPROM?
全名是电子抹除式可複写唯读记忆体,他是一种唯读记忆体(ROM)可以透过程式去多次的写入资料,同时断电后不会清出资料。如果需清除资料可以在特定电压下来清除资料,重新的写入。
这一次使用的是AT24C256B EEPROM,它的特点如下
接下来来看一下脚位如何连接:
时序
资料有效性 : 当SCL = 1时资料稳定 SDA不可更动 ; SCL = 0时资料混乱可进行资料交换

//I2C StartSDA = 1;delay();SCL = 1;delay();SDA = 0;delay();SCL = 0;delay();
//I2C StopSDA = 0;delay();SCL = 1;delay();SDA = 1;delay();
ACK : 下图可以看到当EEPROM在接收到完整8bit讯息后,会在第9个bit去输出ACK。
设备地址
上图是AT24C256B的设备地址,前面有提到前4bit是设备固定的地址无法更动。可以更动后方A2-A0来改变地址,最多可以接上8个。
R/W : 指的是Read / Write 会接续在地址后方,透过R/W bit 可以告知EEPROM这一次的指令是要读取还是写入资料。 ( R = 1 , W = 0)
如何对AT24C256B写入
Byte write : 一次只写入一个byte的资料量
上图为Byte Write的说明我们把它拆解成以下步骤 :先发送起始信号设备定址(1 0 1 0 A2 A1 A0 0),因为是写入所以最后的R/W会是0。输出一个ACK (这时Master可以去读取看看有没有ACK的回覆)接上第一个写入地址ACK第二个写入地址ACK要写入的资料ACK结束信号
这边先说明一下写入地址是什么?
上图可以看到AT24C256B的储存空间是分为512页且每一页有64Byte。
First word address : 可以把它理解成页数
Second word address : 可以把它理解成第几页当中的第几个字
根据上面说的 512页*64个字,而两地址总共为15bit。(0-511)(0-63)
2^9 = 512页 2^6 = 64个字所以在Second Word Address低6bit就是页内地址而其余的就是页数地址。
举例来说假如我们要写第3页的第2个位置就会是 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0
Page Write : 一次写入一整页的64bytes
上图为Page Write的说明我们把它拆解成以下步骤 :先发送起始信号设备定址(1 0 1 0 A2 A1 A0 0),因为是写入所以最后的R/W会是0。接上第一个写入地址ACK第二个写入地址ACK持续写入n资料(0≤n≤63),每一笔资料会接一个ACK停止信号
这边要注意假设原先这一页已有资料,后续超过的资料将覆盖到同页前面的资料并不会换页。
如何对AT24C256B读取
读取分为三种方式: 当前地址读取、随机地址读取、顺序读取
当前地址读取 : AT24C256B会保存上一次读or写的地址,透过这个方式会去读取n+1的位置。要注意假设是该页最后一个位置会翻转地址回到第一个地址。举例来说假设上次写入 0 page 1 word 那使用当前地址读取就会读到0 page 2 word的资料。

上方5个步骤是Dunny Write的拆解
再发送一次起始信号(开始当前位置读的步骤)设备地址(1 0 1 0 A2 A1 A0 1),因为读取所以最后的R/W会是1。ACK带回读取到的资料NACK结束信号连续读取 : 启动方式由随机地址读取与当前地址读取来启动,当每读到一笔资料回覆给EEPROM一个ACK,就可以持续读取资料。同样当读取到最后一笔时会把地址翻转回第一个。