在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: frankobvip

[求助] I2C里面SCL是周期性的吗?

[复制链接]
发表于 2019-12-5 12:00:06 | 显示全部楼层


frankobvip 发表于 2019-12-5 09:55
谢谢,在单master的情况下,在Start和Stop之间,我目前的理解SCL是周期性的,原因如下:

网上看到的用Sy ...


你这是纯验证的思维,实际的I2C应用是软硬件联合完成的,作为点对点的I2C master,软件配置一个byte写入硬件FIFO或者寄存器,硬件才开始按照预设的周期toggle scl和sda,所以在MASTER发送完地址byte后,接收到slave的正确ack时(这个时间就是你看到的低电平被拉长的时间)才会把待发送的下一个byte写入硬件FIFO或者寄存器,所以SCL从视觉上看是多拉低了一会,主要是软件在这个时间参与了。
 楼主| 发表于 2019-12-5 14:58:23 | 显示全部楼层
本帖最后由 frankobvip 于 2019-12-5 17:42 编辑


xiaojia102003 发表于 2019-12-5 12:00
你这是纯验证的思维,实际的I2C应用是软硬件联合完成的,作为点对点的I2C master,软件配置一个byte写入 ...


I2C的时序是由master控制,所以我这边只能猜测,以下几点是猜测SCL为周期性的原因

1. 根据Verilog描述得到,完整的如附件,附件是Master的System Verilog描述
i2c_m.rar (4.35 KB, 下载次数: 10 )

(描述完全错误)2. 如果Master接收到ACK信号才继续发送SCL信号,那么未接收到ACK信号时,SCL信号应该被拉高,而不是把SCL Low period时间加长


若SCL low period时间加长,且一直接收不到ACK信号,那Slave岂不是要一直把SCL拉低,这样我觉得是不合理的,因为Slave不响应Master,则Master就应该放弃与Slave握手,不然一直把总线占住,其他可以通讯的设备不就无法通讯了吗?





发表于 2019-12-5 16:45:22 | 显示全部楼层


frankobvip 发表于 2019-12-5 14:58
I2C的时序是由master控制,所以我这边只能猜测,以下几点是猜测SCL为周期性的原因

1. 根据Verilog描述得 ...


听你这么讲,你应该没仔细阅读过I2C的协议。
 楼主| 发表于 2019-12-5 17:37:50 | 显示全部楼层


xiaojia102003 发表于 2019-12-5 16:45
听你这么讲,你应该没仔细阅读过I2C的协议。




嗯,不好意思,我的第二点猜测所写完全是不知所云了。。抱歉,我再整理下

1. 第8个SCL 上升沿,Slave接收到第8个data

2. 第8个SCL下降沿之后Low period(假设下降沿在上升沿之后),Slave 通过把SDA拉低应答

3. 第9个SCL上升沿来临时,Master要检测到SDA为低,才算Slave应答OK。

4. 第9个SCL上升沿应答成功,为啥第9个SCL下降沿之后的Low period要特地拉长呢?

请看下图,谢谢
1.png

发表于 2024-12-10 10:53:51 | 显示全部楼层
i2c接口是scl的下降沿发送数据,上升沿采样;数据传输时,scl为高电平时不允许sda发生变化,所以数据的arrive time最大为t_low-t_hddat,所以t_low越短对时序要求越严格,为了提高通讯速率可以在满足要求的最短t_low时间下适当缩短t_high的时间,这样可以进一步提升通讯的速度。可以发现,在协议规定的400k速率下,也是t_low大于 t_high.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 14:40 , Processed in 0.025069 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表