打印
[MCU]

请教简单快速理解I2C原理

[复制链接]
2697|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
guojihongwhpu1|  楼主 | 2016-8-4 11:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
28
清风致影| | 2016-8-8 08:49 | 只看该作者
搞得这么复杂  2根线  一根告诉对方我要发数据 发指令了  一根是告诉对方发什么数据指令  

使用特权

评论回复
27
guojihongwhpu1|  楼主 | 2016-8-7 20:41 | 只看该作者
Liang118038 发表于 2016-8-7 12:55
I2C其实蛮简单的,就两根线,一个数据一个时钟线(数据就按时钟线的时序发出就可以),反正由主机发起通讯 ...

好像是这样的,我今天去书城看书了 ,差不多是这样的

使用特权

评论回复
26
dirtwillfly| | 2016-8-7 17:02 | 只看该作者
guojihongwhpu1 发表于 2016-8-7 12:28
谢谢,我觉得直接用带I2C接口的比较好些

mcu带的iic模块,用起来和iic原理关系不大

使用特权

评论回复
25
Liang118038| | 2016-8-7 12:55 | 只看该作者
I2C其实蛮简单的,就两根线,一个数据一个时钟线(数据就按时钟线的时序发出就可以),反正由主机发起通讯,每次发送一个字(8位)+地址码,接收端自动核对地址,地址一致就处理数据,地址不一致直接忽略掉。接收完成后回复应答信号就可以了。具体时序看手册就行了.

使用特权

评论回复
24
guojihongwhpu1|  楼主 | 2016-8-7 12:28 | 只看该作者
changle11sdo5 发表于 2016-8-5 17:17
我都是用普通io口模拟I2C通信,一看代码就明白了

能发一个你觉得比较好理解的代码吗?谢谢

使用特权

评论回复
23
guojihongwhpu1|  楼主 | 2016-8-7 12:28 | 只看该作者
dirtwillfly 发表于 2016-8-5 17:32
弄清楚时序就好,不用懂原理

谢谢,我觉得直接用带I2C接口的比较好些

使用特权

评论回复
22
guojihongwhpu1|  楼主 | 2016-8-7 12:27 | 只看该作者
diweo 发表于 2016-8-5 20:58
如果是软件模拟的话就是独立控制,那么就是用2个GPIO口,一个作SCK,另一个作SDA。当SCK为低的时候,SDA可 ...

好的,谢谢,SCK为低,SDA可以变化是表示可以传送数据是不是?

使用特权

评论回复
21
diweo| | 2016-8-5 20:58 | 只看该作者
guojihongwhpu1 发表于 2016-8-5 11:45
请问下SCL和SDA有什么逻辑关吗?还是相互独立控制的?

如果是软件模拟的话就是独立控制,那么就是用2个GPIO口,一个作SCK,另一个作SDA。当SCK为低的时候,SDA可以变化,然后再置SCK为高。这个里面时间间隔是可长可短的。
严格来说,当SCK变低后,SDA要经过一段时间才能变,然后再经过一段时间SCK才能变高。还有一些别的约束关系。这就是时序。不过,一般来说都满足的,所以不用考虑太多。

硬件的话,设置好相应寄存器就行了,不用搞太清楚也能通起来。

使用特权

评论回复
20
dirtwillfly| | 2016-8-5 17:32 | 只看该作者
弄清楚时序就好,不用懂原理

使用特权

评论回复
19
changle11sdo5| | 2016-8-5 17:17 | 只看该作者
我都是用普通io口模拟I2C通信,一看代码就明白了

使用特权

评论回复
18
guojihongwhpu1|  楼主 | 2016-8-5 17:05 | 只看该作者
pywmiss 发表于 2016-8-5 16:37
大概知道原理就好 了。。细节不用管太多。。不然,你要知道的就太多了。。还有SPI,UART,....好多的
例程 ...

谢谢,你这样一说,我就轻松多了。。。

使用特权

评论回复
17
pywmiss| | 2016-8-5 16:37 | 只看该作者
guojihongwhpu1 发表于 2016-8-5 11:51
我也知道是那么个回事,两个器件要通讯,肯定要遵循一个规则,否则就乱套了,但是怎么个实现,我还是没有 ...

大概知道原理就好 了。。细节不用管太多。。不然,你要知道的就太多了。。还有SPI,UART,....好多的
例程下载一个试试。。。仿真学习一下就好了

使用特权

评论回复
16
guojihongwhpu1|  楼主 | 2016-8-5 11:51 | 只看该作者
pywmiss 发表于 2016-8-5 10:07
我也自己学的。。
大概是这样:
        一条线负责时钟信号,,,这条线。。。只管按照一定的时间频率。。 ...

我也知道是那么个回事,两个器件要通讯,肯定要遵循一个规则,否则就乱套了,但是怎么个实现,我还是没有十分明白

使用特权

评论回复
15
guojihongwhpu1|  楼主 | 2016-8-5 11:49 | 只看该作者
pywmiss 发表于 2016-8-5 10:07
我也自己学的。。
大概是这样:
        一条线负责时钟信号,,,这条线。。。只管按照一定的时间频率。。 ...

我现在自学PIC单片机,不知道多久能学会,别人说I2C都是最基本的,我连最基本都搞的一头雾水了,慢慢学吧

使用特权

评论回复
14
guojihongwhpu1|  楼主 | 2016-8-5 11:46 | 只看该作者
冰零分子 发表于 2016-8-5 11:22
软件模拟一遍估计就懂了

我看到有用普通I/O口模拟的代码,看的头晕,总感觉一头雾水的,好像明白了,但是又好像没有明白,所以还是不懂

使用特权

评论回复
13
guojihongwhpu1|  楼主 | 2016-8-5 11:45 | 只看该作者
diweo 发表于 2016-8-5 11:14
就2根线,一根时钟线SCL,一根数据线SDA.
SCL没什么,就是周期性的一高一低一高一低。。。。
那数据怎么传 ...

请问下SCL和SDA有什么逻辑关吗?还是相互独立控制的?

使用特权

评论回复
12
冰零分子| | 2016-8-5 11:22 | 只看该作者
软件模拟一遍估计就懂了

使用特权

评论回复
评论
autopccopy 2016-8-5 12:13 回复TA
非常赞同! 
11
diweo| | 2016-8-5 11:14 | 只看该作者
就2根线,一根时钟线SCL,一根数据线SDA.
SCL没什么,就是周期性的一高一低一高一低。。。。
那数据怎么传送呢?          规定:SCL为低的时候,允许SDA变化(就是根据需要,输出0或1),这样当SCL变高的时候就把SDA上的数据锁存了。
那SCL为高的时候,SDA可否变化呢?      可以,不过这时候SDA不表示0或者1了。而是2个特殊状态,从1变0表示起始位,从0变1表示结束位。

使用特权

评论回复
10
pywmiss| | 2016-8-5 10:07 | 只看该作者
本帖最后由 pywmiss 于 2016-8-5 10:12 编辑

我也自己学的。。
大概是这样:
        一条线负责时钟信号,,,这条线。。。只管按照一定的时间频率。。。输出高电平,低电平 。。像晶振
       另一条线负责数据信号,,,就是说如果要输出1==就是高电平,输出0==就是低电平
          这两个线高低电平变化也要有时机配合。。。。细节自己再看看哦。。。
就像楼上说的对密码。。这个密码你知道,我也知道 。。。那么我们都按这个方面互相发数据。。我们两人都知道了。。。。当然越多人知道这个密码就越多人能读懂。。。给这种传送方式起个名字吧。。就叫  I2C
然后很多单片机都用这个了。。。就很多单片机都用。。

使用特权

评论回复
9
zealy| | 2016-8-5 09:07 | 只看该作者
其实就是几个时序,找个带I2C的产品把读写时序用示波器抓一遍,然后对着协议去分析,比看再多的资料都有领悟的

使用特权

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

本版积分规则

72

主题

3397

帖子

17

粉丝