欢迎光临散文网 会员登陆 & 注册

I2C通信

2022-02-16 22:54 作者:云汉含星  | 我要投稿

I2C通信协议:串行,同步,半双工

数据线SDA (需要上拉输出)

时钟线SCL(由master提供时钟)

待机状态:SCL和SDA都持续高电平。


开始标志:SCL高电平,SDA由高变为低 ↓

结束标志:SCL高电平,SDA由低变为高 ↑

数据有效性:

SCL高电平时,SDA不能修改,此时可以读取SDA的有效数据。

SCL低电平时,SDA可以发生电平的变动。

应答(ACK)和非应答(NACK):

IIC write:master将SDA拉高来释放SDA。如果slave将SDA拉低,则认为回应了master,传输成功(可以继续传输下一个字节,直到传输结束,再发送STOP信号)。如果slave没有拉低SDA,则认为通信失败。

IIC read:master在接收完slave发送的数据后,回复ACK(拉低SDA),则slave继续向master发送数据。若master回复NACK(拉高SDA),则表示不需要slave继续发送数据。

使用GPIO接口来模拟IIC:

GPIO需要设置为开漏输出模式,因为推挽输出不能进行线与。(若是上拉输出,则推挽/开漏都可以)

通信时应该注意寄存器修改需要的时间,有的寄存器擦写时间长,写入操作后不能立刻进行读取操作,读写操作之间需要一个时间间隔。(比如说EEPROM的擦写时间就比较长)


I2C通信的评论 (共 条)

分享到微博请遵守国家法律