admin 发表于 2019-6-1 21:11:56

【个人笔记】I2C调试心得

对于I2C总线,总线上所有的高电平应该是由上拉电阻上拉达到效果的,而非由主机主动输出高电平实现,所以对于I2C总线上的所有器件的SCLK和SDA,都应该避免之计输出高电平和低电平。

下述这种写法是错误的,i2c_sdat不应该有输出高电平的时刻。
      assign i2c_sdat = i2c_sdat_oe?i2c_sdat_o:1'bz;

应该改为:
      assign i2c_sdat = (i2c_sdat_oe && !i2c_sdat_o):1'b0:1'bz;


同理,i2c_sclk也不应该直接输出高电平,应该由上拉电阻实现,也需要将其设置为inout模式。

挣钱买刀 发表于 2019-6-1 21:41:27

功能:
1、支持多字节地址器件
2、支持读写多字节数据
基于书本代码改进后的I2C代码
1、代码上进行了优化,去掉了halfbit_cnt等
2、对sda信号修改,只输出0,不直接输出1,靠上拉为1
3、仿真支持挂在多设备,不同地址长度的设备可挂在一个总线上
4、原模型24LC04B有问题,缺少器件地址的校对,对比24LC64发现的,已更改
页: [1]
查看完整版本: 【个人笔记】I2C调试心得