OpenEdv-开源电子网

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

关于IIC实验程序的一些疑问

[复制链接]

32

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2022-9-21
在线时间
14 小时
发表于 2022-11-6 16:20:43 | 显示全部楼层 |阅读模式
1金钱
问题1:模拟IIC结束信号是当SCL高电平时,SDA由低到高,第一个函数是原子写的,第二个函数是我自己写的,感觉第二个更加的直观,不明白原子的版本中为什么要先将SCL=0,延时之后再SCL=1,直接SCL=1然后SDA由低到高不好吗?
2022-11-06_112013.png
问题2:在IIC_Wait_Ack()函数中,为什么SDA_IN()之后还可以设置SDA=1?SDA的操作权不是交给从机了吗?是不是应该先SDA=1,再SDA_IN(),颠倒一下顺序
2022-11-06_161137.png
问题3:为什么再IIC的void IIC_Ack(void)和void IIC_NAck(void)即产生应答和不产生应答还有发送数据的函数中都有对SCL有 由低拉高再拉低 的操作?个人猜测SCL的这个变化就是代表SDA有一个动作,例如产生应答,不产生应答或者传输1bit数据,这是IIC规定的,对吗?
2022-11-06_161753.png

最佳答案

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

这些内容全在协议里边有:1:如果不把SCL置低的话,那就有可能是在等待应答的那一个位发送的结束信号 2:应答是低电平有效,所以设置成上拉输入 3:SCL是时钟线,时序图里边有,要切换到收或者发下一位数据就得给一个时钟(由低到高),否则从机就卡在上一位结束的状态
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
金钱
1042
注册时间
2022-4-20
在线时间
373 小时
发表于 2022-11-6 16:20:44 | 显示全部楼层
kkxc 发表于 2022-11-6 20:12
实在抱歉,没看太懂............
1.SCL高时SDA必须稳定?那就是SDA不能变喽?不对吧
2.我就是不太明白 ...

这些内容全在协议里边有:1:如果不把SCL置低的话,那就有可能是在等待应答的那一个位发送的结束信号
2:应答是低电平有效,所以设置成上拉输入
3:SCL是时钟线,时序图里边有,要切换到收或者发下一位数据就得给一个时钟(由低到高),否则从机就卡在上一位结束的状态
又菜又爱指点
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2022-11-6 18:48:09 | 显示全部楼层
1. IIC规定SCL高时SDA必须稳定。所以改变SDA之前必须将SCL=0;
2. 先设置为输入,再进一步设置为上拉。
3. IIC规定传输8bit之后第九bit 是应答信号,不管应答0还是1,都必须给时钟信号。
回复

使用道具 举报

32

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2022-9-21
在线时间
14 小时
 楼主| 发表于 2022-11-6 20:12:18 | 显示全部楼层
c2007s 发表于 2022-11-6 18:48
1. IIC规定SCL高时SDA必须稳定。所以改变SDA之前必须将SCL=0;
2. 先设置为输入,再进一步设置为上拉。
3 ...

实在抱歉,没看太懂............
1.SCL高时SDA必须稳定?那就是SDA不能变喽?不对吧
2.我就是不太明白先设置为输入,再设置为上拉的合理性,设置为输入SDA就由对方控制了,怎么自己还可以上拉呢?
3.不太明白您的描述和我的问题之间的关系,传输1字节数据时也有这样的操作呀
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2022-11-7 09:30:26 | 显示全部楼层
可以先研究下I2C协议,这些都是根据协议来的
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2022-11-7 17:18:21 | 显示全部楼层
设置为开漏输入上拉,其实就是释放SDA线给从机。建议先仔细研究一下协议吧。
回复

使用道具 举报

32

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2022-9-21
在线时间
14 小时
 楼主| 发表于 2022-11-7 19:14:49 | 显示全部楼层
c2007s 发表于 2022-11-7 17:18
设置为开漏输入上拉,其实就是释放SDA线给从机。建议先仔细研究一下协议吧。

好的,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 22:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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