在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5894|回复: 20

[求助] 用fpga只做导线连接i2c 的双向端口怎么处理

[复制链接]
发表于 2020-9-18 13:07:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
问题描述:
现有一个i2c slave 和一个 pc i2c工具 master。 两个设备的线不好直接焊接线相连,想通过fpga i/o连接;
fpga top定义:

inout  scl_mater;
inout  sda_mater;

inout  scl_slave;
inout  sda_slave;


请问怎么连接才可以通讯正常呢?
有尝试过这样处理:
1.简单直接相连;
assign scl_mater = scl_slave;
assign scl_slave  = scl_mater;
assign sda_mater = sda_slave;
assign sda_slave  = sda_mater;


结果是通讯不了,识别不了I2C设备

2.后续做了三态处理,只传输0,1处理为高态,三态们oe 使用inout 的input 作为使能
结果是出现0的锁死,统一时间传输导致变化出现回环,直接异常


请问路过的大神有遇到过这样的需求吗?这用fpga转移端口位置应该很常见的需求,百度了也都是答非所问,谁有遇到过还请指点下经验,不胜感激,谢谢~
发表于 2020-9-18 13:57:26 | 显示全部楼层
有点难。何不在板子上飞线解决。

//-------------------- 跟sky学数字IC前端设计------------------------------//
Verilog只是语言,表达的是“思想”(硬件俗称Architecture)。
就像你懂汉语,但是你能写出李白/杜莆那种激情豪迈的诗吗,能写出朱自清的《背影》吗,或是能做个文章在报刊杂志发表吗?
IC设计也是一样。
但是语言能教,思想很难教授。但是可以带你领略,带你欣赏。下面的课,就是以此为目标:带你领略数字IC前端设计的风景。


———————————————————————————————
推荐两个电子科大06届师兄的数字设计入门课,可以跟着学。

https://ke.qq.com/course/2900266?tuin=64ce5e2a (数字IC/FOGA设计入门,1/2课免费。两期已累计服务超120位小伙伴)

https://ke.qq.com/course/package/24207?tuin=64ce5e2a (On-Chip-Bus精讲,ddr/cache行为,ahb的burst与hready,AXI的cmd outstanding, data out-of-order,bus效率分析与提高,efficiency与latency平衡 全覆盖)
 楼主| 发表于 2020-9-18 18:12:25 | 显示全部楼层


asic_service 发表于 2020-9-18 13:57
有点难。何不在板子上飞线解决。

//-------------------- 跟sky学数字IC前端设计------------------------ ...


我怀疑你是打广告的
发表于 2020-9-18 21:58:48 | 显示全部楼层


lotfy 发表于 2020-9-18 18:12
我怀疑你是打广告的


除开广告,对建议有何技术上的评论?
发表于 2020-9-19 14:28:50 | 显示全部楼层
用FPGA直接处理IO不行的,你得解析I2C的通讯数据。区分数据字节和应答位的方向,然后分别控制scl_mater/sda_mater以及scl_slave和sda_slave的输出OE方向。相当于你用FPGA做个I2C的中转模块。
 楼主| 发表于 2020-9-21 09:53:13 | 显示全部楼层


Mucar 发表于 2020-9-19 14:28
用FPGA直接处理IO不行的,你得解析I2C的通讯数据。区分数据字节和应答位的方向,然后分别控制scl_mater/sda ...


能指点下该怎么操作吗,怎么个逻辑,感谢感谢。
发表于 2020-9-21 11:59:55 | 显示全部楼层
首先解析Master的SR,ST,ADDR,DATA,ACK。在Master在SR/ST/ADDR时,Master的SDA/SCL都是输入,Slave的是输出,输出电平跟随Master的电平。ADDR的ACK,SLAVE输入/Master输出,输出电平跟随Slave的电平状态。data数据及ack,需要解析ADD后的RD/WRN状态,“写”时Master保持输入,Slave保持输出,写的ACK,方向相反。“读”时,Master输出,Slave输入,ACK方向相反。
发表于 2020-9-21 12:02:59 | 显示全部楼层
另外,需要注意FPGA的IO做开漏转换。就是输出0电平时IO保持输出,输出1或输入时都是输入状态。所有的1都是FPGA的片外上拉电阻产生。
发表于 2020-9-22 10:42:05 | 显示全部楼层
FPGA内部例化两个I2C的IP,一个作为slave接收PC端的master信号,另一个作为master连接其它外设,然后你在fpga内部再自己写个ctrl的逻辑把两个i2c ip桥接起来吧(可能还需要fifo模块暂存数据)。
如果嫌这个也麻烦,那就按前面的大神做法自己解析i2c协议
发表于 2020-9-22 10:53:19 | 显示全部楼层
仔细一想,越简单的需求有可能很麻烦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-18 18:30 , Processed in 0.023780 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表