matttsai 发表于 2018-4-26 19:56:47

I2C SCL信号问题

请问一下我在I2C Init完之后, 如果都不去对I2C做read/write的动作
SCL会一直处于High吗

我用示波器接SCL pin, 发现它会一直保持High, 这是正常的吗
我只有在对I2C做Read/Write的动作时, 才会从示波器上看到SCL有发生变化

Thanks

select326 发表于 2018-4-26 20:24:40

不操作的时候,当然是不会变化的。

Angel_YY 发表于 2018-4-26 20:59:12

I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。所以空闲状态SCL就应该是高电平。

matttsai 发表于 2018-4-26 21:01:37

select326 发表于 2018-4-26 20:24
不操作的时候,当然是不会变化的。

我利用HAL_I2C_Mem_Read()去读取I2C
这个API有包含把SCL拉High, 拉Low的动作吗? 在那个地方去拉High, 拉Low?

如果我去call HAL_I2C_Mem_Read() API
SCL没有被拉High/low, 问题会是什么?

select326 发表于 2018-4-26 22:07:23

matttsai 发表于 2018-4-26 21:01
我利用HAL_I2C_Mem_Read()去读取I2C
这个API有包含把SCL拉High, 拉Low的动作吗? 在那个地方去拉High, 拉L ...

SCL是时钟性号,只要有操作,自然就会有了拉高拉低。

toofree 发表于 2018-4-27 00:48:40

本帖最后由 toofree 于 2018-4-27 00:49 编辑

是的,SCL不操作的时候默认就是高电平。如果发现不操作的时候SCL为低电平,反而出问题了,有可能I2C被总线上某个I2C设备给拉死了。

andeyqi 发表于 2018-4-27 07:23:44

正常的,总线处于空闲状态

发表于 2018-4-27 08:36:03

matttsai 发表于 2018-4-26 21:01
我利用HAL_I2C_Mem_Read()去读取I2C
这个API有包含把SCL拉High, 拉Low的动作吗? 在那个地方去拉High, 拉L ...

I2C模块会根据发送数据自动输出SCL,如果没有SCL,没有时钟参考,对方不知道I2C上面发送的数据是什么。I2C一般最高是400Khz。

jjbboox 发表于 2018-4-27 09:41:22

楼主大惊小怪了,I2C总线空闲的时候必须为高电平,本身就需要上拉的。

页: [1]
查看完整版本: I2C SCL信号问题