OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5351|回复: 12

关于IIC停止信号的疑问

[复制链接]

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
发表于 2016-11-3 16:53:25 | 显示全部楼层 |阅读模式
5金钱
之前有一个相同的帖子,但是已经结贴了,我还是有疑问,所以我才再次发帖~~~~

我感觉正确的应该是下面这样
[mw_shl_code=c,true]//产生IIC停止信号
void IIC_Stop(void)
{
    SDA_OUT();
    IIC_SCL=0;
    IIC_SDA=0;
    delay_us(4);
    IIC_SCL=1;
    delay_us(4);
    IIC_SDA=1;                        
}[/mw_shl_code]
下面是例程里的,我测试过也是正常的,但我觉得这个时序是有问题的啊,求大神解答
[mw_shl_code=c,true]void IIC_Stop(void)
{
    SDA_OUT();
    IIC_SCL=0;
    IIC_SDA=0;
    delay_us(4);
    IIC_SCL=1;
    IIC_SDA=1;
    delay_us(4);                              
}[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

严格按时序分析不对,但是两个电平拉高以后就是停止呀!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2016-11-3 16:53:26 | 显示全部楼层
严格按时序分析不对,但是两个电平拉高以后就是停止呀!
回复

使用道具 举报

24

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2015-11-4
在线时间
124 小时
发表于 2016-11-3 17:32:57 | 显示全部楼层
两个时序试跑多几次,看看有没什么不一样的问题出现,或者直接抓波形来看
回复

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
 楼主| 发表于 2016-11-4 09:02:24 | 显示全部楼层
小卿 发表于 2016-11-3 17:32
两个时序试跑多几次,看看有没什么不一样的问题出现,或者直接抓波形来看

身边现在没有示波器~在板子上跑过了,没发现问题
回复

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
 楼主| 发表于 2016-11-5 14:32:06 | 显示全部楼层
我发现原子哥的例程里面停止信号去掉也可以正常运行,而且datasheet里面也写了停止准备时间最少是0.6μs
QQ截图20161105140421.png
QQ截图20161105140501.png
回复

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2016-11-5 14:55:40 | 显示全部楼层
footprint 发表于 2016-11-5 14:49
严格按时序分析不对,但是两个电平拉高以后就是停止呀!

你不妨研究下IIC从机是如何接收信号的。如果是你写接收,你会怎么写?在0.6us以前被拉高,你会怎么处理?这只是我想到的疑问,解决了,我想你的问题你也弄明白了。
回复

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
 楼主| 发表于 2016-11-5 15:27:37 | 显示全部楼层
footprint 发表于 2016-11-5 14:49
严格按时序分析不对,但是两个电平拉高以后就是停止呀!

这个停止信号的目的只是为了拉高两条线释放总线吗,那也就没必要分先后了吗,我现在有点迷糊
回复

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
 楼主| 发表于 2016-11-5 15:29:07 | 显示全部楼层
footprint 发表于 2016-11-5 14:55
你不妨研究下IIC从机是如何接收信号的。如果是你写接收,你会怎么写?在0.6us以前被拉高,你会怎么处理? ...

我怎么感觉对于接收没有停止信号也无所谓呢
回复

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2016-11-5 17:01:17 | 显示全部楼层
迪拜大呲花 发表于 2016-11-5 15:27
这个停止信号的目的只是为了拉高两条线释放总线吗,那也就没必要分先后了吗,我现在有点迷糊

大概就是这个原因,没有深究过。
回复

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
 楼主| 发表于 2016-11-5 18:08:22 | 显示全部楼层
footprint 发表于 2016-11-5 17:01
大概就是这个原因,没有深究过。

好吧,谢谢了。还是按时序走吧,绝对不会错
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-7 11:32:57 | 显示全部楼层
IIC停止信号是SCL高电平期间SDA有一个上升沿~第二个代码无法体现上升沿~所以需要一个延时保证上升沿的存在
回复

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
 楼主| 发表于 2016-11-7 11:43:51 | 显示全部楼层
小陀螺爱炒蛋 发表于 2016-11-7 11:32
IIC停止信号是SCL高电平期间SDA有一个上升沿~第二个代码无法体现上升沿~所以需要一个延时保证上升沿的存在

我说的就是这个问题~但是这是原子例程里的代码,而且在板子上跑例程也没出错误,我后来发现没有停止信号也能正常读写24C02
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-7 11:48:23 | 显示全部楼层
迪拜大呲花 发表于 2016-11-7 11:43
我说的就是这个问题~但是这是原子例程里的代码,而且在板子上跑例程也没出错误,我后来发现没有停止信号 ...

如果没有停止信号的话,总线上挂载多个IC,逻辑会出问题~你可以尝试下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 00:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表