搜索
bottom↓
回复: 15

I2C 可以通过FPGA再连接到芯片上吗?

[复制链接]

出0入0汤圆

发表于 2011-10-16 13:06:17 | 显示全部楼层 |阅读模式
一个比较菜的问题,简化了的逻辑如下:

    MCU的I2C的两条线SDA,SCL 线通过一片FPGA 连接到一个芯片上。FPGA可以完成这个功能吗?
    SCL 比较好办它是单向的,关键其中的SDA是双向的。

   请求帮助



Thx

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-10-16 17:57:48 | 显示全部楼层
FPGA IO 具有inout功能的 只要加上上拉电阻就可以了

出0入0汤圆

 楼主| 发表于 2011-10-16 18:49:13 | 显示全部楼层
回复【1楼】xtxdg
fpga io 具有inout功能的 只要加上上拉电阻就可以了
--------------------------------------------------------------------

请楼上给出verilog 的语句表述?先谢了

出0入0汤圆

发表于 2011-10-16 20:35:25 | 显示全部楼层
需要多一根控制线。
http://wenku.baidu.com/view/80a492d233d4b14e85246829.html

出0入0汤圆

发表于 2011-10-16 20:41:54 | 显示全部楼层
用双向口就行,自己建一个带使能的双向口module。
module iopad(pad,en,a,y);

input a,en;
inout pad;
output y;

bufif1(pad,a,en);
buf(y,pad);
endmodule

出0入0汤圆

发表于 2011-10-16 21:54:22 | 显示全部楼层
I2C的协议不是双向传输这么简单吧,仔细看看芯片手册,又没有特殊要求;

出0入0汤圆

发表于 2011-10-16 22:40:10 | 显示全部楼层
需要控制传输方向的,sda输入时,sda引脚对应的输出buf要设为高阻

出0入0汤圆

发表于 2011-10-16 22:58:23 | 显示全部楼层
呵呵,标准iic的scl可不是单向的,你要好好看iic的协议了,scl可以被从机忙时拉低以便通知主机,那怎么通知呢,主机不读能行么
,你不要把他想复杂了,输出的同时,也读一下电平就行了;标准协议里根据电平要处理的事情还很多呢,尤其是抢线仲裁机制。当然 如果你的mcu任何时候只是作为主机,那就相对简单一些。

出0入0汤圆

 楼主| 发表于 2011-10-17 15:40:14 | 显示全部楼层
感谢楼上各位的指导,但是感觉还是没能彻底的解决

1. I2C 通信的时候是不具备一条专门的方向控制线的,因此这条路不通。
2. 事实上就是需要在FPGA的两个引脚之间构造一个直通的导线,这个可以实现吗?
3, 或者说FPGA可以实现类似于模拟开关得功能吗?

   网上浏览了一下,还未发现I2C 通过FPGA的好办法。
   之前咨询过Altera的FAE , 据他说不可以实现。

出0入0汤圆

发表于 2011-10-17 16:25:15 | 显示全部楼层
给楼主一个建议吧,在FPGA内做一个模块,让该模块监听SCL/SDA并解析I2C协议,在需要改变端口方向的时候改变方向,需要输出高阻的时候输出高阻;我做的一个多SPI设备的控制器就是这么做的。
还有一个问题,FPGA是无法检测高阻态的;

出0入0汤圆

发表于 2011-10-19 13:48:45 | 显示全部楼层
可以负责任的告诉你,是可以实现的,我们就有I2C总线切换器,用fpga实现的

出0入0汤圆

发表于 2011-10-21 23:52:36 | 显示全部楼层
完全可以。

出0入0汤圆

发表于 2011-10-22 00:59:07 | 显示全部楼层
应该可以实现的,FPGA只要分别监测两端端口的电平变化,将电平变化反应到另一端口上去就可以了。你可以试试用两组tri门,in接低电平,en过一个not一端,out接另一端,scl和sda都这么处理,这样就可以分别监测两端电平变化。需要注意的是FPGA输出只能输出低电平和高阻,不能直接输出高电平。

出0入0汤圆

发表于 2011-10-22 01:04:03 | 显示全部楼层
大概是这样:

scl_a    ----not ----tri_en
gnd      ------------tri_in
scl_b    ------------tri_out

scl_b    ----not ----tri_en
gnd      ------------tri_in
scl_a    ------------tri_out

sda_a    ----not ----tri_en
gnd      ------------tri_in
sda_b    ------------tri_out

sda_b    ----not ----tri_en
gnd      ------------tri_in
sda_a    ------------tri_out

我没有试过,你可以试一下看行不行:)

出0入0汤圆

发表于 2011-10-22 14:25:56 | 显示全部楼层
虽然没这样做过,不过肯定可以实现。
想问楼主这样做有什么意义吗?

出0入0汤圆

发表于 2011-10-23 07:05:18 | 显示全部楼层
是要分析iic,还是要做iic的一个设备,如果是做iic上的一个设备的话就好办了,如果是要分析iic,接上iic两根线上分析就好了,为什么要你这么做呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 13:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表