Write by Gianttank 我实验的是 AT24C08 的单字节读,单字节写,页读和页写,在高于 3
3V 系统中他的通信速率最高 400KHZ 的,我实验里用的是 100KHZ 的速率
图 1 是硬件原理图 图 1 图 2 图 2 是器件地址,我的原理图是 A2 接高
IIC 通信协议中要注意的地方: 1
当时钟线 SCL 高电平常,假如把数据线 SDA 从高电平拉到低电平,则表达通信开始(START);假如把数据线 SDA 从低电平拉到高电平,则表达通信结束(STOP)
SDA 数据不变,视为数据采样
前一个 STOP 结束后
与下一个 START 开始要保证 5ms 的间隔
页写有字节限制,而页读没有,可以一次读出所有的数据
SDA 信号在 FPGA 为接受方时要设立为高阻态
应答信号永远是接受方发送的,这个很重要,我就是卡在这里几天没找到因素
FPGA 在读数据的时候,第 9 个周期是 FPGA 发低电平给 EEPROM的
图 3 为 RTL 视图 图 3 引脚定义 信号名称方向描述clkinput50M 的主时钟rst_ninput复位信号sw1input按键 1 低电平有效 按下执行字节写sw2input按键 2 低电平有效 按下执行字节读sw3input按键 3 低电平有效 按下执行页写sw4input按键 4 低电平有效 按下执行页写SDAinoutIIC 数据端口SCLoutputIIC 时钟端口leddataoutput数码管段选ledcomoutput数码管位选代码中分了两个模块,iic_com 模块除了执行和 I2C 通信有关的代码设计外,尚有按键检测部分,而 ledshow 模块只是驱动数码管显示读出的数据
对于这个通信的过程,内部使用了一段式状态机进行设计
图 4 是状态机的状态图
具体每个状态见程