i2c几率性出错

fu_ckmoon 2013-10-17 12:02:36
遇到一个问题,高手帮忙分析下。
pc机去读取我们板子的edid,通过i2c。
一般速率在30k以上i2c的,都可以读取到。
但是有一些显卡,我们看了波形,速率在20k左右(错误的时候是20k,正常通行可能在30k以上)。
有一些显卡就是无法读取edid,经常失败,有的时候也可以读到。
我们看波形,pc发送的地址是对的,板子给的ack也是0;发送的是读命令。但是第一个读的第一个数据的时候,ack是1,这个ack应该是pc反馈的额,因为是从板子读数据。
因为ack是1,所以重新start。
然后pc后面发的是竟然是写命令,然后也就是导致都读取不到edid。

求稳怎么解决,板子的i2c是硬件提供的slave机制。
...全文
2702 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicolaszuo 2014-07-15
  • 打赏
  • 举报
回复
不明白楼主的问题到底在哪里? PC做master,那么应该是板子返回ACK信号,根据I2C的协议,ACK=1才是有效响应。然后PC端发出读或写地址的命令。ACK=0,通讯根本无法进行下去。关于i2c速率的问题,时钟是由i2c master决定,如果高时钟无问题,那么低时钟也该无问题。楼主最好贴出时序图,才好分析。
fly 100% 2014-03-21
  • 打赏
  • 举报
回复
读操作是要先写地址进去然后stop的 这样pc可以锁住要读的地址 之后再发读的啊 我有个博客是写i2c协议的 里面由时序图 可以看看
travellers 2014-03-09
  • 打赏
  • 举报
回复
ACK是PC发的,所以应该是PC驱动有问题。
Wenxy1 2013-10-25
  • 打赏
  • 举报
回复
先排除干扰,用逻辑分析仪分析。
lyjgames 2013-10-18
  • 打赏
  • 举报
回复
按LZ这样说,应该是PC驱动的问题了
falloutmx 2013-10-17
  • 打赏
  • 举报
回复
你的意思是I2C速率太低的时候会出问题?读数据之前肯定要写地址啊,你的时序说得不明白,最好画出来。

1,025

社区成员

发帖
与我相关
我的任务
社区描述
Linux /Unix kernel支持不同的硬件体系,X86, ARM, MIPS, 等等
社区管理员
  • CPU和硬件区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧