打印

关于i2c通信的问题

[复制链接]
1899|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大哥大姐们,想请教个问题。我看了i2c的通信协议,然后去看别人的程序,大部分内容结合协议都能理解,但有一个问题不懂,就是,我发现每传送一个数据都需给scl一个脉冲,先置1再置0,可这点好像在协议上并没有规定啊!能扯上关系的顶多也就是“SDA在SCL为高时必须保持不变,而在SCL为低时变化数据才有效”,可这也不能得出让SCL置1再置0的结论吧!

相关帖子

沙发
dqyubsh| | 2011-7-15 08:38 | 只看该作者
那你能得出什么结论,

这句话的意思是,当读取I2C数据时,在SCL的下降沿采集SDA线的数据(0或者1)。所以,要在SCL下降沿之前准备好SDA,并在SCL下降沿期间一直维持SDA不变。发送数据过程也是一样的。

找个I2C器件,看一下时序图。

使用特权

评论回复
板凳
dqyubsh| | 2011-7-15 08:47 | 只看该作者
我最近也在弄I2C,发现以下几个问题:
1,从设备是硬电路的I2C器件,如EEPROM,IO扩展芯片,这个过程比较顺畅,接几个器件都很容易。
2,从设备是处理器,如AVR的TWI,则通讯过程很繁琐,搞了一天还没搞定。(郁闷,不如用硬器件扩展了)
3,轻易不要试图模拟I2C,你的能力可能会遭遇巨大挑战。如果模拟I2C做通讯,那你估计要干N天。

使用特权

评论回复
地板
fubehyin| | 2011-7-15 09:12 | 只看该作者
那个是数据的起始标志。

i2c.jpg (23.99 KB )

i2c.jpg

使用特权

评论回复
5
万山21|  楼主 | 2011-7-15 09:27 | 只看该作者
是在SCL上升沿之前准备好SDA,并在SCL上升沿期间一直维持SDA不变吧?

使用特权

评论回复
6
万山21|  楼主 | 2011-7-15 09:29 | 只看该作者
是在SCL上升沿之前准备好SDA,并在SCL上升沿期间一直维持SDA不变吧?

使用特权

评论回复
7
fubehyin| | 2011-7-15 11:11 | 只看该作者
6# 万山21
所有带时序的数据不都这样么

使用特权

评论回复
8
Light_David| | 2011-7-16 01:27 | 只看该作者
不知道我有么有看懂楼主的问题,
SCL每次都要上跳下跳是因为同步时序(序列)啊,类似SPI的下降沿将数据锁存;
每跳一次代表传送一个位,如果不跳了只变SDA,那没意义了,
也就是说SCL是同步信号,I2C是同步通讯,每一位都要跟着SCL的信号电平进行
不像串口异步通讯可以不用SCL

使用特权

评论回复
9
万山21|  楼主 | 2011-7-16 18:16 | 只看该作者
诶~,八楼说的是那个意思!哈哈。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

267

帖子

1

粉丝