系统上电后,状态机处于 IDLE(初始状态);
接收到有效的单字节数据读/写开始信号i2c_start 后,状态机跳转到 START_1(起始状态);
FPGA 向 EEPROM 存储芯片发送起始信号,随后状态机跳转到 SEND_D_ADDR(发送器件地址状态);
在此状态下向 EEPROM 存 储芯片写入控制指令,控制指令高 7 位为器件地址,最低位为读写控制字,写入“0”,表 示执行写操作;控制指令写入完毕后,状态机跳转到 ACK_1(应答状态)。
在 ACK_1(应答状态)状态下,要根据存储地址字节数进行不同状态的跳转。
情况一:当 FPGA 接收到 EEPROM 回 传 的 应 答 信 号 且 存 储 地 址 字 节 为
2
字 节 , 状 态 机 跳 转 到SEND_B_ADDR_H(发送高字节地址状态);将存储地址的高 8 位写入 EEPROM,写入完成后,状态机跳转到 ACK_2(应答状态);FPGA 接收到应答信号后,状态机跳转到SEND_B_ADDR_L(发送低字节地址状态);
情况二:当 FPGA 接收到 EEPROM 回传的应答信号且存储地址字节为
单字节,状态机状态机直接跳转到 SEND_B_ADDR_L(发送低字节地址状态);在SEND_B_ADDR_L此状态低 8 位存储地址或单字节存储地址写入完成后,状态机跳转到 ACK_3(应答状态)。
在 ACK_3(应答状态)状态下,要根据读/写使能信号做不同的状态跳转。
情况一:当 FPGA 接收
到应答信号且
写使能