[STM32L0] 为什么I2C的占空比不是50%?

[复制链接]
572|10
lvluoo 发表于 2025-9-19 12:15 | 显示全部楼层 |阅读模式
在我的项目中使用STM32L031,并通过I2C读取EEPROM。虽然能够正常读取EEPROM,但从下图中的SCL信号(红色部分)可以看出,其占空比并非50%。
我的I2C速度为400kHz。实测高电平时间为750ns,低电平时间为1.96us。这种情况是什么原因造成的?
(注:同一EEPROM还连接了nRF52833芯片)
我使用STM32CubeIDE生成了代码。
2185168cc22891af54.png

磨砂 发表于 2025-10-9 14:17 | 显示全部楼层
根据I²C协议规范,数据必须在时钟线处于高电平时保持稳定,而所有变化只能在SCL低电平时发生
晓伍 发表于 2025-10-9 16:49 | 显示全部楼层
当主设备发送一个字节时,每个比特位对应的时间段内,SCL的高电平用于采样数据,而低电平则用于切换下一个比特位的准备阶段
八层楼 发表于 2025-10-9 19:05 | 显示全部楼层
I²C的起始条件和停止条件均是在SCL为高电平时通过改变数据线的状态来实现的
观海 发表于 2025-10-9 21:28 | 显示全部楼层
I²C采用开漏极输出结构,需要外接上拉电阻才能实现正常的高低电平转换
guanjiaer 发表于 2025-10-10 08:24 | 显示全部楼层
每次数据传输后,接收方需在第9个时钟周期内发送ACK或NACK信号。这一过程需要在特定时间段内完成,可能导致某些阶段的时钟周期被拉长或缩短,从而间接影响后续脉冲的占空比。
heimaojingzhang 发表于 2025-10-10 10:56 | 显示全部楼层
在多主设备共存的场景下,I²C通过线与逻辑实现总线仲裁
keaibukelian 发表于 2025-10-10 13:23 | 显示全部楼层
若多个主设备同时尝试驱动总线,则可能出现竞争现象,此时SCL的实际波形会受到干扰,其占空比也会随之波动
paotangsan 发表于 2025-10-10 15:52 | 显示全部楼层
不同的分频系数会影响SCL的频率和相位关系,但默认配置通常不会刻意追求50%占空比,而是优先保证协议合规性和稳定性
renzheshengui 发表于 2025-10-10 18:16 | 显示全部楼层
在长距离传输或噪声敏感环境中,适当增加高电平宽度有助于提高抗干扰能力,确保数据正确采样。此时牺牲理想的占空比是为了换取更高的通信成功率
wowu 发表于 2025-10-10 20:36 | 显示全部楼层
不同厂商生产的I²C设备对时钟边沿的敏感度存在差异
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

90

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部