i2c有两根线一根叫做SDA,另一根叫做SCL

SCL用于主机传输时钟信号

SDA用于主机和从机之间传输数据

每个设备都有七个地址,用于和其他从设备区分

空闲时刻SDA和SCL都是高电平

I2C时序

在SCL在高电平的时候,SDA产生一个下降沿,这时就会认为触发了一个开始信号,紧接着主机就传输7位的地址,再加一位的读写位,写操作的话这个读写位就是0,读操作的话这个读写位就是1。同时SCL产生时钟信号,每一位数据都在SCL的时钟信号下进行传输,从图上时序图我们能看到传输了9位,第九位这里是需要等待设备返回一个ACK,主机会把SDA设置为输入,来等待SCL这个ACK信号,如果设备响应了就把SDA拉低,紧接着后面就可以传输数据了。每传输一个字节后面都有一个ACK信号,来表示主设备或者从设备已经接收到这个字节数据了。当然我们要知道ACK是接收方发出的。在发送结束之后,会产生一个结束信号,这个结束信号也是主机产生的。在SCL处于高电平的时候,SDA产生一个上升沿,被视为结束信号。

写时序

这张图的读写位是0,表示写操作,然后传输寄存器地址,然后后面带入写入的数据,发完之后主机产生一个结束信号,也就是在 SCL 高的时候,把 SDA 拉高

读时序


读时序首先读写位开始还是写操作,要把寄存器地址写进去,然后得到回应之后才开始把读写位变成读操作后面读取数据,读完之后主机产生一个结束信号。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐