I2C
**I2C 通讯协议(Inter-Integrated Circuit**)是由 Philips 公司开发的一种简单、双向二线制
同步串行总线, 只需要两根线即可在连接于总线上的器件之间传送信息。
I2C 通讯协议和通信接口在很多工程中有广泛的应用,如数据采集领域的串行 AD, 图
像处理领域的摄像头配置,工业控制领域的 X 射线管配置等等。除此之外,由于 I2C 协议
占用引脚特别少, 硬件实现简单, 可扩展型强, 现在被广泛地使用在系统内多个集成电路
(IC)间的通讯。

I2C总线可以进行多个主设备与多从设备通信!
- 串口时钟信号 SCL 和串行数据信号 SDA 均保持高电平,此时无 I2C 设备工作;
- I2C 总线处于“空闲状态”时, SCL依旧保持高电平时, SDA 出现由高电平转为低电平的下降沿,产生一个起始信号,此时与总线相连的所有 I2C设备在检测到起始信号后,均跳出空闲状态,等待控制字节的输入;
- 数据读/写状态;
- 完成数据读写后,串口时钟 SCL 保持高电平,当串口数据信号 SDA 产生一个由低电平转为高电平的上升沿时, 产生一个停止信号, I2C 总线跳转回“总线空闲状态”。
数据读/写状态
主机向从机每次只写入一位数据;串行数据线 SDA 中的数据在串行时钟SCL 为低电平时进行数据更新,以保证在 SCL 为高电平时采集到 SDA 数据的稳定状态。当一个完整字节的指令或数据传输完成,从机设备正确接收到指令或数据后,会通过拉低 SDA 为低电平,向主机设备发送单比特的应答信号,表示数据或指令写入成功。
**
注意:每个字节在写入数据的间隔为5ms。
**
I2C单字节数据操作
单字节存储地址:
双字节存储地址:
按高位在前低位在后的顺序写入单字节存储地址。
实验目标
使用写控制按键向 EEPROM 中写入数据 1-10 共 10 字节数据,使用读控制按键读出之前写入到 EEPROM 的数据,并将读出的数据在数码管上显示出来。EEPROM 型号为 24C64 存储容量为 64 Kbit(8Kbyte),需要 13位存储地址才可满足所有存储单元的寻址,存储地址为 2 字节。
EEPROM 地址位 A0、 A1 接高电平, A2 接地;EEPROM 地址为 7’b1010_011。
实验总体框图
I2C写入/读入数据 状态转化图
对比上面的单字节写入/读入操作图,可以转化为下图的状态机,了解这个过程,那么I2C就不难设计。
注意: EEPROM 读写操作的串行时钟 scl 的频率为 250KHz,且只在数据读写操作
时时钟信号才有效,其他时刻 scl 始终保持高电平。若直接使用系统时钟生成串行时钟
scl,计数器要设置较大的位宽,较为麻烦,所以先将系统时钟分频为频率较小的时
钟,在使用新分频的时钟来生成串行时钟 scl。
以上内容借鉴野火开发指南