[CPLD] CPLD实现I2C透传

[复制链接]
 楼主| jiangtao123 发表于 2017-5-28 14:10 | 显示全部楼层 |阅读模式
CPLD/FPGA实现I2C的透传,使用三态门,那么SDA的方向应向该如何确定?
assign SCL_OUT = SCL_IN;

wire mid;
assign mid = dir?1'bz:SDA_IN;  //dir为0的时候,SDA_IN
wire mid1;
assign mid1 = dir?SDA_OUT:1'bz;  //为1的时候,SDA_OUT

assign SDA_IN = mid1;
assign SDA_OUT = mid;


那个dir如何确定呢?
ar_dong 发表于 2017-5-30 10:24 | 显示全部楼层
方法1,监听i2c通讯,这样你就知道什么时候是输入,什么时候是输出
ar_dong 发表于 2017-5-30 10:31 | 显示全部楼层
方法2,i2c只输出0,不输出1,1由外部上拉电阻实现
两面都作为输入,
当哪面先接到0时,对面做输出0
收到0的那一端收到了1时,两面都恢复为输入
延时一段时间再进行判断
linqing171 发表于 2017-6-2 12:58 | 显示全部楼层
第一种方法的成帧,解析frame的前提是master完全按照协议来,而且不考虑复杂的情况。这个不建议用。
然后第二种方法,收发转换的时候,源端输出0,目的端也输出0,源端撤销了,目的端的0仍然在,然后才开始转发目的端到源端。因为中间必须流出300ns左右的时间,所以这个转发的时间会变长。
OverMountain 发表于 2017-6-11 13:06 | 显示全部楼层
宝挖小子 发表于 2019-11-6 23:00 | 显示全部楼层
同问,楼主详细的FPGA代码能贴一下吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部