打印

IO口模拟IIC的讨论

[复制链接]
2277|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
醉心369|  楼主 | 2013-3-22 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 醉心369 于 2013-3-22 10:37 编辑


该图片是从下面依次向上看,以前没搞过这个,这次给弄反了,
买了本《嵌入式实时操作系统SmallRTOS51 原理及应用》这本书,有几个问题想请教大侠们。
关于基本IIC总线信号的产生。
1、关于启动信号,关于判断语句if(SDA==1),前面已经有SDA=1该语句了,此时SDA已经是1了,为什么还要判断呢,莫非有可能为0,如果为0 ,什么情况下回出现0;并且在该判断语句的大括号中,在SCL=0后还有SDA=1,SDA这条语句的作用是什么?
2、  关于中止信号,最后一条语句为什么是SCL=0,我认为空闲时两根线的电平都为高电平,故不需要SCL=0.
3、 向IIC发送一个字节,为什么同样也需要判断if(F0!=SDA),疑问如1。
     4 从IIC从器件接受一个字节,为什么首先要SDA=1

IIC6.PNG (370.53 KB )

IIC6.PNG

IIC5.PNG (401.97 KB )

IIC5.PNG

IIC4.PNG (235.91 KB )

IIC4.PNG

IIC3.PNG (387.03 KB )

IIC3.PNG

IIC2.PNG (500.96 KB )

IIC2.PNG

IIC1.PNG (375.6 KB )

IIC1.PNG

相关帖子

沙发
ayb_ice| | 2013-3-22 13:36 | 只看该作者
这就是仲裁,可能自己已经伦为从机了

使用特权

评论回复
板凳
liubin1109| | 2013-3-22 14:40 | 只看该作者
前面的SDA=1是写端口,像51单片机会有sbit SDA=Px^x;
if(SDA==1)就是读端口/判断端口是否为1啦,

使用特权

评论回复
地板
refee| | 2013-3-22 16:24 | 只看该作者
周立功的这个文档说得比较清楚,楼主不妨看一看……

互联IC总线_I2C.pdf

582.98 KB

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
ilikepanda007 + 1 赞一个!
5
醉心369|  楼主 | 2013-3-29 17:21 | 只看该作者
51MCU的IIC速率都是标准(100kbps)吗?

使用特权

评论回复
6
yhhsky| | 2013-3-29 19:20 | 只看该作者

使用特权

评论回复
7
yhhsky| | 2013-3-29 22:38 | 只看该作者

使用特权

评论回复
8
babyqym| | 2013-3-31 02:09 | 只看该作者
1. 51的准双向口,读之前,要先写1。看看端口的电路结构就知道了。
2.stop后应当设置为高,或者open。除非另有考虑。
3. 判断一下是明智的,如果从设备损坏,或者短路之类的,master可以返回一个错误的状态。
4.同1.

使用特权

评论回复
9
醉心369|  楼主 | 2013-4-2 11:12 | 只看该作者
babyqym 发表于 2013-3-31 02:09
1. 51的准双向口,读之前,要先写1。看看端口的电路结构就知道了。
2.stop后应当设置为高,或者open。除非 ...

第一个解答,我认为有些异议。
启动信号是向IO上写信号,没有读操作啊。

使用特权

评论回复
10
醉心369|  楼主 | 2013-4-2 13:06 | 只看该作者
字节格式(Byte format)
        SDA线上的每个字节必须为8位长。不限制每次传输的字节数。每个字节后面必须带有一个应答位。数据传输时MSB在前。当接收器不能接收另一个完整的字节时,它可以将时钟线SCL拉到低电平,以迫使发送器进入等待状态。当接收器释放时钟SCL时继续进行。

            对于这段话,什么情况下接收器不能接收另一个完整的字节?此时将时钟线SCL拉到低电平,发生在应答前还是应答后?

使用特权

评论回复
11
醉心369|  楼主 | 2013-4-3 15:11 | 只看该作者
本帖最后由 醉心369 于 2013-4-7 15:07 编辑
refee 发表于 2013-3-22 16:24
周立功的这个文档说得比较清楚,楼主不妨看一看……

字节格式(Byte format)
        SDA线上的每个字节必须为8位长。不限制每次传输的字节数。每个字节后面必须带有一个应答位。数据传输时MSB在前。当接收器不能接收另一个完整的字节时,它可以将时钟线SCL拉到低电平,以迫使发送器进入等待状态。当接收器释放时钟SCL时继续进行。
       对于这段话,什么情况下接收器不能接收另一个完整的字节?此时将时钟线SCL拉到低电平,发生在应答前还是应答后?

仲裁(Arbitration)
       只有在总线空闲时,主机才可以启动传输。在起始条件的最少保持时间内,两个或两个以上的主机都有可能产生起始条件。当SCL为高电平时在SDA上发生仲裁,在这种情况下发送高电平的主机(而另一个主机正在发送低电平)将关闭(switch off)其数据输出状态。
       可以在几个位上发生仲裁。仲裁的第一个阶段是比较地址位。如果两个主机都试图寻址相同的器件,则仲裁继续比较数据位。
        对于这段话,起始条件的最少保持时间内,是什么意思?如果起始条件不能进行仲裁,是否在相继的位上一直进行比较?并发生仲裁是否仅是在SCL=1时查看SDA的状态?仲裁是否仅发生在起始信号?

使用特权

评论回复
12
醉心369|  楼主 | 2013-4-7 15:09 | 只看该作者
ayb_ice 发表于 2013-3-22 13:36
这就是仲裁,可能自己已经伦为从机了

其他的疑问应该与仲裁有关,但是第一个问题的最后一问应该怎么解释:
在该判断语句的大括号中,在SCL=0后还有SDA=1,SDA这条语句的作用是什么?

使用特权

评论回复
13
ayb_ice| | 2013-4-9 09:44 | 只看该作者
醉心369 发表于 2013-4-7 15:09
其他的疑问应该与仲裁有关,但是第一个问题的最后一问应该怎么解释:
在该判断语句的大括号中,在SCL=0后 ...

SDA=1,将IO转换成输入状态

使用特权

评论回复
14
醉心369|  楼主 | 2013-4-10 13:07 | 只看该作者
ayb_ice 发表于 2013-4-9 09:44
SDA=1,将IO转换成输入状态

此时启动信号已经实现了,为什么要转换为输入状态?应该是输出状态。

使用特权

评论回复
15
ayb_ice| | 2013-4-11 07:58 | 只看该作者
搞清楚什么叫线与,弱上拉,准双向口,自然就明白了

使用特权

评论回复
16
醉心369|  楼主 | 2013-4-12 14:36 | 只看该作者
ayb_ice 发表于 2013-4-11 07:58
搞清楚什么叫线与,弱上拉,准双向口,自然就明白了

你说的这些,我都明白。
但是为什么要把它置为输入状态?
请问启动信号后,应该是输入还是输出状态?

使用特权

评论回复
17
xmlgyqq| | 2013-4-13 00:35 | 只看该作者
IIC介绍的还不是很全面

使用特权

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

本版积分规则

60

主题

283

帖子

2

粉丝