目录

  • 1.24c04芯片手册解读
  • 2.纯verilog的i2c驱动
  • 3.24c04读写状态机设计
  • 4.上板调试验证
  • 5.福利:工程源码获取

1.24c04芯片手册解读

24c04芯片手册很简单,原理图设计页很简单,这里只说代码设计需要注意的点:
1、写操作延时周期大于等于2ms,如下:

这个其实也很好理解,这毕竟是写一次数据就可以保存200年的东西,你写操作难道不应该多花点时间让期间“固化”完毕吗?
具体在代码层面如何体现呢?
那就是写完一次数据后要求等待至少2ms后才能发起下一次写操作,本设计采用延时4ms的稳妥方案;
2、器件地址,如下:

常规操作,3个地址引脚的电平决定器件地址,我的板子原理图如下:

所以器件地址就是7’b1010000;也就是0xa0;
3、穿行时钟,如下:

100k到400k,用100k最保险,宜小不宜大;本设计也是用的100k;

2.纯verilog的i2c驱动

详细代码不在这里给出,因为粘贴出来会很长,影响阅读体验,私我可得源码慢慢欣赏;
下面给出i2c驱动的顶层接口说明:

rst //高电平复位clk //输入系统时钟clk_div_cnt //i2c_scl分配系数:clk_div_cnt=clk/(5*i2c_scl)-1scl_pad_i // SCL-line inputscl_pad_o // SCL-line output (always 1'b0)scl_padoen_o // SCL-line output enable (active low) sda_pad_i // SDA-line inputsda_pad_o // SDA-line output (always 1'b0)sda_padoen_o // SDA-line output enable (active low)i2c_addr_2byte // 地址位宽选择:1-->16bit " />
再抓读地址为100时的波形,此时读数据也应该是100才对,抓取结果如下:

可以看到,当读反馈信号i2c_read_req_ack为高时,地址为100,读数据也为100;
我们的读写完全正确。。。

5.福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料如下:获取方式:私。