微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于iic主机接收应答信号的疑问

关于iic主机接收应答信号的疑问

时间:10-02 整理:3721RD 点击:
1.iic总线是通过oc门实现的,如果用FPGA实现,怎么综合出oc门?
2.好多资料都通过三态门接上iic总线,FPGA开发板的有些外设通过iic连接,需要FPGA作为主机,那么问题来了,三态门的选通信号不能控制已经连接上的这些外设,就有可能出现控制权冲突的情况,怎么处理?
3.关键问题,主机接收应答信号。不太明白的是FPGA怎么驱动数据线sda,如果PFGA不能综合出oc门,那么应该在FPGA引脚上直接焊接有oc门,FPGA直接连接的是控制oc门是否接地的开关,接收应答信号时开关断开(高阻态),但是接收应答信号应该是直接检测sda信号而不是开关信号,但是这个信号此时又不在FPGA内部,哎,不知道问题讲清楚没,,,求赐教啊求赐教,真心不明白,,

SDA外接上拉电阻;ACK的时候,SLAVE输出0,将SDA拉低;



   

上图是FPGA的Schematic,右边红色框中为上拉电阻,右边红色框右边的是IIC接口的DVI控制芯片……
但是,左边红色框的是什么鬼?

NDS331N
N-Channel Logic Level Enhancement Mode Field Effect Transistor
上图中,I2C总线上挂的NDS331N做电平转换,DVI_GPIO的为GPIO1控制的开漏输出!
1、用三态门实现!sda = sda_en ? 1'bZ : 1'b0; sda_in = sda;
2、不清楚你描述什么,只要你完全按照I2C总线协议设计应该就不会冲突,否则啥情况都有!
3、OC门只输出0,输出1需要外接上拉电阻!这是你自己就应该想明白的吧!


谢谢你的回复,问题解决了。我的错误在于:需要输出0的时候我输出的是0(正确)
需要输出1的时候我输出的是1(错误,这个时候应该输出Z!用三态门实现OC门时,忽略了OC门固有的特性)
需要释放总线接收slave应答信号的时候我输出的是Z(正确)

所以庆幸的是没有烧坏芯片,在需要输出1的时候我输出高电平,此时上拉电阻上接的也是高电平,相当于将两个电平可能不一样的电源的正极接在一起,好可怕,,,,
再次谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top